Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> HTML

วิธีสร้าง Flexbox Layout ใน HTML/CSS

Flexbox (Flexible Box Layout) เป็น CSS layout mode สำหรับจัดเรียง item ใน container แนวหนึ่ง (1D) ทำให้ responsive และจัดการพื้นที่ได้ยืดหยุ่น ไม่ต้องใช้ float/positioning ซับซ้อน

หลักการพื้นฐาน

  • Flex Container - element ที่มี display: flex หรือ inline-flex
  • Flex Items - ลูกโดยตรงของ flex container
  • แกนหลัก (Main axis) และแกนรอง (Cross axis) เปลี่ยนตาม flex-direction

Container Properties

Propertyค่าคำอธิบาย
displayflex / inline-flexเปิดใช้ flexbox
flex-directionrow / column / row-reverse / column-reverseทิศทางหลัก
flex-wrapnowrap / wrap / wrap-reverseขึ้นบรรทัดใหม่ได้ไหม
justify-contentflex-start / center / flex-end / space-between / space-around / space-evenlyจัดบน main axis
align-itemsstretch / center / flex-start / flex-end / baselineจัดบน cross axis
align-contentเหมือน justify-content แต่สำหรับหลายบรรทัดจัดกลุ่มบรรทัด
gap10px / 1remช่องว่างระหว่าง items

Item Properties

Propertyคำอธิบาย
flex-growขยายตัวเท่าไหร่ (default 0)
flex-shrinkหดตัวเท่าไหร่ (default 1)
flex-basisขนาดเริ่มต้นก่อนกระจายพื้นที่
flexshorthand: flex: 1 1 auto (grow shrink basis)
align-selfoverride align-items ต่อ item
orderลำดับการแสดง (default 0)

ตัวอย่าง Layout แบบคลาสสิก (Holy Grail)

<!DOCTYPE html>
<html>
<head>
  <style>
    .flex-container {
      display: flex;
      flex-flow: row wrap;
      min-height: 100vh;
    }
    header, footer { flex: 1 100%; background: #fafafa; padding: 1rem; }
    nav { flex: 1 200px; background: #eee; padding: 1rem; }
    main { flex: 5 0px; padding: 1rem; }
    @media (max-width: 768px) {
      nav { order: 1; flex: 1 100%; }
      main { order: 2; flex: 5 0px; }
      footer { order: 3; }
    }
  </style>
</head>
<body>
  <div class="flex-container">
    <header><h1>Site Title</h1></header>
    <nav>Navigation</nav>
    <main><h2>Main Content</h2><p>Content...</p></main>
    <footer>Footer</footer>
  </div>
</body>
</html>

Browser Support

รองรับทุก browser รุ่นใหม่ (Chrome 29+, Firefox 28+, Safari 9+, Edge 12+) ไม่ต้อง prefix แล้ว