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

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

ไวร์เฟรมของเลย์เอาต์ 2 คอลัมน์ อยู่ข้างเลย์เอาต์เดียวกันกับคอลัมน์เดียวสำหรับมุมมองที่แคบ

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

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

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

GRid

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

@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 มากกว่า แต่ละคอลัมน์มีกฎแยกต่างหากเพื่ออธิบายพื้นที่ที่ควรใช้ ในตัวอย่างตารางกริด ข้อมูลเดียวกันนี้ได้รับการบรรจุไว้ในกฎเดียวสําหรับองค์ประกอบที่บรรจุ

คุณต้องการการค้นหาสื่อไหม

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

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

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

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

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

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

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

ตรวจสอบความเข้าใจ

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

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

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

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

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

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