Hai thuộc tính này khai báo explicit grid (lưới tường minh): có bao nhiêu track và mỗi track rộng/cao bao nhiêu.
css
.grid {
display: grid;
grid-template-columns: 200px 1fr 1fr; /* 3 cột */
grid-template-rows: auto 1fr auto; /* 3 hàng */
}
/* repeat() cho track lặp lại */
.g2 { grid-template-columns: repeat(4, 1fr); }
.g3 { grid-template-columns: repeat(2, 200px) 1fr; }
/* responsive không cần media query */
.cards { grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); }
/* đặt tên cho đường kẻ, dùng lại khi đặt item */
.g4 { grid-template-columns: [full-start] 1fr [content-start] 720px [content-end] 1fr [full-end]; }Giá trị hay dùng cho một track: <độ dài>, %, fr, auto (vừa nội dung), min-content, max-content, minmax(a, b), fit-content(300px).
Item vượt quá số track khai báo sẽ rơi vào lưới ngầm (implicit grid) — kích thước do grid-auto-rows/grid-auto-columns quyết định:
css
.grid { grid-auto-rows: minmax(120px, auto); }Lưu ý: grid-template-rows: 1fr trên container không có chiều cao thì 1fr bằng chiều cao nội dung, trông như không có tác dụng.
Grid theo chiều dọc gần như luôn cần height hoặc min-height trên container.