CSS Flexbox Model ถูกสร้างขึ้นเพื่อปรับปรุง CSS Box Model ที่สร้างขึ้น โมเดล Flexbox ยังคงมีองค์ประกอบหลักของ Box Model (ระยะขอบ ช่องว่างภายใน เส้นขอบ และเนื้อหา) แต่ให้ความยืดหยุ่นในการเติมพื้นที่ว่างให้ดีที่สุดด้วยลูกของคอนเทนเนอร์/พาเรนต์
บทช่วยสอนนี้จะช่วยให้คุณเข้าใจโมดูล flexbox ได้ดีขึ้นเล็กน้อย คุณจึงสามารถเริ่มทำให้ไซต์ของคุณตอบสนองได้ดียิ่งขึ้น
ต่อไปนี้เป็นรหัสเริ่มต้นสำหรับการสาธิตโมเดล flexbox พื้นฐาน – โปรดปฏิบัติตามในขณะที่เราพูดถึง flexbox!
<!DOCTYPE html> <head> <title>Flexbox</title> <style> * { box-sizing: border-box; font-family: 'Roboto' } .parent-container { height: 700px; background: green; width: 700px; padding: 20px; } .child-item { height: 200px; width: 200px; margin: 0px; padding: 20px; } .child-item:first-child { background: orange; } .child-item.one { background: purple; } .child-item.two { background: aliceblue; } .child-item.three { background: grey; } .child-item.four { background: pink; } .child-item.five { background: yellowgreen; } .child-item.six { background: red; } .child-item.seven { background: blanchedalmond; } .child-item.eight { background: white; } .child-item.nine { background: lightblue; } .child-item.nine { background: darkred; } .child-item:last-child { background: yellow; } </style> </head> <body> <div class="parent-container"> <div class="child-item">Lisa Simpson</div> <div class="child-item one">Bart Simpson</div> <div class="child-item two">Maggie Simpson</div> <div class="child-item three">Homer Simpson</div> <div class="child-item four">Marge Simpson</div> <div class="child-item five">Grampa Simpson</div> <div class="child-item six">Santa's Little Helper</div> <div class="child-item seven">Apu Nahasapeemapetilon</div> <div class="child-item eight">Moe Szyslak</div> <div class="child-item nine">Ned Flanders</div> <div class="child-item ten">Snowball II</div> </div> <script src="" async defer></script> </body> </html>
คุณสมบัติของคอนเทนเนอร์หลัก (Flexbox)
จอแสดงผล:ดิ้น
คุณสมบัติการแสดงผลมีค่าหลายค่าที่เราสามารถใช้เพื่อวางตำแหน่งคอนเทนเนอร์ของเราบนหน้าจอ คุณอาจเคยเห็น block, inline-block, none, hidden, inline แล้ว แต่สิ่งที่เราจะเน้นในตอนนี้เรียกว่า flex .
อย่างแรก สิ่งที่ฉันอยากให้คุณทำคือจินตนาการถึงภาชนะขนาดใหญ่ เช่น หีบสมบัติ กล่องของเล่น หรือกล่องกระดาษแข็ง จากนั้นลองนึกภาพว่ากำลังวางสิ่งของต่างๆ ลงในภาชนะ ภาชนะขนาดใหญ่คือสิ่งที่เราเรียกว่าแม่ หรือ flexbox และของชิ้นเล็กที่ใส่เข้าไปในภาชนะคือ ลูก หรือ รายการแบบยืดหยุ่น
เมื่อเราเพิ่ม display: flex
ในคอนเทนเนอร์หลัก คุณสมบัติถูกกำหนดให้กับคอนเทนเนอร์นั้นและคอนเทนเนอร์นั้นเพียงอย่างเดียว - ไฟล์ย่อยจะไม่สืบทอดคุณสมบัติ (อย่างไรก็ตาม พวกเขาสามารถใช้คุณสมบัติสำหรับคอนเทนเนอร์ของตนเองที่จะส่งผลกระทบต่อ ของพวกเขา เด็ก).
คุณสมบัตินี้เปิดคุณสมบัติอื่น ๆ ทุกประเภทที่เราสามารถใช้ได้ที่เราไม่สามารถทำได้มาก่อน:flex-direction
, justify-content
, align-items
, align-self
, flex-wrap
และ flex-flow
.
เรียกใช้ตัวแก้ไขโค้ดด้านบน ตอนนี้ คุณควรเห็นคอนเทนเนอร์สีเขียวขนาดใหญ่ คอนเทนเนอร์หลัก และคอนเทนเนอร์ขนาดเล็ก 11 รายการ คอนเทนเนอร์ย่อย ภายในพาเรนต์
การวางแนวของคอนเทนเนอร์ย่อยอยู่ด้านบนของกันและกันเนื่องจากค่าเริ่มต้นคือ display: block
. ถ้าจำกันได้เมื่อเราใช้ display: block
คอนเทนเนอร์จะกินพื้นที่ทั้งแถวที่มีอยู่ ค่าเริ่มต้นของระยะขอบจะขยายเป็นความกว้างของคอนเทนเนอร์หลัก ส่งผลให้คอนเทนเนอร์ย่อยทั้งสองอยู่ทับกัน
81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้
ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก
ในทางตรงกันข้าม การใช้ display: flex
ช่วยให้เราจัดตำแหน่งคอนเทนเนอร์ย่อยได้อย่างง่ายดายในแบบที่เราชอบในคอนเทนเนอร์หลัก โดยไม่ต้องใช้คุณสมบัติของกล่องรุ่นเก่า เช่น ลอยและการจัดแนวแนวตั้ง
ลองเพิ่ม display: flex
กับ CSS ในแท็กรูปแบบในตัวแก้ไขโค้ดเพื่อให้ CSS ของคอนเทนเนอร์หลักมีลักษณะดังนี้:
.parent-container { height: 700px; background: green; width: 700px; padding: 20px; display: flex;
กำลังเพิ่ม display: flex
ไปที่ .parent-container
จะส่งผลให้ทิศทางของภาชนะลูกเปลี่ยนไป เมื่อคุณกด คุณควรเห็นคอนเทนเนอร์ย่อยอยู่เคียงข้างกัน
โดยใช้ display: flex
แทนที่จะ display: block
, ระยะขอบเริ่มต้นถูกตั้งค่าเป็น 0 จากนั้นเราสามารถจัดการมันได้ตามที่เห็นสมควร!
ทิศทางการโค้งงอ
คุณสมบัติ flex-direction ตั้งค่าแกนหลักของคอนเทนเนอร์ของเรา การตั้งค่าเริ่มต้นในคอนเทนเนอร์แบบยืดหยุ่นคือ แถว เมื่อตั้งค่าคอนเทนเนอร์หลักด้วย display: flex
คุณไม่จำเป็นต้องกำหนดทิศทางแบบยืดหยุ่น เว้นแต่คุณต้องการให้เนื้อหาของคุณอยู่ในคอลัมน์
แกนหลักในทิศทางเริ่มต้นคือซ้ายไปขวา และแกนตัดจากบนลงล่าง ดังที่แสดงที่นี่:
มาลองเพิ่ม flex-direction: column
. กัน ไปที่ .parent-container
. ของเรา ในโปรแกรมแก้ไขโค้ดด้านบน จะเกิดอะไรขึ้นเมื่อคุณกด?
ดูเหมือนว่าแกนจะพลิกเมื่อเราเปลี่ยน flex-direction
ไปที่คอลัมน์:อะไรเป็นแกนหลักของเรากลายเป็นแกนไขว้ แล้วอะไรคือแกนไขว้ของเรากลายเป็นแกนหลัก ดังที่แสดงด้านล่าง:
เป็นผลให้ลูก ๆ ของเราตู้คอนเทนเนอร์ในตัวอย่างของเราพลิกขวานของพวกเขา! ดังนั้นตอนนี้ภาชนะลูกจึงอยู่ด้านบนของกันและกันอีกครั้ง
สิ่งสำคัญที่สุดที่ต้องจำเกี่ยวกับ flex-direction
คือทิศทางของแกนหลักสอดคล้องกับค่าของ flex-direction
. ของคุณ คุณสมบัติ (คอลัมน์จากบนลงล่าง แถวจากซ้ายไปขวา)
Justify-content เกี่ยวข้องกับระยะห่างบนแกนหลัก และ align-ites เกี่ยวข้องกับระยะห่างรอบแกนไขว้ เราจะพูดถึงคุณสมบัติเหล่านั้นในภายหลัง
มีความเป็นไปได้อีกสองประการสำหรับทิศทางการโค้งงอ:row-reverse
และ column-reverse
. คุณสมบัติเหล่านี้คล้ายกับแถวและคอลัมน์มาก แต่ flex-items
เรียงจากขวาไปซ้ายในกรณีของแถวกลับและล่างขึ้นบนสำหรับคอลัมน์ย้อนกลับ
กรณีการใช้งานสำหรับค่าเฉพาะเหล่านี้เกิดขึ้นเมื่อคุณต้องการมีการจัดวางหรือลำดับที่แตกต่างกันบนหน้าเว็บของคุณจากเว็บไปยังมือถือหรือแท็บเล็ต
flex-wrap
จนถึงตอนนี้ เราได้เรียนรู้วิธี display: flex
ส่งผลต่อคอนเทนเนอร์ย่อยของพาเรนต์ และวิธีจัดการโฟลว์ของคอนเทนเนอร์ย่อยเหล่านั้นในแถวหรือในคอลัมน์ เกิดอะไรขึ้นถ้าขนาดของผู้ปกครองหมดห้อง? เกิดอะไรขึ้น? และเราจะแก้ไขได้อย่างไร?
คำตอบมาในรูปแบบของคุณสมบัติที่เรียกว่า flex-wrap
. โดยค่าเริ่มต้น flex-wrap
ถูกตั้งค่าเป็น nowrap
. ซึ่งหมายความว่าคอนเทนเนอร์ย่อยสามารถล้นคอนเทนเนอร์หลัก ทำให้เกิดปัญหาเลย์เอาต์ที่ไม่ต้องการ มาลองเพิ่ม flex-wrap: wrap
. กัน; ไปที่ .parent-container
และดูว่าเกิดอะไรขึ้น:
เลย์เอาต์ของคอนเทนเนอร์ที่นี่ดูดีกว่ามาก Flex-wrap จะนำส่วนประกอบย่อยทั้งหมดมาวางเคียงข้างกันจนกว่าจะถึงความกว้างของคอนเทนเนอร์หลัก จากนั้นจึงย้ายไปยังแถวถัดไปเพื่อเพิ่มคอนเทนเนอร์ย่อยเพิ่มเติมเพื่อทำซ้ำกระบวนการจนกว่าจะแสดงคอนเทนเนอร์ทั้งหมด
Flex-wrap มีคุณสมบัติสามแบบ:nowrap, wrap และ wrap-reverse wrap-reverse เหมือนกับ wrap ยกเว้นว่ามันไหลจากล่างขึ้นบนแทนที่จะเป็นบนลงล่าง
Flex-flow
Flex-flow เป็นชวเลขสำหรับ flex-direction
และ flex-wrap
. ไวยากรณ์คือ flex-flow: column wrap
หากคุณต้องการให้ flex-direction ของคุณเป็นคอลัมน์ และ flex-wrap ของคุณถูกห่อ flex-flow: row nowrap
เป็นค่าเริ่มต้น
ปรับเนื้อหา
คุณสมบัติเนื้อหา justify เกี่ยวข้องกับการจัดแนวตามแกนหลักของคอนเทนเนอร์หลัก ช่วยในการแจกจ่าย flex-items
. ของคุณ ข้ามแกนหลักโดยที่คุณไม่ต้องคำนวณพื้นที่ที่ต้องการ ค่าคุณสมบัติ 6 ค่าที่ใช้บ่อยที่สุดสำหรับ justify-content
คือ flex-start
(ค่าเริ่มต้น), flex-end
, center
, space-around
, space-between
และ space-evenly
.
เริ่มต้นแบบยืดหยุ่น:
ปลายโค้ง:
ศูนย์:
เว้นวรรค:
ช่องว่างระหว่าง:
เว้นวรรคเท่าๆ กัน:
จัดตำแหน่งรายการ
ความแตกต่างที่ใหญ่ที่สุดระหว่าง align-items
และ justify-content
นอกจากแกนที่แจกจ่ายคอนเทนเนอร์ย่อยแล้ว ยังเป็นค่าเริ่มต้นอีกด้วย ขอเตือนว่าเมื่อเราใช้ flex-direction
ค่าเริ่มต้นสำหรับ justify-content
คือ flex-start
. นั่นไม่ใช่กรณีของ align-items
. ค่าเริ่มต้นคือการยืด
เพื่อให้เห็นภาพ ให้กลับไปที่ตัวแก้ไขโค้ดที่ด้านบนของหน้าและนำความกว้างและความสูงออกจาก .child-container
. เรามี display: flex
. แล้ว และ flex-direction
ชุด. มาสลับไปมาระหว่าง flex-direction: row
และ flex-direction: column
เพื่อดูว่าคอนเทนเนอร์ทำงานอย่างไรโดยไม่มีข้อจำกัดใดๆ เปรียบเทียบกับสิ่งที่คุณคาดหวังได้อย่างไร
ไม่มี align-items
ชุดกฎ คอนเทนเนอร์ย่อยขยายขนาดของคอนเทนเนอร์หลักบนแกนไขว้ อย่างไรก็ตาม หากเราตั้งค่า align-items
คุณสมบัติบนคอนเทนเนอร์หลัก ขนาดของคอนเทนเนอร์ย่อยจะปรับโดยอัตโนมัติตามขนาดของเนื้อหา บวกกับช่องว่างภายในและเส้นขอบที่คุณมี
จัดตำแหน่งรายการ:ยืด
จัดตำแหน่งรายการ:กึ่งกลาง
คุณสมบัติอื่นๆ ทั้งหมดที่เราดำเนินการสำหรับ justify-content
ใช้ที่นี่กับ align-items
และหมายถึงสิ่งเดียวกัน ยกเว้นว่าเราเพิ่งเปลี่ยนแกนที่เราอยู่
คุณสมบัติของตู้คอนเทนเนอร์ย่อย (รายการแบบยืดหยุ่น)
สั่งซื้อ
โดยปกติ ลำดับของคอนเทนเนอร์ในองค์ประกอบหลักจะเป็นไปตามวิธีการจัดวางในไฟล์ HTML อย่างไรก็ตาม หากคุณต้องการควบคุมลำดับของคอนเทนเนอร์ – ตัวอย่างเช่น หากคุณต้องการเน้นคอนเทนเนอร์ย่อยอื่นก่อนเมื่อคุณใช้อุปกรณ์เคลื่อนที่ – คุณสามารถทำได้โดยใช้คุณสมบัติคำสั่ง คุณสมบัติเป็นค่าตัวเลขที่ระบุว่าคอนเทนเนอร์ย่อยควรอยู่ในลำดับใดเมื่อแสดงบนหน้าจอ
จัดตำแหน่งตัวเอง
align-self
อนุญาตให้มีการจัดตำแหน่งเริ่มต้นหรือชุดที่กำหนดโดย align-items
จะถูกแทนที่ จำไว้ว่า align-self ใช้ได้ก็ต่อเมื่อพาเรนต์เองเป็น display: flex
. ค่าสำหรับ align-self
สามารถ flex-start
, flex-end
, พื้นฐานหรือยืด
บทสรุป
ในบทช่วยสอนนี้ เราได้กล่าวถึงพื้นฐานของโมเดลกล่องแบบยืดหยุ่น เราค้นพบว่า flexbox เกี่ยวข้องกับความสัมพันธ์ระหว่างคอนเทนเนอร์หลักและคอนเทนเนอร์รอง คุณสมบัติ flexbox ของพาเรนต์ส่งผลโดยตรงต่อการเคลื่อนไหวของคอนเทนเนอร์ย่อยในพื้นที่ว่างของพาเรนต์
เราใช้ flex-direction
, justify-content
, align-items
และ flex-wrap
เพื่อควบคุมตำแหน่งของเด็กในผู้ปกครองและเราใช้คำสั่งและ align-self
กับลูกเพื่อแทนที่ค่าเริ่มต้นหรือกฎบางอย่างที่วางไว้บนพาเรนต์
โปรดใช้ตัวแก้ไขโค้ดที่นี่เพื่อเล่นกับคุณสมบัติเหล่านี้เพื่อให้คุณสามารถฝึกฝนได้ คุณกำลังก้าวไปสู่การเป็นผู้เชี่ยวชาญ flexbox!