วิธีการจัดองค์ประกอบองค์ประกอบในแนวตั้งและแนวนอนใน Flexbox
ด้านล่างนี้เป็นคำตอบทั่วไปสองข้อ
หนึ่งรายการสำหรับรายการเฟล็กซ์แนวตั้ง ( flex-direction: column
) และอีกรายการสำหรับรายการเฟล็กซ์ที่จัดแนวนอน ( flex-direction: row
)
ในทั้งสองกรณีความสูงของ div ที่อยู่กึ่งกลางสามารถแปรผันไม่ได้กำหนดไม่ทราบอะไรก็ตาม ความสูงของตัวหารที่อยู่กึ่งกลางนั้นไม่สำคัญ
นี่คือ HTML สำหรับทั้งสอง:
<div id="container"><!-- flex container -->
<div class="box" id="bluebox"><!-- flex item -->
<p>DIV #1</p>
</div>
<div class="box" id="redbox"><!-- flex item -->
<p>DIV #2</p>
</div>
</div>
CSS (ไม่รวมสไตล์การตกแต่ง)
เมื่อไอเท็มเฟล็กถูกเรียงซ้อนกันในแนวตั้ง:
#container {
display: flex; /* establish flex container */
flex-direction: column; /* make main axis vertical */
justify-content: center; /* center items vertically, in this case */
align-items: center; /* center items horizontally, in this case */
height: 300px;
}
.box {
width: 300px;
margin: 5px;
text-align: center; /* will center text in <p>, which is not a flex item */
}
การสาธิต
เมื่อไอเท็มเฟล็กถูกเรียงซ้อนในแนวนอน:
ปรับflex-direction
กฎจากรหัสด้านบน
#container {
display: flex;
flex-direction: row; /* make main axis horizontal (default setting) */
justify-content: center; /* center items horizontally, in this case */
align-items: center; /* center items vertically, in this case */
height: 300px;
}
การสาธิต
การจัดศูนย์กลางเนื้อหาของรายการที่ยืดหยุ่น
ขอบเขตของบริบทการจัดรูปแบบเฟล็กซ์ถูก จำกัด ไว้ที่ความสัมพันธ์พาเรนต์ - ลูก ลูกหลานของภาชนะบรรจุแบบยืดหยุ่นซึ่งอยู่นอกเหนือจากเด็กจะไม่เข้าร่วมในรูปแบบดิ้นและจะไม่สนใจคุณสมบัติยืดหยุ่น โดยพื้นฐานแล้วคุณสมบัติดัดงอจะไม่สามารถสืบทอดได้นอกเหนือจากเด็ก
ดังนั้นคุณจะต้องใช้display: flex
หรือdisplay: inline-flex
องค์ประกอบหลักเพื่อใช้คุณสมบัติยืดหยุ่นกับเด็ก
เพื่อจัดข้อความกึ่งกลางแนวตั้งและ / หรือแนวนอนหรือเนื้อหาอื่น ๆ ที่อยู่ในรายการเฟล็กซ์ให้ทำรายการเป็นคอนเทนเนอร์เฟล็ก (ซ้อนกัน) และทำซ้ำกฎการจัดกึ่งกลาง
.box {
display: flex;
justify-content: center;
align-items: center; /* for single line flex container */
align-content: center; /* for multi-line flex container */
}
รายละเอียดเพิ่มเติมที่นี่: วิธีจัดแนวข้อความภายใน flexbox ได้อย่างไร?
หรือคุณสามารถนำmargin: auto
ไปใช้กับองค์ประกอบเนื้อหาของรายการเฟล็กซ์
p { margin: auto; }
เรียนรู้เกี่ยวกับauto
ระยะขอบที่ยืดหยุ่นได้ที่นี่: วิธีการจัดแนวรายการแบบยืดหยุ่น (ดูกล่อง # 56)
อยู่ตรงกลางของรายการที่ยืดหยุ่น
เมื่อคอนเทนเนอร์แบบยืดหยุ่นมีหลายบรรทัด (เนื่องจากการห่อ) align-content
คุณสมบัติจะจำเป็นสำหรับการจัดตำแหน่งแกนข้าม
จากสเป็ค:
8.4 บรรจุ Flex Line: align-content
คุณสมบัติ
align-content
คุณสมบัติสอดคล้องเส้นภาชนะดิ้นภายในภาชนะดิ้นเมื่อมีพื้นที่พิเศษในแกนข้ามคล้ายกับวิธีการที่justify-content
สอดคล้องแต่ละรายการภายในแกนหลัก
หมายเหตุคุณสมบัตินี้ไม่มีผลกับคอนเทนเนอร์แบบยืดหยุ่นบรรทัดเดียว
รายละเอียดเพิ่มเติมที่นี่: flex-wrap ทำงานอย่างไรกับการจัดตำแหน่งด้วยตนเองจัดรายการและจัดเรียงเนื้อหา
รองรับเบราว์เซอร์
flexbox รับการสนับสนุนจากเบราว์เซอร์ที่สำคัญทั้งหมดยกเว้น IE <10 บางรุ่นเบราว์เซอร์ที่ผ่านมาเช่น Safari 8 และ IE10 ต้องคำนำหน้าของผู้ขาย หาวิธีที่รวดเร็วเพื่อเพิ่มคำนำหน้าใช้Autoprefixer รายละเอียดเพิ่มเติมในคำตอบนี้
การแก้ปัญหาการจัดกึ่งกลางสำหรับเบราว์เซอร์รุ่นเก่า
สำหรับโซลูชันการจัดกึ่งกลางทางเลือกโดยใช้ตาราง CSS และคุณสมบัติการกำหนดตำแหน่งดูคำตอบนี้: https://stackoverflow.com/a/31977476/3597276