CSS : Flex Box basic

Flex box คือ

ความสามารถในการแสดงผลแบบ layout โดยมีการเน้นให้เนื้อหาไหลไปในทิศทาง row(แนวนอน) หรือ column(แนวตั้ง) โดย flex boxจะประกอบไปด้วย สองส่วน คือ flex-container และ flex-item

Image for post

ภาพปลากรอบ

Image for post

หลักการของมันคือจะมี flex-container ไว้ครอบคลุม flex-item ดังนั้น element ใดๆก็ตามที่อยู่ภายใต้ flex-container จะถูกจัดเรียงเนื้อหาไปในทิศทางใด ก็ขึ้นอยู่กับการกำหนดทิศทางของ flex-container

การใช้งาน

ง่ายมากๆเพียงใส่display:flex ให้กับ flex-container เพื่อบอกว่า ตอนนี้เจ้า flex-container จะมีการแสดงผลแบบ flex แล้วนะ แต่ผมขอเสริม style ให้กับ flex-container และ flex-item โดยจะมีการเพิ่ม สีขนาดและขอบเพื่อการมองเห็นความแตกต่างที่ชัดเจน

Image for post

และนี่คือผลลัพธ์ที่ได้

Image for post

จะเห็นได้ว่า flex-item ทั้งสามนั้นเรียงไปตามแนวนอน นั้นก็เป็นเพราะว่าเมื่อใดก็ตามที่เรากำหนด display:flex ให้กับ flex-container ค่า Default ของมันจะกำหนดให้ flex-item ไหลไปตามซ้ายไปขวา

อะอ้าวแล้วถ้าผมอยากให้มันเรียงแบบอื่นหละ ไม่ยากเลยครับมาลองดู

property ต่างๆสำหรับเจ้า flex-container แบบคร่าวๆ

ย้ำว่าแบบคร่าวๆเพราะผมจะยกตัวอย่างมาไม่ทั้งหมด อาจยกมานิดหน่อยให้พอเห็นภาพ

flex-direction ทิศทาง

flex-direction : row || row-reverse || column || column-reverse

Image for post
flex-direction : row-reverse เรียงจากขวาไปซ้าย
Image for post
flex-direction : row เรียงจากซ้ายไปขวา
Image for post
flex-direction : column เรียกจากบนลงล่าง
Image for post
flex-direction : column-reverse เรียงจากล่างขึ้นบน

justify-content การจัดเรียงแนวนอน

*justify-content จะกลายเป็นการจัดเรียงแนวตั้งหาก flex-direction: เป็น column

justify-content: flex-start || flex-end || center || space-between ||
space-evenly

Image for post
justify-content: flex-start เรียงจากมุมซ้ายสุด
Image for post
justify-content: flex-end เรียงจากมุมขวาสุด
Image for post
justify-content: center เรียงตรงกลาง
Image for post
justify-content: space-evenly เรียงตรงกลางแต่ห่างกันเล็กน้อย
Image for post
justify-content: space-between เรียงตรงกลางแต่เฉลี่ยให้ ไอเทมแรกและไอเทมสุดท้ายชิดขอบ

align-items การจัดเรียงแนวตั้ง

*align-items จะกลายเป็นการจัดเรียงแนวนอนหาก flex-direction: เป็น column

align-items: flex-start || flex-end || center

Image for post
align-items: flex-start ไอเทมทั้งหมดจะชิดขอบบน
Image for post
align-items: flex-end ไอเทมทั้งหมดจะชิดขอบล่าง
Image for post
align-items: center ไอเทมจะลอยอยู่ตรงกลาง

flex-wrap การจัดการเมื่อพื้นที่ถูกบีบอัด

เมื่อไรก็ตามที่ flex-container มีขนาดเล็กจน flex-item อาจเกิดการบีบอัด เราจึงต้องมากำหนดว่าจะจัดการเรียบเรียงยังไง อย่างตัวอย่างภาพข้างล่างจะต่างจากตัวอย่างแรกๆเพราะในส่วน flex-container (พื้นที่สีเหลือง) มีขนาดเล็กลง ทำให้อาจเกิดการบีบอัดของพื้นที่อันไม่น่าสวยงามยิ่งนัก เราจึงต้องปัดมันลงมาบรรทัดใหม่

flex-wrap: nowrap || wrap || wrap-reverse

Image for post
flex-wrap: nowrap อันนี้เป็นบอกว่าไม่มีการจัดการใดๆสังเกตดีๆ ไอเทมจะล้นออกมาด้านข้าง
Image for post
flex-wrap: wrap ล้นลงมาแบบเรียงลับดำปกติบนลงล่าง
Image for post
flex-wrap: wrap-reverse ล้นลงมาแบบเรียงจากล่างขึ้นบน

ลองหัดเขียนดูบ้าง แล้วฝึกทำความเข้าใจ

Image for post
Image for post

อธิบายนิดหน่อย

display : flex ; แสดงผลแบบ flex

flex-direction : row ; ให้ไอเทมทั้งหมดไหลไปในทิศทาง ซ้ายไปขวา

justify-content : space-evenly ;เรียงไอเทมแนวนอนให้อยู่ตรงกลางห่างกันเล็กน้อย

align-items: center ; เรียงไอเทมตามแนวตั้งให้อยู่ตรงกลางนะ

flex-wrap : wrap ; เมื่อ ไอเทมอัดกัน flex-container ให้ปัด ไอเทม ลงมาตามภาพถ้าไม่ใช้คำสั่งนี้ ItemOne — ItemSix จะอยู่บรรทัดเดียวกัน

สรุป

flex ถูกออกแบบมาให้ช่วยในด้านการแสดงผลของ User Interface โดยมีหลักการ กำหนดทิศทางการไหลของ ไอเทมไปใน ทิศทาง Row หรือ Column หากอ่านมาแล้วอาจจะยังไม่เข้าใจให้ลองไปฝึกเขียนเองดูบ้างเพื่อเสริมความเข้าใจ บทความนี้เป็นเพียงการแนะนำการใช้ flex แบบพื้นๆ ไม่ได้เอาเนื้อหาจริงๆมาทั้งหมดบอกไปแล้วนะว่าเอาเนื้อหามาแค่คร่าวๆ หากสงสัยหรืออยากได้ความรู้เรื่อง flex เพิ่มเติม แนะนำ ให้ไปอ่านตาม ลิงค์นี้ครับ
https://css-tricks.com/snippets/css/a-guide-to-flexbox/
https://www.w3schools.com/css/css3_flexbox.asp

ย้ำนะครับนอกจากการอ่านคือการฝึกเขียนเขียนและทำความเข้าใจนะครับ ทำควบคู่กันไป

ขอขอบคุณข้อมูลจาก:
https://medium.com/@danusoncheounsanguan/flex-box-basic-147fe321c778

Write a comment