CSS
Flexbox
order
เรียนรู้การเปลี่ยนลำดับการแสดงผลของ flex items ด้วย order โดยยังรักษา HTML source order ให้มีความหมายถูกต้อง
1. Core Idea
order ใช้เปลี่ยนลำดับการแสดงผลของ flex items บนหน้าจอ โดยไม่ย้ายตำแหน่งจริงใน HTML เหมาะกับการปรับ presentation เล็ก ๆ เช่น ให้ปุ่มสำคัญแสดงก่อน หรือจัดลำดับ badge/title/action ใน card
- order เป็น property ของ flex item ไม่ใช่ flex container
- ค่าเริ่มต้นของทุก item คือ order: 0
- item ที่มี order น้อยกว่า จะแสดงก่อน item ที่มี order มากกว่า
- ถ้า order เท่ากัน browser จะใช้ลำดับเดิมจาก HTML
2. Mental Model
ให้นึกถึงบัตรคิวที่ยังวางอยู่ในกองเดิม แต่แต่ละใบมีเลข priority แปะอยู่ เมื่อถึงเวลาจัดแสดง browser จะเรียงจากเลข priority น้อยไปมาก ถ้าสองใบมีเลขเท่ากัน ก็กลับไปดูว่าใบไหนมาก่อนในกองเดิม
B แสดงก่อนเพราะมี order น้อยกว่า แต่ตำแหน่งใน HTML ยังอยู่ที่เดิม
HTML: A(order: 0) B(order: -1) C(order: 1)
Visual: B(order: -1) A(order: 0) C(order: 1)3. Rule / Definition
| กฎ | ความหมาย | ข้อควรระวัง |
|---|---|---|
| default | ทุก flex item เริ่มที่ order: 0 | ไม่ต้องเขียนถ้าใช้ลำดับ HTML เดิม |
| ค่าน้อยกว่า | แสดงก่อน เช่น -1 มาก่อน 0 | ใช้เท่าที่จำเป็นเพื่อไม่ให้ layout อ่านยาก |
| ค่ามากกว่า | แสดงทีหลัง เช่น 2 หลัง 1 | อย่าตั้งเลขกระโดดโดยไม่มีเหตุผล |
| ค่าเท่ากัน | กลับไปเรียงตาม HTML source order | source order ยังสำคัญเสมอ |
order เปลี่ยนเฉพาะลำดับที่มองเห็น ไม่ได้เปลี่ยนความหมายของเอกสารจริง ดังนั้นถ้าเนื้อหามีลำดับสำคัญต่อการอ่าน เช่น ขั้นตอน, heading, หรือ form flow ควรจัด HTML ให้ถูกก่อน แล้วใช้ order เฉพาะการปรับภาพเล็กน้อย
4. Worked Example
- เริ่มจาก HTML ที่เรียงเป็น Logo, Search, Primary button
- ทุก item มี order: 0 จึงแสดงตาม HTML เดิม
- ถ้าใส่ order: -1 ให้ Primary button ปุ่มนี้จะถูกแสดงก่อน item ที่ยังเป็น 0
- Logo และ Search ยังมี order เท่ากัน จึงเรียงกันตาม HTML เดิม
.primary เป็น flex item จึงรับ order ได้ ส่วน .toolbar เป็น flex container
.toolbar {
display: flex;
gap: 12px;
}
.primary {
order: -1;
}5. Code Example
6. Recap
- order เขียนบน flex item และทำงานเมื่อ parent เป็น flex container
- ค่า default คือ 0; ค่าน้อยกว่าแสดงก่อน ค่ามากกว่าแสดงทีหลัง
- ถ้า order เท่ากัน browser ใช้ลำดับ HTML เดิม
- ใช้ order เพื่อปรับภาพเล็กน้อย ไม่ใช้แทนการจัด HTML ให้มีความหมายถูกต้อง