Flexbox และ CSS Grid เป็นเครื่องมือหลักสำหรับจัด layout สมัยใหม่ Flexbox เหมาะกับการจัดเรียงแบบหนึ่งมิติ เช่น แถวหรือคอลัมน์ ส่วน Grid เหมาะกับ layout สองมิติที่มีทั้งแถวและคอลัมน์
เริ่มใช้ Flexbox ด้วย display: flex
.toolbar {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
gap: 12px;
}
property สำคัญ:
flex-direction: ทิศทาง เช่น row, columnjustify-content: จัดแนวตามแกนหลักalign-items: จัดแนวตามแกนรองgap: ระยะห่างระหว่าง item.tag-list {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.tag {
flex: 1 1 160px;
}
ค่าที่เกี่ยวข้อง:
flex-wrap: อนุญาตให้ขึ้นบรรทัดใหม่flex-grow: ขยายได้มากแค่ไหนflex-shrink: หดได้มากแค่ไหนflex-basis: ขนาดตั้งต้นGrid ใช้จัด layout แบบแถวและคอลัมน์
.course-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: auto;
gap: 16px;
}
.featured {
grid-column: span 2;
}
.responsive-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
gap: 16px;
}
คำสำคัญ:
grid-columngrid-rowspanauto-fillauto-fitminmax()grid-areaใช้ตั้งชื่อพื้นที่ใน layout
.page {
display: grid;
grid-template-areas:
"header header"
"nav main"
"footer footer";
grid-template-columns: 240px 1fr;
}
header { grid-area: header; }
nav { grid-area: nav; }
main { grid-area: main; }
footer { grid-area: footer; }
| สถานการณ์ | เครื่องมือที่เหมาะ |
|---|---|
| ปุ่มใน toolbar | Flexbox |
| จัดเมนูแนวนอน | Flexbox |
| card responsive หลายคอลัมน์ | Grid |
| layout ทั้งหน้า | Grid |
| จัด item ตรงกลาง | Flexbox |
| layout มีแถวและคอลัมน์ชัดเจน | Grid |
.cards {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
gap: 20px;
}
.layout {
display: grid;
min-height: 100vh;
grid-template:
"header header header" auto
"nav main aside" 1fr
"footer footer footer" auto
/ 220px 1fr 260px;
}
สร้างหน้า layout ที่มี header, nav, main, aside และ footer โดยใช้ CSS Grid แล้วใช้ Flexbox จัดเรียงปุ่มใน nav
justify-content และ align-items ต่างกันอย่างไรminmax(220px, 1fr) ช่วย responsive อย่างไร