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

คุณสมบัติ flex-wrap ใน CSS Flexbox


flex-wrap คืออะไร?

คุณสมบัติ flex-wrap ควบคุมว่า flex items จะ ขึ้นบรรทัดใหม่ (wrap) หรืออยู่บรรทัดเดียว (nowrap) เมื่อพื้นที่ไม่พอ

ค่าที่ใช้ได้

ค่า คำอธิบาย
nowrap (default) items อยู่บรรทัดเดียว อาจล้นออกนอกคอนเทนเนอร์
wrap items ขึ้นบรรทัดใหม่เมื่อไม่พอ (ซ้าย→ขวา, บน→ล่าง)
wrap-reverse items ขึ้นบรรทัดใหม่ แต่เรียงกลับ (ล่าง→บน)

ตัวอย่าง: flex-wrap: wrap

<!DOCTYPE html>
<html>
<head>
  <style>
    .mycontainer {
      display: flex;
      background-color: #fff3e0;
      flex-wrap: wrap;              /* ให้ items ขึ้นบรรทัดใหม่ */
      padding: 10px;
      gap: 10px;                    /* ระยะห่างระหว่าง items */
    }
    .mycontainer > div {
      background-color: white;
      border: 2px solid #ff9800;
      text-align: center;
      line-height: 50px;
      font-size: 20px;
      width: 120px;
      border-radius: 4px;
      box-shadow: 0 2px 4px rgba(0,0,0,0.1);
    }
  </style>
</head>
</head>
<body>
  <h1>ตัวอย่าง flex-wrap: wrap</h1>
  <p>ลองปรับขนาดหน้าต่างเบราวเซอร์เพื่อดู items ขึ้นบรรทัดใหม่</p>
  <div class="mycontainer">
    <div>Q1</div>
    <div>Q2</div>
    <div>Q3</div>
    <div>Q4</div>
    <div>Q5</div>
    <div>Q6</div>
    <div>Q7</div>
    <div>Q8</div>
    <div>Q9</div>
  </div>
</body>
</html>

ตัวอย่าง: flex-wrap: nowrap (ค่าเริ่มต้น)

.nowrap-container {
  display: flex;
  flex-wrap: nowrap;   /* items จะบีบตัวเล็กลงมา หรือล้นออกนอก */
  overflow-x: auto;    /* เพิ่ม scroll bar ถ้าล้น */
}

ตัวอย่าง: flex-wrap: wrap-reverse

.wrap-reverse-container {
  display: flex;
  flex-wrap: wrap-reverse;  /* บรรทัดใหม่จะอยู่ "ด้านบน" บรรทัดเก่า */
  height: 300px;            /* ต้องมีความสูงจำกัด */
}

ความสัมพันธ์กับ flex-direction

flex-direction wrap ทำงานอย่างไร
row (default) items ไปขวา → ขึ้นบรรทัดใหม่ด้านล่าง
row-reverse items ไปซ้าย → ขึ้นบรรทัดใหม่ด้านล่าง
column items ไปล่าง → ขึ้นคอลัมน์ใหม่ด้านขวา
column-reverse items ไปบน → ขึ้นคอลัมน์ใหม่ด้านขวา

Shorthand: flex-flow

/* รวม flex-direction + flex-wrap ในบรรทัดเดียว */
flex-flow: row wrap;
flex-flow: column wrap-reverse;

คำแนะนำ

  • ใช้ flex-wrap: wrap สำหรับ Responsive Design ส่วนใหญ่
  • ร่วมกับ gap เพื่อระยะห่างที่สม่ำเสมอ
  • ใช้ min-width บน items เพื่อควบคุมจุดที่จะ wrap