ปัญหาการจัดเรียงแบบกริดด้วย Flexbox ใน CSS
ปัญหาที่หนึ่งของการจัดเรียงแบบกริดนั้นค่อนข้างชัดเจนตั้งแต่แรก
- นั่นคือการที่ผู้ปกครอง (parent) ต้องกำหนดความสูงอย่างชัดเจนนั้นไม่สะดวกเลย
เพราะอาจมีกรณีที่จำนวนบล็อกเปลี่ยนแปลงแบบไดนามิก
จำนวนของบล็อกอาจน้อยกว่าหรือมากกว่า 9
ส่วนปัญหาที่สองจะเกิดขึ้น หากจำนวนบล็อกทำให้แถวสุดท้ายมีบล็อกไม่ครบ ในกรณีนี้แถวสุดท้ายจะดูแย่มาก:
<div class="parent">
<div class="child">1</div>
<div class="child">2</div>
<div class="child">3</div>
<div class="child">4</div>
<div class="child">5</div>
<div class="child">6</div>
<div class="child">7</div>
<div class="child">8</div>
</div>
.parent {
display: flex;
flex-direction: row;
justify-content: space-between;
flex-wrap: wrap;
width: 320px;
border: 1px solid red;
}
.child {
box-sizing: border-box;
width: 100px;
height: 100px;
border: 1px solid green;
}
:
ปรากฎว่าแม้แต่ในแนวนอน ค่า
space-between ก็ทำงานได้ไม่ดีในกรณีของเรา
สรุป: หากจำนวนของเอลิเมนต์ลูก (descendants) ของคุณ
คงที่เสมอและจัดเรียงในผู้ปกครองได้พอดี
การจัดเรียงแบบกริดด้วย space-between
ก็เป็นสิ่งที่ค่อนข้างสะดวก
แต่ในกรณีอื่น ๆ คุณจะต้องหาวิธีอื่น
มี 12 เอลิเมนต์ ให้สร้างการจัดเรียงแบบกริด
แถวละ 4 เอลิเมนต์ โดยแต่ละเอลิเมนต์กว้าง
100px และมีระยะห่างระหว่างเอลิเมนต์
20px
มี 12 เอลิเมนต์ ให้สร้างการจัดเรียงแบบกริด
แถวละ 3 เอลิเมนต์ โดยแต่ละเอลิเมนต์กว้าง
150px และมีระยะห่างระหว่างเอลิเมนต์
10px