ข้ามไปยังเนื้อหา

CSS Layout — Flexbox & Grid

ทุกการตัดสินใจในงานออกแบบล้วนวนกลับมาที่คำถามเดียว: องค์ประกอบนี้ควรอยู่ที่ไหน? Layout คือคำตอบ เป็นระบบล่องหนที่ยึดอินเทอร์เฟซทั้งหมดของคุณไว้ด้วยกัน เหมือนกับระบบ grid ใน Figma ที่ทำให้ทุกหน้าจอดูสอดคล้องกัน

ข่าวดีสำหรับนักออกแบบ: CSS layout ไม่ใช่เรื่องยาก เพราะแมปเกือบแบบหนึ่งต่อหนึ่งกับเครื่องมือที่คุณใช้ใน Figma ทุกวัน

CSSFigma เทียบเท่าเหมาะสำหรับ
FlexboxAuto Layoutจัดเรียงไอเทมในแถวหรือคอลัมน์เดียว
CSS GridLayout Gridสร้าง layout สองมิติ (แถวและคอลัมน์พร้อมกัน)

คิดว่า Flexbox คือเครื่องมือที่ใช้เมื่อต้องการจัดไอเทมในแนวเส้น เช่น navigation bar แถวของการ์ด หรือปุ่มที่อยู่ตรงกลาง ส่วน CSS Grid ใช้สำหรับโครงสร้างหน้าโดยรวม เช่น headers, sidebars, เนื้อหาหลัก, footer

คุณจะใช้ทั้งสองอย่างตลอดเวลา UI จริงส่วนใหญ่ใช้ Grid สำหรับโครงสร้างภาพรวม และ Flexbox สำหรับ layout ของคอมโพเนนต์ย่อยในแต่ละส่วน

ด้านล่างมีกล่องสามอัน ตอนนี้กล่องทั้งสามเรียงซ้อนกันในแนวตั้งเพราะนั่นคือวิธีที่ browser จัดวาง block elements โดยค่าเริ่มต้น ลองเปลี่ยน display: block เป็น display: flex ในแผง CSS แล้วดูว่าเกิดอะไรขึ้น

ลอง display: flex — กล่องจะเรียงในแถว ลอง display: grid กับ grid-template-columns: repeat(3, 1fr) — กล่องจะอยู่ในกริดสามคอลัมน์ คุณเพิ่งใช้เครื่องมือ layout ที่สำคัญที่สุดสองอย่างใน CSS แล้ว

บทเรียนสิ่งที่คุณจะทำได้
Display & Flowเข้าใจว่า browser เรียง elements ตามค่าเริ่มต้นอย่างไร
Flexboxจัดแถวและคอลัมน์ของคอมโพเนนต์ได้อย่างแม่นยำ
Gridสร้าง layout สองมิติสำหรับทั้งหน้า
Positioningควบคุม elements ที่ออกนอก flow ปกติ
Spacing Systemsใช้ spacing ที่สอดคล้องกันด้วยสเกลการออกแบบ

เมื่อจบแล้ว ทุก Figma auto-layout frame และ layout grid ที่คุณเคยสร้างจะมีการแปล CSS ตรงๆ ที่คุณสามารถเขียนจากความจำได้

เครื่องมือ CSS layout ใดที่ใกล้เคียงกับ Figma Auto Layout มากที่สุด?
CSS Grid เหมาะสำหรับอะไรเมื่อเทียบกับ Flexbox?
คุณต้องตั้งค่า property ใดบน element พ่อแม่เพื่อเปิดใช้งาน Flexbox?