คอร์ส IT พื้นฐาน CSS 032_เลย์เอาต์ยืดหยุ่น Flex
เลย์เอาต์ยืดหยุ่น Flex
มาเป็นเวลานานแล้วที่เครื่องมือสร้างเพียงอย่างเดียวที่เชื่อถือได้และเข้ากันได้กับเบราว์เซอร์ต่างๆ ในเลย์เอาต์ CSS คือ float และ position เครื่องมือทั้งสองนี้ใช้งานได้ดีในกรณีส่วนใหญ่ แต่ในบางด้านมีข้อจำกัดที่ทำให้ยากต่อการทำงานให้สำเร็จ
ความต้องการเลย์เอาต์ง่ายๆ ต่อไปนี้เป็นเรื่องยากหรือเป็นไปไม่ได้ที่จะใช้เครื่องมือเหล่านี้ (float และ position) อย่างสะดวกและยืดหยุ่น:
- จัดกึ่งกลางเนื้อหาบลอกในแนวตั้งภายในเนื้อหาหลัก
- ทำให้รายการย่อยทั้งหมดของคอนเทนเนอร์ครอบครองความกว้าง/ความสูงที่พร้อมใช้งานเท่ากัน ไม่ว่าจะมีความกว้าง/ความสูงที่พร้อมใช้งานเท่าใด
- ทำให้คอลัมน์ทั้งหมดในเลย์เอาต์หลายคอลัมน์มีความสูงเท่ากัน แม้ว่าจะมีปริมาณเนื้อหาที่แตกต่างกัน

เลย์เอาต์ Flex ของ CSS เป็นเครื่องมือเลย์เอาต์ที่ทรงพลังใน CSS ที่สามารถใช้สร้างเลย์เอาต์ที่ยืดหยุ่นได้หลากหลาย เพื่อเชี่ยวชาญเลย์เอาต์ Flex ของ CSS คุณจำเป็นต้องเชี่ยวชาญจุดความรู้ต่อไปนี้:
- Flex container (คอนเทนเนอร์ flex): เลย์เอาต์ Flex ประกอบด้วยคอนเทนเนอร์ Flex และรายการ Flex คอนเทนเนอร์ Flex คือคอนเทนเนอร์ที่วางรายการ Flex ลงในเลย์เอาต์ Flex คอนเทนเนอร์ Flex สามารถเป็นองค์ประกอบใดก็ได้ แต่โดยปกติจะใช้องค์ประกอบ
div - Flex item (รายการ flex): รายการ Flex คือองค์ประกอบที่วางไว้ในคอนเทนเนอร์ Flex รายการ Flex สามารถเป็นองค์ประกอบใดก็ได้ แต่โดยปกติจะใช้องค์ประกอบ
div - Main axis (แกนหลัก): แกนหลักคือทิศทางแนวนอนหรือแนวตั้งขององค์ประกอบในเลย์เอาต์ Flex
- Cross axis (แกนตัดขวาง): แกนตัดขวางคือทิศทางแนวตั้งหรือแนวนอนขององค์ประกอบในเลย์เอาต์ Flex
คุณสมบัติของคอนเทนเนอร์ Flex
คอนเทนเนอร์ Flex มีคุณสมบัติต่อไปนี้เพื่อควบคุมเลย์เอาต์ Flex:
display: ตั้งค่าโหมดการแสดงผลของคอนเทนเนอร์ Flex คอนเทนเนอร์ Flex ต้องตั้งเป็นdisplay: flexหรือdisplay: inline-flexเพื่อใช้เลย์เอาต์ Flexflex-direction: ตั้งค่าทิศทางของแกนหลักของเลย์เอาต์ Flex ค่าสามารถเป็นflex-startจัดแนวเริ่มต้นแกนหลัก,flex-endจัดแนวสิ้นสุดแกนหลัก,rowจัดเรียงแนวนอนแกนหลัก,row-reverseจัดเรียงแนวนอนกลับแกนหลัก,columnจัดเรียงแนวตั้งแกนหลัก,column-reverseจัดเรียงแนวตั้งกลับแกนหลักflex-wrap: ควบคุมว่ารายการภายในคอนเทนเนอร์ Flex จะขึ้นบรรทัดใหม่หรือไม่nowrapค่าเริ่มต้น ไม่ขึ้นบรรทัดใหม่,wrapขึ้นบรรทัดใหม่,wrap-reverseขึ้นบรรทัดใหม่แบบกลับด้านflex-flow: ตัวย่อของflex-directionและflex-wrapสองค่าที่สอดคล้องกับflex-directionและflex-wrapตามลำดับjustify-content: ตั้งค่าวิธีการจัดแนวของรายการ Flex ในคอนเทนเนอร์ Flex บนแกนหลัก ค่าสามารถเป็นflex-startจัดแนวเริ่มต้นแกนหลัก,flex-endจัดแนวสิ้นสุดแกนหลัก,centerจัดแนวกลางแกนหลัก,space-betweenจัดแนวเฉลี่ยแกนหลัก (จัดแนวปลายคอนเทนเนอร์),space-aroundจัดแนวเฉลี่ยแกนหลัก (ช่องว่างระหว่างรายการเท่ากัน) หรือspace-evenlyจัดแนวเฉลี่ยแกนหลัก (รวมช่องว่างทั้งสองด้านเท่ากัน)align-items: ตั้งค่าวิธีการจัดแนวของรายการ Flex ในคอนเทนเนอร์ Flex บนแกนตัดขวาง ค่าสามารถเป็นflex-startจัดแนวเริ่มต้นแกนตัดขวาง,flex-endจัดแนวสิ้นสุดแกนตัดขวาง,centerจัดแนวกลางแกนตัดขวาง,stretchค่าเริ่มต้น หรือbaselineจัดแนวเส้นฐานข้อความบรรทัดแรกแกนตัดขวาง ทำงานเฉพาะกับรายการย่อยของคอนเทนเนอร์ Flexalign-content: เช่นเดียวกับalign-itemsเป็นคุณสมบัติที่ควบคุมวิธีการจัดแนวของรายการย่อยบนแกนตัดขวาง มีผลเฉพาะเมื่อคอนเทนเนอร์ Flex มีหลายเส้นแกน (สถานการณ์หลายแถวหรือหลายคอลัมน์)
คุณสมบัติของรายการ Flex
รายการ Flex มีคุณสมบัติต่อไปนี้เพื่อควบคุมเลย์เอาต์ของรายการ Flex ในเลย์เอาต์ Flex:
flex-grow: ตั้งค่าอัตราส่วนการขยายของรายการ Flex บนแกนหลัก ค่าสามารถเป็นจำนวนทศนิยมระหว่าง 0 ถึง 1flex-shrink: ตั้งค่าอัตราส่วนการหดตัวของรายการ Flex บนแกนหลัก ค่าสามารถเป็นจำนวนทศนิยมระหว่าง 0 ถึง 1flex-basis: ตั้งค่าความกว้างหรือความสูงเริ่มต้นของรายการ Flex บนแกนหลัก ค่าสามารถเป็นค่าความยาว ค่าเปอร์เซ็นต์ หรือautoorder: ตั้งค่าลำดับของรายการ Flex บนแกนหลัก ค่าสามารถเป็นจำนวนเต็มระหว่าง 1 ถึง 65535
ตัวอย่าง:
/* สไตล์คอนเทนเนอร์ Flex */.flex-container { display: flex; flex-direction: row; /* ทิศทางแกนหลักเป็นแนวนอน */ justify-content: space-around; /* วิธีการจัดแนวบนแกนหลัก */ align-items: center; /* วิธีการจัดแนวบนแกนตัดขวาง */ height: 200px; /* ตั้งค่าความสูงคอนเทนเนอร์ */ border: 2px solid #333; /* เพิ่มกรอบเพื่อผลการมองเห็นที่ดีขึ้น */}/* สไตล์รายการ Flex */.flex-item { flex: 1; /* แบ่งพื้นที่แกนหลักเท่าๆ กัน */ text-align: center; padding: 20px; background-color: #f2f2f2;}<!-- คอนเทนเนอร์ Flex --><div class="flex-container"> <!-- รายการ Flex 1 --> <div class="flex-item">Item 1</div> <!-- รายการ Flex 2 --> <div class="flex-item">Item 2</div> <!-- รายการ Flex 3 --> <div class="flex-item">Item 3</div></div>ผลลัพธ์:
