การตั้งค่า Flex Container
Flex Container คือพื้นฐานที่สำคัญของ Flexbox เพราะเป็นตัวที่กำหนดว่าองค์ประกอบลูก (Flex Items) ภายใน container นี้จะถูกจัดวางแบบยืดหยุ่นอย่างไร
Flexbox
Result
คุณสมบัติของ Flex Container
Flex Container มี property หลักหลายตัวที่ช่วยกำหนดทิศทางและลักษณะการจัดวางของ Flex Items
1. flex-direction
ทำหน้าที่กำหนดทิศทางหลังที่ Flex Items ให้จัดเรียงกันตามแนวแกนที่กำหนด
- ค่าที่ใช้คือ:
row
(ค่าเริ่มต้น, จัดเรียงจากซ้ายไปขวา)
row-reverse
(จัดเรียงจากขวาไปซ้าย)
column
(จัดเรียงจากบนลงล่าง)
column-reverse
(จัดเรียงจากล่างขึ้นบน)
flex-direction
Result
2. flex-wrap
เมื่อพื้นที่ใน container ไม่พอให้แสดงทุก item ในบรรทัดเดียว สามารถใช้ Property flex-wrap ให้ items ขึ้นบรรทัดถัดไปได้
- ค่าที่ใช้คือ:
nowrap
(ค่าเริ่มต้น, ไม่ขึ้นบรรทัดใหม่)
wrap
(ให้องค์ประกอบขึ้นบรรทัดถัดไป)
wrap-reverse
(ขึ้นบรรทัดใหม่ในแนวกลับด้าน)
flex-wrap
Result
3. Flex Container alignment ที่ใช้บ่อย
-
justify-content: จัดตำแหน่ง Flex Items ตามแกนหลัก
ค่าทั่วไป: flex-start
, flex-end
, center
, space-between
, space-around
, space-evenly
-
align-items: จัดตำแหน่ง Flex Items ในแกนรอง (ตั้งฉากกับแกนหลัก)
ค่าทั่วไป: flex-start
, flex-end
, center
, baseline
, stretch
4. Gap
Gap เป็นคุณสมบัติที่ถูกพัฒนามาเพื่อเพิ่มระยะห่างระหว่าง Flex Items โดยอัตโนมัติ ทำให้การจัดวาง spacing มีความเป็นระเบียบมากขึ้น
Gap
Result
row-gap กับ column-gapGap สามารถกำหนดแบบแยกได้ ซึ่งจะประกอบไปด้วย row-gap กับ column-gap โดย
row-gap:
กำหนดช่องว่างระหว่างแถวของ Flex Items
(ในกรณีที่มีการ wrap) และ
column-gap:
กำหนดช่องว่างระหว่างคอลัมน์ของ Flex Items
row-gap and column-gap
Result
คุณสมบัติของ Flex Items
Flex Items คือองค์ประกอบลูกที่อยู่ใน Flex Container ซึ่งแต่ละ item สามารถกำหนด property เพื่อตั้งค่าการขยายตัวและการหดตัวตามพื้นที่ที่มี
1. flex-grow
ค่าที่กำหนดว่า Flex Item นั้นขยายตัวออกมากน้อยเพียงใดเมื่อมีพื้นที่ว่างใน container
flex-grow
Result
โดยหลักการทำงานของ flex-grow
จะใช้การกำหนดอัตราส่วนการขยายตัวของ Flex Items ใน container โดยค่าที่กำหนดจะเป็นตัวเลขที่บวก ซึ่งหมายถึงอัตราส่วนการขยายตัวของ item นั้นๆ
ค่าเริ่มต้นของ flex-grow
คือ 0 ซึ่งหมายถึงว่า item จะไม่ขยายตัวเลย
จากตัวอย่างโค้ด <aside>
มี flex-grow: 1
และ <main>
มี flex-grow: 2
สามารถรวมค่า flex-grow
ทั้งหมด = 1 + 2 = 3
คำนวณสัดส่วน
- aside จะได้พื้นที่ 1/3 ของพื้นที่ว่างที่เหลือ
- main จะได้พื้นที่ 2/3 ของพื้นที่ว่างที่เหลือ
ตัวอย่างการคำนวณ
ถ้าหากว่าพื้นที่ว่างใน container คือ 600px และมี aside กับ main อยู่ใน container นี้ จะได้
- aside จะได้ 200px
- main จะได้ 400px
จากภาพผลลัพธ์จะเห็นว่าพื้นที่สีเขียว (aside) มีขนาด 1 ส่วน และพื้นที่สีแดง (main) มีขนาด 2 ส่วน ตามค่า flex-grow ที่กำหนด
2. flex-shrink
ค่าที่กำหนดว่า Flex Item จะหดตัวลงมากน้อยเพียงใด เมื่อพื้นที่ใน container ถูกจำกัด
flex-shrink
Result
จากตัวอย่างเมื่อ container มีพื้นที่จำกัด และมี Flex Items ที่กำหนดค่า flex-shrink
ต่างกัน จะเห็นว่า กล่องแรก (สีแดง) จะไม่หดตัวเลยเพราะ flex-shrink: 0
ส่วนกล่องที่สอง (สีเขียว) จะหดตัวเป็นปกติเพราะ flex-shrink: 1
และกล่องสุดท้าย (สีน้ำเงิน) จะหดตัวเร็วขึ้นเพราะ flex-shrink: 2
3. flex-basis
ใช้กำหนดขนาดเริ่มต้นตามแนวแกนหลักของ Flex Item เทียบเท่ากับ width ในแนวนอนและ height ในแนวตั้ง ก่อนที่จะดำเนินการขยายหรือหดพื้นที่ตาม flex-grow
และ flex-shrink
flex-basis
Result
4. flex
(Shorthand)
เป็น shorthand รวมสาม Property เข้าไว้ด้วยกัน คือ flex-grow
, flex-shrink
และ flex-basis
flex (shorthand)
Result
สามารถเรียนรู้เพิ่มเติมเกี่ยวกับการใช้งาน Flexbox มากขึ้นจากบทความของ Josh W Comeau Interactive Guide to Flexbox