Flexbox Challenge & ข้อ จำกัด
ความท้าทายคือการจัดกลุ่มรายการที่ยืดหยุ่นและจัดแนวซ้ายบนห่อ แต่เว้นแต่จะมีจำนวนกล่องคงที่ต่อแถวและแต่ละกล่องมีความกว้างคงที่ในขณะนี้ยังใช้ flexbox ไม่ได้
เมื่อใช้โค้ดที่โพสต์ในคำถามเราสามารถสร้าง flex container ใหม่ที่ห่อหุ้ม flex container ปัจจุบันul
) ซึ่งจะช่วยให้เราไปที่ศูนย์ด้วยul
justify-content: center
จากนั้นรายการดิ้นของ ul
justify-content: flex-start
อาจจะเหลือชิดกับ
#container {
display: flex;
justify-content: center;
}
ul {
display: flex;
justify-content: flex-start;
}
สิ่งนี้จะสร้างกลุ่มไอเท็มเฟล็กซ์ที่จัดชิดซ้ายตรงกลาง
ปัญหาของวิธีนี้คือในบางขนาดหน้าจอจะมีช่องว่างทางด้านขวาของหน้าจอul
ทำให้ไม่ปรากฏอยู่ตรงกลางอีกต่อไป
สิ่งนี้เกิดขึ้นเนื่องจากในเค้าโครงแบบยืดหยุ่น (และจริงๆแล้ว CSS โดยทั่วไป) คอนเทนเนอร์:
- ไม่รู้ว่าเมื่อใดที่องค์ประกอบห่อหุ้ม
- ไม่ทราบว่าพื้นที่ที่เคยครอบครองอยู่นั้นว่างเปล่าและ
- ไม่คำนวณความกว้างใหม่เพื่อลดขนาด - ห่อเค้าโครงที่แคบลง
ความยาวสูงสุดของช่องว่างทางด้านขวาคือความยาวของสินค้าเฟล็กซ์ที่คาดว่าคอนเทนเนอร์จะอยู่ที่นั่น
ในการสาธิตต่อไปนี้โดยการปรับขนาดหน้าต่างใหม่ในแนวนอนคุณจะเห็นช่องว่างที่มาและไปได้
การสาธิต
แนวทางปฏิบัติเพิ่มเติม
รูปแบบที่ต้องการสามารถทำได้โดยไม่ต้องใช้ flexbox inline-block
และ คำสั่งสื่อ
HTML
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
</ul>
CSS
ul {
margin: 0 auto;
width: 1200px;
padding-left: 0;
font-size: 0;
}
li {
display: inline-block;
font-size: 18px;
list-style-type: none;
width: 150px;
height: 50px;
line-height: 50px;
margin: 15px 25px;
box-sizing: border-box;
text-align: center;
}
@media screen and (max-width: 430px) { ul { width: 200px; } }
@media screen and (min-width: 431px) and (max-width: 630px) { ul { width: 400px; } }
@media screen and (min-width: 631px) and (max-width: 830px) { ul { width:600px; } }
@media screen and (min-width: 831px) and (max-width: 1030px) { ul { width: 800px; } }
@media screen and (min-width: 1031px) and (max-width: 1230px) { ul { width: 1000px; } }
โค้ดด้านบนแสดงคอนเทนเนอร์ที่อยู่ตรงกลางแนวนอนพร้อมด้วยองค์ประกอบลูกที่จัดชิดซ้ายดังนี้:
การสาธิต
ตัวเลือกอื่น