เลย์เอาต์แบบไมโคร

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

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

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

GRid

กริด CSS ไม่ได้มีไว้สำหรับเลย์เอาต์ระดับหน้าเว็บเท่านั้น แต่ยังเหมาะกับคอมโพเนนต์ที่อยู่ในเลย์เอาต์เหล่านั้นด้วย

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

h1 {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  gap: 1em;
}
h1::before,
h1::after {
  content: "";
  border-top: 0.1em double black;
  align-self: center;
}
เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ใน Firefox แสดงการวางซ้อนตารางกริด เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ใน Chrome แสดงการวางซ้อนตารางกริด เบราว์เซอร์บนเดสก์ท็อป เช่น Firefox และ Chrome มีเครื่องมือสำหรับนักพัฒนาเว็บที่แสดงเส้นกริดและพื้นที่ที่ซ้อนทับบนการออกแบบได้

ดูวิธีตรวจสอบเลย์เอาต์กริดในเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome

Flexbox

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

ในตัวอย่างนี้ รูปภาพใช้พื้นที่ 1 ใน 4 ของพื้นที่ที่ใช้ได้ และข้อความใช้พื้นที่ 3 ใน 4 ที่เหลือ แต่รูปภาพจะมีขนาดไม่เกิน 200 พิกเซล

.media {
  display: flex;
  align-items: center;
  gap: 1em;
}
.media-illustration {
  flex: 1;
  max-inline-size: 200px;
}
.media-content {
  flex: 3;
}
เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ใน Firefox แสดงภาพซ้อนทับ Flexbox เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ใน Chrome แสดงภาพซ้อนทับ Flexbox
เครื่องมือสำหรับนักพัฒนาเว็บใน Firefox และ Chrome ช่วยให้คุณเห็นภาพรูปร่าง ของคอมโพเนนต์ Flexbox ได้

ดูวิธีตรวจสอบเลย์เอาต์ Flexbox ในเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome

การค้นหาคอนเทนเนอร์

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

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

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

หากต้องการรายงานขนาดของคอนเทนเนอร์ ให้ใช้ การค้นหาคอนเทนเนอร์

เริ่มต้นด้วยการกำหนดว่าองค์ประกอบใดทำหน้าที่เป็นคอนเทนเนอร์

main,
aside {
  container-type: inline-size;
}

ซึ่งหมายความว่าคุณต้องการค้นหามิติข้อมูลแบบอินไลน์ สำหรับเอกสารภาษาอังกฤษ นั่นคือแกนแนวนอน คุณจะเปลี่ยนรูปแบบตามความกว้างของคอนเทนเนอร์

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

.media-illustration {
  max-width: 200px;
  margin: auto;
}

@container (min-width: 25em) {
  .media {
    display: flex;
    align-items: center;
    gap: 1em;
  }

  .media-illustration {
    flex: 1;
  }

  .media-content {
    flex: 3;
  }
}

หากออบเจ็กต์สื่ออยู่ในคอนเทนเนอร์ที่มีความกว้างน้อยกว่า 25em ระบบจะไม่ใช้รูปแบบ Flexbox รูปภาพและข้อความจะปรากฏเรียงกันในแนวตั้ง

แต่หากองค์ประกอบที่บรรจุมีความกว้างมากกว่า 25em รูปภาพและข้อความจะปรากฏเคียงข้างกัน

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

คอนเทนเนอร์ 2 ขนาด

รวมการค้นหา

คุณสามารถใช้คิวรี่สื่อสำหรับเลย์เอาต์หน้าเว็บ และใช้การค้นหาคอนเทนเนอร์สำหรับคอมโพเนนต์ภายในหน้าเว็บ

ในที่นี้ โครงสร้างโดยรวมของหน้าเว็บมีองค์ประกอบ main และองค์ประกอบ aside โดยมีออบเจ็กต์สื่ออยู่ภายในทั้ง 2 องค์ประกอบ

<body>
  <main>
     <div class="media">…</div>
     <div class="media">…</div>
  </main>
  <aside>
     <div class="media">…</div>
  </aside>
</body>

คิวรี่สื่อจะใช้เลย์เอาต์กริดกับองค์ประกอบ main และ aside เมื่อวิวพอร์ตมีความกว้างมากกว่า 45em

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

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

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

การค้นหาคอนเทนเนอร์เป็นเครื่องมือสำคัญสำหรับเลย์เอาต์ขนาดเล็ก คอมโพเนนต์ของคุณสามารถเป็นแบบสแตนด์อโลนได้โดยไม่ขึ้นอยู่กับวิวพอร์ตของเบราว์เซอร์

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

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

กริดและ Flexbox มีประโยชน์สำหรับเลย์เอาต์ขนาดเล็กใช่ไหม

จริง
🎉 ถูกต้อง
เท็จ
ผิด กริดและ Flexbox มีประโยชน์มาก แม้แต่กับเลย์เอาต์ที่ "เล็กที่สุด"

ก่อนหน้านี้ คุณได้เรียนรู้เกี่ยวกับเลย์เอาต์มาโครระดับหน้าเว็บ ตอนนี้คุณทราบข้อมูลเกี่ยวกับเลย์เอาต์ไมโครระดับคอมโพเนนต์แล้ว

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