เลย์เอาต์มาโคร

เลย์เอาต์มาโครอธิบายถึงการจัดระเบียบอินเทอร์เฟซขนาดใหญ่ระดับหน้าเว็บ

ภาพโครงร่างของเลย์เอาต์ 2 คอลัมน์ข้างเลย์เอาต์เดียวกันที่เป็น 1 คอลัมน์สำหรับมุมมองแคบ

ก่อนใช้เลย์เอาต์ใดๆ คุณควรตรวจสอบว่าโฟลว์ของเนื้อหาสมเหตุสมผล การจัดลำดับเริ่มต้นแบบคอลัมน์เดียวนี้คือสิ่งที่หน้าจอขนาดเล็กจะได้รับ

<body>
  <header>…</header>
  <main>
    <article>…</article>
    <aside>…</aside>
  </main>
  <footer>…</footer>
</body>

เมื่อจัดเรียงคอมโพเนนต์ระดับหน้าเว็บแต่ละรายการ คุณกำลังออกแบบเลย์เอาต์มาโคร ซึ่งเป็นมุมมองระดับสูงของหน้าเว็บ คุณสามารถใช้คิวรี่สื่อเพื่อระบุกฎใน CSS ที่อธิบายวิธีปรับมุมมองนี้ให้เข้ากับขนาดหน้าจอต่างๆ

Grid

CSS Grid เป็นเครื่องมือที่ยอดเยี่ยมสำหรับการใช้เลย์เอาต์กับหน้าเว็บ ในตัวอย่างก่อนหน้า สมมติว่าคุณต้องการเลย์เอาต์ 2 คอลัมน์เมื่อมีความกว้างหน้าจอเพียงพอ หากต้องการใช้เลย์เอาต์ 2 คอลัมน์นี้เมื่อเบราว์เซอร์กว้างพอ ให้ใช้คิวรี่สื่อเพื่อกำหนดสไตล์ Grid เหนือเบรกพอยต์ที่ระบุ

@media (min-width: 45em) {
  main {
    display: grid;
    grid-template-columns: 2fr 1fr;
  }
}

Flexbox

สำหรับเลย์เอาต์ที่เฉพาะเจาะจงนี้ คุณยังใช้ Flexbox ได้ด้วย สไตล์จะมีลักษณะดังนี้

@media (min-width: 45em) {
  main {
    display: flex;
    flex-direction: row;
  }

  main article {
    flex: 2;
  }

  main aside {
    flex: 1;
  }
}

อย่างไรก็ตาม เวอร์ชัน Flexbox ต้องใช้ CSS มากกว่า แต่ละคอลัมน์มีกฎแยกต่างหากเพื่ออธิบายว่าควรใช้พื้นที่เท่าใด ในตัวอย่าง Grid ข้อมูลเดียวกันนั้นจะรวมอยู่ในกฎเดียวสำหรับองค์ประกอบที่บรรจุ

คุณต้องใช้คิวรี่สื่อไหม

คุณอาจไม่จำเป็นต้องใช้คิวรี่สื่อเสมอไป คิวรี่สื่อทำงานได้ดีเมื่อคุณใช้การเปลี่ยนแปลงกับองค์ประกอบ 2-3 รายการ แต่หากต้องอัปเดตเลย์เอาต์บ่อยๆ คิวรี่สื่ออาจจัดการได้ยากเนื่องจากมีเบรกพอยต์จำนวนมาก

สมมติว่าคุณมีหน้าเว็บที่เต็มไปด้วยคอมโพเนนต์การ์ด การ์ดจะมีความกว้างไม่เกิน 15em และคุณต้องการใส่การ์ดหลายๆ ใบในบรรทัดเดียวให้ได้มากที่สุด คุณสามารถเขียนคิวรี่สื่อที่มีเบรกพอยต์ เช่น 30em, 45em และ 60em แต่การดำเนินการดังกล่าวค่อนข้างน่าเบื่อและดูแลรักษาได้ยาก

แต่คุณสามารถใช้กฎเพื่อให้การ์ดใช้พื้นที่ที่เหมาะสมโดยอัตโนมัติ

.cards {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(15em, 1fr));
  grid-gap: 1em;
}

คุณสามารถสร้างเลย์เอาต์ที่คล้ายกันด้วย Flexbox ในกรณีนี้ หากมีจำนวนการ์ดไม่เพียงพอที่จะเติมแถวสุดท้าย การ์ดที่เหลือจะยืดออกเพื่อเติมพื้นที่ว่างแทนที่จะจัดเรียงเป็นคอลัมน์ หากต้องการจัดเรียงแถวและคอลัมน์ ให้ใช้ Grid

.cards {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  gap: 1em;
}
.cards .card {
  flex-basis: 15em;
  flex-grow: 1;
}

การใช้กฎที่ชาญฉลาดบางอย่างใน Flexbox หรือ Grid จะช่วยให้คุณออกแบบเลย์เอาต์มาโครแบบไดนามิกได้โดยใช้ CSS น้อยที่สุดและไม่ต้องใช้คิวรี่สื่อ ซึ่งจะช่วยลดภาระงานของคุณ เนื่องจากคุณจะให้เบราว์เซอร์ทำการคำนวณแทน หากต้องการดูตัวอย่างเลย์เอาต์ CSS ที่ทันสมัยซึ่งมีความยืดหยุ่นโดยไม่จำเป็นต้องใช้คิวรี่สื่อ โปรดดู 1linelayouts.com

ทดสอบความเข้าใจ

ทดสอบความรู้เกี่ยวกับเลย์เอาต์มาโคร

ประโยคใดอธิบายเลย์เอาต์มาโครได้ดีที่สุด

เลย์เอาต์ที่มีเลย์เอาต์อื่นๆ
ลองอีกครั้งนะ เลย์เอาต์ส่วนใหญ่มีเลย์เอาต์อื่นๆ
เมื่อการออกแบบใช้ Flexbox หรือ Grid
ลองอีกครั้งนะ ทั้ง Flexbox และ Grid ไม่มีสิ่งใดที่เฉพาะเจาะจงสำหรับเลย์เอาต์มาโคร
เลย์เอาต์ระดับต่ำซึ่งครอบคลุมพื้นที่หน้าจอเล็กน้อย
ลองอีกครั้งนะ
เลย์เอาต์ระดับสูงซึ่งครอบคลุมพื้นที่หน้าจอจำนวนมาก
🎉 เลย์เอาต์มาโครเป็นเลย์เอาต์พื้นฐานสำหรับหน้าเว็บ ซึ่งครอบคลุมพื้นที่ภาพจำนวนมาก และมักจะปรับด้วยคิวรี่สื่อขนาดหน้าเว็บ

เลย์เอาต์มาโครใช้คิวรี่สื่อเพื่อปรับให้เข้ากับขนาดหน้าจอต่างๆ เสมอไปไหม

จริง
ลองอีกครั้งนะ เลย์เอาต์มาโครไม่ได้กำหนดโดยการใช้คิวรี่สื่อ
เท็จ
🎉 เลย์เอาต์มาโครอาจปรับให้เข้ากับเนื้อหา เติมพื้นที่ว่าง และอื่นๆ ได้โดยไม่ต้องใช้คิวรี่สื่อ

เมื่อได้ไอเดียเกี่ยวกับเลย์เอาต์มาโครระดับหน้าเว็บแล้ว ให้หันมาสนใจคอมโพเนนต์ภายในหน้าเว็บ ซึ่งเป็นขอบเขตของ เลย์เอาต์ไมโคร