Light mode background

Flex Fundamentals

อัพเดตล่าสุดเมื่อ

17-2-2025

การตั้งค่า Flex Container

Flex Container คือพื้นฐานที่สำคัญของ Flexbox เพราะเป็นตัวที่กำหนดว่าองค์ประกอบลูก (Flex Items) ภายใน container นี้จะถูกจัดวางแบบยืดหยุ่นอย่างไร

Flexbox

index.html

Result

คุณสมบัติของ Flex Container

Flex Container มี property หลักหลายตัวที่ช่วยกำหนดทิศทางและลักษณะการจัดวางของ Flex Items

1. flex-direction

ทำหน้าที่กำหนดทิศทางหลังที่ Flex Items ให้จัดเรียงกันตามแนวแกนที่กำหนด

  • ค่าที่ใช้คือ:
    1. row (ค่าเริ่มต้น, จัดเรียงจากซ้ายไปขวา)
    2. row-reverse (จัดเรียงจากขวาไปซ้าย)
    3. column (จัดเรียงจากบนลงล่าง)
    4. column-reverse (จัดเรียงจากล่างขึ้นบน)

flex-direction

index.html

Result

2. flex-wrap

เมื่อพื้นที่ใน container ไม่พอให้แสดงทุก item ในบรรทัดเดียว สามารถใช้ Property flex-wrap ให้ items ขึ้นบรรทัดถัดไปได้

  • ค่าที่ใช้คือ:
    1. nowrap (ค่าเริ่มต้น, ไม่ขึ้นบรรทัดใหม่)
    2. wrap (ให้องค์ประกอบขึ้นบรรทัดถัดไป)
    3. wrap-reverse (ขึ้นบรรทัดใหม่ในแนวกลับด้าน)

flex-wrap

index.html

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

    แสดงชื่อแกน
    Item 1
    Item 2
    Item 3
    Item 4
    แกนหลัก
    แกนรอง

4. Gap

Gap เป็นคุณสมบัติที่ถูกพัฒนามาเพื่อเพิ่มระยะห่างระหว่าง Flex Items โดยอัตโนมัติ ทำให้การจัดวาง spacing มีความเป็นระเบียบมากขึ้น

Gap

index.html

Result

row-gap กับ column-gap

Gap สามารถกำหนดแบบแยกได้ ซึ่งจะประกอบไปด้วย row-gap กับ column-gap โดย row-gap:กำหนดช่องว่างระหว่างแถวของ Flex Items (ในกรณีที่มีการ wrap) และ column-gap:กำหนดช่องว่างระหว่างคอลัมน์ของ Flex Items

row-gap and column-gap

index.html

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

Loading...

flex (shorthand)

Result

สามารถเรียนรู้เพิ่มเติมเกี่ยวกับการใช้งาน Flexbox มากขึ้นจากบทความของ Josh W Comeau Interactive Guide to Flexbox

สร้างเมื่อ

11-2-2025

อัพเดตล่าสุดเมื่อ

17-2-2025