เครื่องมือสำหรับนักพัฒนา

สร้าง Flexbox

ตั้งค่าพร็อพเพอร์ตี แล้วอ่านเป็นภาษาธรรมดาว่ามันทำอะไรจริง ๆ

สร้าง Flexbox ทำงานบนอุปกรณ์ของคุณ
  • ทำงานในเบราว์เซอร์ของคุณ — ข้อความของคุณไม่ถูกส่งไปที่ใด
  • ไม่ต้องสมัครสมาชิก ไม่มีโควตา ใช้ฟรีกี่ครั้งก็ได้

ทำงานอย่างไร

Flexbox ไม่ซับซ้อน แต่มีเรื่องหนึ่งที่ทำให้เกือบทุกคนพลาด คือ justify-content และ align-items ไม่ได้หมายถึงแนวนอนและแนวตั้ง แต่หมายถึงตามทิศทางและขวางทิศทาง และทิศทางเป็นสิ่งที่คุณตั้งเอง

กับดัก พูดตรง ๆ

เมื่อ flex-direction: row, justify-content ทำงานในแนวนอนและ align-items ในแนวตั้ง เปลี่ยนเป็น column แล้วทั้งสองสลับกันโดยสิ้นเชิง เวลาที่เสียไปกับ flexbox แทบทั้งหมดมาจากเรื่องนี้ คำอธิบายด้านล่างจะอัปเดตเมื่อคุณเปลี่ยนทิศทาง เพื่อให้เห็นความสัมพันธ์ ไม่ใช่ท่องจำ

แกนหลักและแกนรอง

แกนหลักคือแกนที่รายการไหลไปตาม กำหนดโดย flex-direction แกนรองตั้งฉากกับแกนหลัก justify-content กระจายพื้นที่ตามแกนหลัก align-items จัดตำแหน่งรายการบนแกนรอง เมื่อจำสองชื่อนี้ได้ ที่เหลือก็ตามมา

gap และเหตุผลที่มันมาแทน margin

gap ใส่ช่องว่างระหว่างรายการโดยไม่เพิ่มด้านนอกของรายการแรกและรายการสุดท้าย ซึ่งเป็นสิ่งที่ margin ทำผิด และเป็นสิ่งที่คนเคยแก้ด้วยวิธีแฮ็ก :last-child เบราว์เซอร์ปัจจุบันทุกตัวรองรับ และไม่มีเหตุผลต้องหลีกเลี่ยงอีกต่อไป

nowrap หมายถึงหด ไม่ใช่ล้น

ค่าเริ่มต้นคือ nowrap รายการจะหดเล็กกว่าขนาดตามธรรมชาติเพื่อให้พอดี แทนที่จะย้ายไปบรรทัดใหม่ นี่คือเหตุผลที่ข้อความบางครั้งถูกบีบโดยไม่คาดคิดในแถว flex การตั้ง wrap ให้รายการย้ายลงไปแทน min-width: 0 บนองค์ประกอบลูกหยุดไม่ให้หดเกินเนื้อหา

จัดกึ่งกลางทั้งสองทิศทาง

justify-content: center ร่วมกับ align-items: center จัดรายการให้อยู่กึ่งกลางทั้งสองทิศทางไม่ว่า flex-direction จะเป็นอะไร ซึ่งเป็นชุดเดียวที่ควรจำให้ขึ้นใจ

คำถามที่พบบ่อย

สร้าง Flexbox — คำถามที่พบบ่อย

ทำไม align-items จึงเลื่อนสิ่งต่าง ๆ ในแนวนอน

เพราะ flex-direction เป็น column พร็อพเพอร์ตีทั้งสองเป็นไปตามทิศทาง ไม่ใช่หน้าจอ

แกนหลักต่างจากแกนรองอย่างไร

แกนหลักคือทิศทางที่รายการไหลไป กำหนดโดย flex-direction แกนรองตั้งฉากกับแกนหลัก

จัดกึ่งกลางทั้งสองทิศทางได้อย่างไร

ใช้ justify-content: center ร่วมกับ align-items: center

ทำไมข้อความของฉันถูกบีบ

ค่าเริ่มต้น nowrap จะหดรายการให้พอดี ให้ตั้ง flex-wrap: wrap หรือ min-width: 0 กับองค์ประกอบลูก

ใช้ gap กับ flexbox ได้ไหม

ได้ ในเบราว์เซอร์ปัจจุบันทุกตัว ดีกว่า margin เพราะไม่เพิ่มช่องว่างที่ปลายทั้งสอง