บันทึกเทคนิคของ zhaoJian

คอร์ส IT พื้นฐาน CSS 031_เลย์เอาต์กริด Grid

การเรียนรู้ / พื้นฐาน CSS ~10846 คำ · อ่าน 28 นาที - ครั้งที่อ่าน

เลย์เอาต์กริด Grid

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

กริดโดยทั่วไปจะมีคอลัมน์ (column) และ แถว (row) จำนวนมาก รวมถึงช่องว่างระหว่างแถวกับแถว คอลัมน์กับคอลัมน์ ช่องว่างนี้โดยทั่วไปเรียกว่า รางน้ำ (gutter)

ผลลัพธ์ตัวอย่าง

แนวคิดพื้นฐาน

เลย์เอาต์ Grid ประกอบด้วยแนวคิดพื้นฐานต่อไปนี้:

  • คอนเทนเนอร์กริด (grid container): เลย์เอาต์กริดประกอบด้วยคอนเทนเนอร์กริดและรายการกริด คอนเทนเนอร์กริดคือคอนเทนเนอร์ที่วางรายการกริดลงในกริด คอนเทนเนอร์กริดสามารถเป็นองค์ประกอบใดก็ได้ แต่โดยทั่วไปจะใช้องค์ประกอบ div
  • รายการกริด (grid item): รายการกริดคือองค์ประกอบที่วางไว้ในคอนเทนเนอร์กริด รายการกริดสามารถเป็นองค์ประกอบใดก็ได้ แต่โดยทั่วไปจะใช้องค์ประกอบ div
  • เส้นกริด (grid line): เส้นกริดคือเส้นที่แบ่งคอนเทนเนอร์กริดออกเป็นแถวและคอลัมน์ เส้นกริดสามารถเป็นเส้นแนวนอนหรือเส้นแนวตั้ง
  • คอลัมน์กริด (grid column): คอลัมน์กริดคือเส้นในทิศทางแนวตั้งในคอนเทนเนอร์กริด
  • แถวกริด (grid row): แถวกริดคือเส้นในทิศทางแนวนอนในคอนเทนเนอร์กริด
คุณสมบัติที่ใช้บ่อย

คุณสมบัติคอนเทนเนอร์กริด

คอนเทนเนอร์กริดมีคุณสมบัติต่อไปนี้สำหรับควบคุมเลย์เอาต์กริด:

  • display: ตั้งค่าโหมดการแสดงผลของคอนเทนเนอร์กริด คอนเทนเนอร์กริดต้องตั้งค่าเป็น display: grid หรือ display: inline-grid เพื่อใช้เลย์เอาต์กริด
  • grid-template-columns: ตั้งค่าจำนวนคอลัมน์และความกว้างคอลัมน์ของคอนเทนเนอร์กริด (ใช้หน่วย fr, px, em ฯลฯ)
  • grid-template-rows: ตั้งค่าจำนวนแถวและความสูงแถวของคอนเทนเนอร์กริด (ใช้หน่วย fr, px, em ฯลฯ)
  • grid-template: ตั้งค่า grid-template-columns และ grid-template-rows พร้อมกัน
  • grid-auto-columns: ตั้งค่าความกว้างคอลัมน์ของคอนเทนเนอร์กริด
  • grid-auto-rows: ตั้งค่าความสูงแถวของคอนเทนเนอร์กริด

คุณสมบัติรายการกริด

รายการกริดมีคุณสมบัติต่อไปนี้สำหรับควบคุมเลย์เอาต์ของรายการกริดในกริด:

  • grid-column: ตั้งค่าคอลัมน์ที่รายการกริดอยู่
  • grid-row: ตั้งค่าแถวที่รายการกริดอยู่
  • grid-column-start: ตั้งค่าตำแหน่งเริ่มต้นของรายการกริดในคอลัมน์
  • grid-column-end: ตั้งค่าตำแหน่งสิ้นสุดของรายการกริดในคอลัมน์
  • grid-row-start: ตั้งค่าตำแหน่งเริ่มต้นของรายการกริดในแถว
  • grid-row-end: ตั้งค่าตำแหน่งสิ้นสุดของรายการกริดในแถว
  • grid-area: ตั้งค่าพื้นที่ที่รายการกริดอยู่
  • grid-gap: ตั้งค่าระยะห่างระหว่างเส้นกริด
เลย์เอาต์กริด

กำหนดความกว้างคอลัมน์และความสูงแถวแบบคงที่และแบบปรับได้

ตัวอย่าง:

.grid-example{
display: grid;
grid-template-columns: 100px 200px auto;
/* คอลัมน์แรก 100px, คอลัมน์ที่สอง 200px, พื้นที่ที่เหลือจัดสรรให้คอลัมน์แบบปรับได้ */
grid-template-rows: 100px 200px auto;
/* แถวแรก 100px, แถวที่สอง 200px, พื้นที่ที่เหลือจัดสรรให้แถวแบบปรับได้ */
}
.item{
margin: 10px;
background-color: rgb(100, 150, 200);
}
<div class="grid-example">
<div class="item">สาธิต Grid</div>
<div class="item">สาธิต Grid</div>
<div class="item">สาธิต Grid</div>
<div class="item">สาธิต Grid</div>
<div class="item">สาธิต Grid</div>
<div class="item">สาธิต Grid</div>
<div class="item">สาธิต Grid</div>
<div class="item">สาธิต Grid</div>
<div class="item">สาธิต Grid</div>
</div>

ผลลัพธ์:

ผลลัพธ์ตัวอย่าง ใช้เปอร์เซ็นต์กำหนดความกว้างคอลัมน์และความสูงแถว

ตัวอย่าง:

.grid-example{
display: grid;
grid-template-columns: 30% 2fr 1fr;
/* คอลัมน์แรกครอบครอง 30%, คอลัมน์ที่สองครอบครองสองส่วนของพื้นที่ที่เหลือ, คอลัมน์ที่สามครอบครองหนึ่งส่วนของพื้นที่ที่เหลือ */
grid-template-rows: 30% 2fr 1fr;
/* แถวแรกครอบครอง 30%, แถวที่สองครอบครองสองส่วนของพื้นที่ที่เหลือ, แถวที่สามครอบครองหนึ่งส่วนของพื้นที่ที่เหลือ */
}
.item{
margin: 10px;
background-color: rgb(100, 150, 200);
}
<div class="grid-example">
<div class="item">สาธิต Grid</div>
<div class="item">สาธิต Grid</div>
<div class="item">สาธิต Grid</div>
<div class="item">สาธิต Grid</div>
<div class="item">สาธิต Grid</div>
<div class="item">สาธิต Grid</div>
<div class="item">สาธิต Grid</div>
<div class="item">สาธิต Grid</div>
<div class="item">สาธิต Grid</div>
</div>

ผลลัพธ์:

ผลลัพธ์ตัวอย่าง การแบ่งเท่ากัน (การกระจายโดยเฉลี่ย) ความกว้างคอลัมน์และความสูงแถว

ตัวอย่าง:

.grid-example{
display: grid;
grid-template-columns: repeat(3, 1fr);
/* แบ่งคอลัมน์เป็น 3 ส่วนเท่าๆ กัน แต่ละคอลัมน์ครอบครองหนึ่งส่วนของพื้นที่ที่เหลือ */
grid-template-rows: repeat(3, 1fr);
/* แบ่งแถวเป็น 3 ส่วนเท่าๆ กัน แต่ละแถวครอบครองหนึ่งส่วนของพื้นที่ที่เหลือ */
}
.item{
margin: 10px;
background-color: rgb(100, 150, 200);
}
<div class="grid-example">
<div class="item">สาธิต Grid</div>
<div class="item">สาธิต Grid</div>
<div class="item">สาธิต Grid</div>
<div class="item">สาธิต Grid</div>
<div class="item">สาธิต Grid</div>
<div class="item">สาธิต Grid</div>
<div class="item">สาธิต Grid</div>
<div class="item">สาธิต Grid</div>
<div class="item">สาธิต Grid</div>
</div>

ผลลัพธ์:

ผลลัพธ์ตัวอย่าง ใช้ minmax กำหนดความกว้างและความสูงต่ำสุดและสูงสุดของคอลัมน์และแถว

ตัวอย่าง:

.grid-example{
display: grid;
grid-template-columns: minmax(100px, 1fr) minmax(200px, 2fr);
/* คอลัมน์แรกความกว้างต่ำสุด 100px, ครอบครองหนึ่งส่วนของพื้นที่ที่เหลือ; คอลัมน์ที่สองความกว้างต่ำสุด 200px, ครอบครองสองส่วนของพื้นที่ที่เหลือ */
grid-template-rows: minmax(100px, 1fr) minmax(200px, 2fr);
/* แถวแรกความสูงต่ำสุด 100px, ครอบครองหนึ่งส่วนของพื้นที่ที่เหลือ; แถวที่สองความสูงต่ำสุด 200px, ครอบครองสองส่วนของพื้นที่ที่เหลือ */
}
.item{
margin: 10px;
background-color: rgb(100, 150, 200);
}
<div class="grid-example">
<div class="item">สาธิต Grid</div>
<div class="item">สาธิต Grid</div>
<div class="item">สาธิต Grid</div>
<div class="item">สาธิต Grid</div>
</div>

ผลลัพธ์:

ผลลัพธ์ตัวอย่าง

ช่องว่างกริด

ช่องว่างกริดควบคุมโดยคุณสมบัติสองตัว grid-row-gap และ grid-column-gap นอกจากนี้ CSS Grid Level 2 ได้แนะนำคุณสมบัติ gap ที่สามารถควบคุม grid-row-gap และ grid-column-gap พร้อมกัน

ตัวอย่าง:

.grid-example{
display: grid;
grid-template-columns: 30% 30% 30%;
grid-template-rows: 200px 200px;
grid-row-gap: 50px; /* ช่องว่างระหว่างแถว 50px */
grid-column-gap: 30px; /* ช่องว่างระหว่างคอลัมน์ 30px */
/* gap: 50px 30px; ช่องว่างระหว่างแถว 50px, ช่องว่างระหว่างคอลัมน์ 30px */
}
.item{
margin: 10px;
background-color: rgb(100, 150, 200);
}
<div class="grid-example">
<div class="item">สาธิต Grid</div>
<div class="item">สาธิต Grid</div>
<div class="item">สาธิต Grid</div>
<div class="item">สาธิต Grid</div>
<div class="item">สาธิต Grid</div>
<div class="item">สาธิต Grid</div>
</div>

ผลลัพธ์:

ผลลัพธ์ตัวอย่าง

การจัดวางกริด

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

  • grid-column เป็นคุณสมบัติที่ใช้ตั้งค่าคอลัมน์ที่รายการกริดครอบครอง เป็นรูปแบบย่อของ grid-column-start และ grid-column-end ด้วย grid-column คุณสามารถกำหนดตำแหน่งของรายการกริดในทิศทางแนวนอนและจำนวนคอลัมน์ที่ครอบครองได้สะดวกยิ่งขึ้น
  • grid-row เป็นคุณสมบัติที่ใช้ตั้งค่าแถวที่รายการกริดครอบครอง เป็นรูปแบบย่อของ grid-row-start และ grid-row-end ด้วย grid-row คุณสามารถกำหนดตำแหน่งของรายการกริดในทิศทางแนวตั้งและจำนวนแถวที่ครอบครองได้สะดวกยิ่งขึ้น
  • คุณสมบัติ grid-area เป็นคุณสมบัติย่อที่ใช้ตั้งค่าคุณสมบัติ grid-row-start, grid-column-start, grid-row-end และ grid-column-end พร้อมกัน ด้วย grid-area คุณสามารถกำหนดตำแหน่งและขนาดของรายการกริดในเลย์เอาต์กริดได้อย่างเข้าใจง่ายยิ่งขึ้น

ตัวอย่าง:

.example {
display: grid;
grid-template-columns: repeat(3, 1fr);
/* กำหนด 3 คอลัมน์, แต่ละคอลัมน์ครอบครอง 1 ส่วนพื้นที่ */
grid-template-rows: repeat(2, 150px);
/* กำหนด 2 แถว, แต่ละแถวสูง 150px */
gap: 10px;
padding: 20px;
}
.item {
background-color: #f2f2f2;
padding: 20px;
border: 1px solid #ddd;
text-align: center;
}
/* การจัดวางโดยใช้ grid-column และ grid-row */
.item1 {
grid-column: 1 / 3; /* จากคอลัมน์ที่ 1 ถึงคอลัมน์ที่ 3(1+2 คอลัมน์) */
grid-row: 1 / 2; /* จากแถวที่ 1 ถึงแถวที่ 2(1 แถว) */
}
/* การจัดวางโดยใช้ grid-area */
.item2 {
grid-area: 2 / 2 / 3 / 4; /* จากแถวที่ 2 คอลัมน์ที่ 2 ถึงแถวที่ 3 คอลัมน์ที่ 4(2 แถว)(2+3 คอลัมน์) */
}
<div class="example">
<div class="item item1">Item 1</div>
<div class="item item2">Item 2</div>
<div class="item">Item 3</div>
<div class="item">Item 4</div>
<div class="item">Item 5</div>
<div class="item">Item 6</div>
</div>

ผลลัพธ์:

ผลลัพธ์ตัวอย่าง

ตัวอย่าง:

body {
margin: 0;
padding: 0;
}
.container {
display: grid;
grid-template-columns: 1fr 2fr;
/* กำหนดสองคอลัมน์, คอลัมน์แรกครอบครองหนึ่งส่วน, คอลัมน์ที่สองครอบครองสองส่วน */
grid-template-rows: auto;
/* กำหนดความสูงแถว, แถวแรกและแถวที่สามความสูงกำหนดโดยเนื้อหา, แถวที่สองครอบครองพื้นที่ที่เหลือ */
grid-template-areas:
"header header"
"sidebar main"
"footer footer";
/* กำหนดเลย์เอาต์พื้นที่, แต่ละพื้นที่แสดงด้วยสตริง, ช่องว่างแยกเซลล์, ขึ้นบรรทัดใหม่แสดงแถวใหม่ */
min-height: 100vh;
/* ตั้งค่าความสูงต่ำสุด, รับประกันว่า footer จะมองเห็นได้แม้ความสูงเนื้อหาน้อยกว่าวิวพอร์ต */
}
.header {
grid-area: header;
/* วาง .header ในพื้นที่ชื่อ "header" */
background-color: #333;
color: #fff;
padding: 10px;
}
.sidebar {
grid-area: sidebar;
/* วาง .sidebar ในพื้นที่ชื่อ "sidebar" */
background-color: #f2f2f2;
padding: 10px;
}
.main {
grid-area: main;
/* วาง .main ในพื้นที่ชื่อ "main" */
padding: 10px;
}
.footer {
grid-area: footer;
/* วาง .footer ในพื้นที่ชื่อ "footer" */
background-color: #333;
color: #fff;
padding: 10px;
}
<div class="container">
<div class="header">Header</div>
<div class="sidebar">Sidebar</div>
<div class="main">
<h1>Main Content</h1>
<p>This is the main content area.</p>
</div>
<div class="footer">Footer</div>
</div>

ผลลัพธ์:

ผลลัพธ์ตัวอย่าง

แชร์:

ความคิดเห็น