มาทำความรู้จัก grid-template-columns ใน CSS Grid กัน

Phatcharaphan Ananpreechakun
odds.team
Published in
2 min readMar 1, 2023

CSS Grid เป็น tool ที่ใช้สำหรับสร้าง Layout บน Web `grid-template-columns` นั้นก็เป็น Property หนึ่งของ CSS Grid layout ซึ่งสามารถที่จะระบุ size position ของ columns ใน grid container ได้

มาลองเล่นกัน

  • เราต้องการที่จะแสดงข้อมูลที่มี 3 columns สำหรับตัวอย่างนี้จะให้กว้างเต็มหน้าจอเลย และถ้ามีข้อมูลมากกว่านั้นก็ให้ไปอยู่ใน row เลย
const GridContainer = () => {
const data = ["Item 1", "Item 2", "Item 3", "Item 4", "Item 4", "Item 5", "Item 6", "Item 7"]

return <>
<div className="gridContainer">
{data && data.map((item) => (<div className="gridItem">{item}</div>))}
</div>
</>
}

export default GridContainer;
.gridContainer {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
gap: 20px;
}

.gridItem {
background-color: #ddd;
padding: 20px;
text-align: center;
}

จากโค้ต

  • เรามีการสร้าง container div และจะใช้ class name `gridContainer` เพื่อระบุข้อมูลที่อยู่ใน container นั้นว่าจะให้แสดงแบบไหน
  • fr เป็นหน่วยที่ใช้ใน CSS Grid Layout และเอาไว้กำหนด Grid tracks ซึ่ง Grid tracks นั้นมันจะถูก refer ถึง row หรือ columns ที่เราสร้างขึ้นโดยการกำหนด grid ที่เราใช้ใน property ที่จะชื่อ grid-template-columns หรือ grid-template-rows นั่นเอง ซึ่งทำให้ง่ายต่อการสร้าง Layout responsive
  • ใน class name `gridContainer` จะให้ข้อมูลแสดงเป็น grid และใช้ grid-template-columns เพื่อมาระบุว่าจะให้แสดงกี่ columns ใน container นั้น ซึ่งในตัวอย่างนั้น grid-template-columns ระบุว่า 1fr 1fr 1fr สามอันนั้นคือ เราจะบอกว่าให้ Grid สร้าง 3 columns ให้หน่อย
  • ใน div ที่มี class name `gridItem` ซึ่งจะเป็นการกำหนด item ข้างในล่ะ อันนี้ก็แล้วแต่ต้องการเลยว่าอยากได้อะไรบ้าง

ถ้าเราลองมาเปลี่ยน `grid-template-columns: 1fr 3fr 1fr;` เป็นแบบนี้ซึ่งหมายความว่าเราต้องการให้ columns ตรงกลางกว้างสามเท่า ดังในภาพนี้

นอกจากนี้เรายังสามารถระบุความกว้างของ columns `grid-template-columns` เพื่อกำหนด position และ size ของ Grid ได้ ซึ่งเราให้เราเลือกใช้งานตามความต้องการ

  • Absolute lengths ที่จะคุ้นๆ px หรือ em
  • Relative lengths ที่จะคุ้นๆ % หรือ vw
  • Fractional units ที่จะคุ้นๆ fr

ต่อมาเราลองมาใช้ px ใน grid-template-columns โดยเราจะเปลี่ยน colums หลังสุดให้มีขนาดแค่ 100px ลองเขียนใหม่แบบนี้ `grid-template-columns: 1fr 1fr 100px; ` หน้าจอที่ได้ก็จะเป็นแบบนี้

repeat ใน grid-template-columns จะเป็น function ที่ทำซ้ำในรูปแบบที่เราระบุ เช่น เราจะลองเปลี่ยน css เป็น `grid-template-columns: repeat(3, 1fr);` ซึ่งหมายความว่า ให้สร้าง 3 columns ที่มีความกว้างเท่ากัน แต่ละ columns ใช้พื้นที่ 1 ในสามของพื้นที่มีอยู่ ตัวอย่างก็จะออกเหมือนกับรูปแรกเลย

จบแล้ว เจอกันบทความต่อไป

ถ้าผิดพลาดตรงไหนหรือว่ามีคำแนะนำสามารถบอกได้เลยย

--

--