Ghi chú kỹ thuật của zhaoJian

Khóa học IT CSS Cơ bản 031_Bố cục lưới Grid

Học tập / CSS Cơ bản ~11091 từ · 28 phút đọc - lượt xem

Bố cục lưới Grid

Lưới là một chế độ bố cục bao gồm một loạt các đường ngang và dọc. Với lưới, chúng ta có thể sắp xếp các phần tử thiết kế, giúp chúng ta thiết kế các trang có các phần tử với vị trí và chiều rộng cố định, làm cho các trang web của chúng ta thống nhất hơn.

Một lưới thường có nhiều cột (column)hàng (row), cũng như các khoảng cách giữa các hàng và cột, khoảng cách này thường được gọi là gutter.

Hiệu ứng ví dụ

Khái niệm cơ bản

Bố cục Grid bao gồm các khái niệm cơ bản sau:

  • Container lưới (grid container): Bố cục lưới bao gồm container lưới và item lưới. Container lưới là container đặt các item lưới vào lưới. Container lưới có thể là bất kỳ phần tử nào, nhưng thường sử dụng phần tử div.
  • Item lưới (grid item): Item lưới là các phần tử được đặt trong container lưới. Item lưới có thể là bất kỳ phần tử nào, nhưng thường sử dụng phần tử div.
  • Đường lưới (grid line): Đường lưới là các đường chia container lưới thành các hàng và cột. Đường lưới có thể là đường ngang hoặc dọc.
  • Cột lưới (grid column): Cột lưới là các đường dọc trong container lưới.
  • Hàng lưới (grid row): Hàng lưới là các đường ngang trong container lưới.
Các thuộc tính thường dùng

Thuộc tính Container lưới

Container lưới có các thuộc tính sau để kiểm soát bố cục lưới:

  • display: Đặt chế độ hiển thị của container lưới. Container lưới phải được đặt thành display: grid hoặc display: inline-grid để sử dụng bố cục lưới.
  • grid-template-columns: Đặt số cột và chiều rộng cột của container lưới (sử dụng đơn vị fr, px, em, v.v.).
  • grid-template-rows: Đặt số hàng và chiều cao hàng của container lưới (sử dụng đơn vị fr, px, em, v.v.).
  • grid-template: Đặt đồng thời grid-template-columnsgrid-template-rows.
  • grid-auto-columns: Đặt chiều rộng cột của container lưới.
  • grid-auto-rows: Đặt chiều cao hàng của container lưới.

Thuộc tính Item lưới

Item lưới có các thuộc tính sau để kiểm soát bố cục của item lưới trong lưới:

  • grid-column: Đặt cột của item lưới.
  • grid-row: Đặt hàng của item lưới.
  • grid-column-start: Đặt vị trí bắt đầu của item lưới trong cột.
  • grid-column-end: Đặt vị trí kết thúc của item lưới trong cột.
  • grid-row-start: Đặt vị trí bắt đầu của item lưới trong hàng.
  • grid-row-end: Đặt vị trí kết thúc của item lưới trong hàng.
  • grid-area: Đặt vùng của item lưới.
  • grid-gap: Đặt khoảng cách giữa các đường lưới.
Bố cục lưới

Định nghĩa chiều rộng cột và chiều cao hàng cố định và tự thích ứng

Ví dụ:

.grid-example{
display: grid;
grid-template-columns: 100px 200px auto;
/* Cột đầu tiên 100px, cột thứ hai 200px, không gian còn lại phân bổ cho cột tự thích ứng */
grid-template-rows: 100px 200px auto;
/* Hàng đầu tiên 100px, hàng thứ hai 200px, không gian còn lại phân bổ cho hàng tự thích ứng */
}
.item{
margin: 10px;
background-color: rgb(100, 150, 200);
}
<div class="grid-example">
<div class="item">Demo Grid</div>
<div class="item">Demo Grid</div>
<div class="item">Demo Grid</div>
<div class="item">Demo Grid</div>
<div class="item">Demo Grid</div>
<div class="item">Demo Grid</div>
<div class="item">Demo Grid</div>
<div class="item">Demo Grid</div>
<div class="item">Demo Grid</div>
</div>

Hiệu ứng:

Hiệu ứng ví dụ Sử dụng phần trăm để định nghĩa chiều rộng cột, chiều cao hàng

Ví dụ:

.grid-example{
display: grid;
grid-template-columns: 30% 2fr 1fr;
/* Cột đầu tiên chiếm 30%, cột thứ hai chiếm hai phần không gian còn lại, cột thứ ba chiếm một phần không gian còn lại */
grid-template-rows: 30% 2fr 1fr;
/* Hàng đầu tiên chiếm 30%, hàng thứ hai chiếm hai phần không gian còn lại, hàng thứ ba chiếm một phần không gian còn lại */
}
.item{
margin: 10px;
background-color: rgb(100, 150, 200);
}
<div class="grid-example">
<div class="item">Demo Grid</div>
<div class="item">Demo Grid</div>
<div class="item">Demo Grid</div>
<div class="item">Demo Grid</div>
<div class="item">Demo Grid</div>
<div class="item">Demo Grid</div>
<div class="item">Demo Grid</div>
<div class="item">Demo Grid</div>
<div class="item">Demo Grid</div>
</div>

Hiệu ứng:

Hiệu ứng ví dụ Chia đều (phân bổ đều) chiều rộng cột, chiều cao hàng

Ví dụ:

.grid-example{
display: grid;
grid-template-columns: repeat(3, 1fr);
/* Ba cột bằng nhau, mỗi cột chiếm một phần không gian còn lại */
grid-template-rows: repeat(3, 1fr);
/* Ba hàng bằng nhau, mỗi hàng chiếm một phần không gian còn lại */
}
.item{
margin: 10px;
background-color: rgb(100, 150, 200);
}
<div class="grid-example">
<div class="item">Demo Grid</div>
<div class="item">Demo Grid</div>
<div class="item">Demo Grid</div>
<div class="item">Demo Grid</div>
<div class="item">Demo Grid</div>
<div class="item">Demo Grid</div>
<div class="item">Demo Grid</div>
<div class="item">Demo Grid</div>
<div class="item">Demo Grid</div>
</div>

Hiệu ứng:

Hiệu ứng ví dụ Sử dụng minmax để định nghĩa chiều rộng/cao tối thiểu và tối đa cho cột, hàng

Ví dụ:

.grid-example{
display: grid;
grid-template-columns: minmax(100px, 1fr) minmax(200px, 2fr);
/* Cột đầu tiên chiều rộng tối thiểu 100px, chiếm một phần không gian còn lại; cột thứ hai chiều rộng tối thiểu 200px, chiếm hai phần không gian còn lại */
grid-template-rows: minmax(100px, 1fr) minmax(200px, 2fr);
/* Hàng đầu tiên chiều cao tối thiểu 100px, chiếm một phần không gian còn lại; hàng thứ hai chiều cao tối thiểu 200px, chiếm hai phần không gian còn lại */
}
.item{
margin: 10px;
background-color: rgb(100, 150, 200);
}
<div class="grid-example">
<div class="item">Demo Grid</div>
<div class="item">Demo Grid</div>
<div class="item">Demo Grid</div>
<div class="item">Demo Grid</div>
</div>

Hiệu ứng:

Hiệu ứng ví dụ

Khoảng cách lưới

Khoảng cách lưới được kiểm soát bởi hai thuộc tính: grid-row-gapgrid-column-gap. Ngoài ra, CSS Grid Level 2 đã giới thiệu thuộc tính gap, có thể kiểm soát cả grid-row-gapgrid-column-gap cùng lúc.

Ví dụ:

.grid-example{
display: grid;
grid-template-columns: 30% 30% 30%;
grid-template-rows: 200px 200px;
grid-row-gap: 50px; /* Khoảng cách hàng là 50px */
grid-column-gap: 30px; /* Khoảng cách cột là 30px */
/* gap: 50px 30px; Khoảng cách hàng là 50px, khoảng cách cột là 30px */
}
.item{
margin: 10px;
background-color: rgb(100, 150, 200);
}
<div class="grid-example">
<div class="item">Demo Grid</div>
<div class="item">Demo Grid</div>
<div class="item">Demo Grid</div>
<div class="item">Demo Grid</div>
<div class="item">Demo Grid</div>
<div class="item">Demo Grid</div>
</div>

Hiệu ứng:

Hiệu ứng ví dụ

Định vị lưới

Định vị lưới thường đề cập đến việc sử dụng các thuộc tính grid-column, grid-rowgrid-area để định vị các item trong bố cục lưới. Các thuộc tính này được sử dụng để chỉ định các cột và hàng mà item chiếm trong lưới, hoặc trực tiếp chỉ định vùng mà item nằm.

  • grid-column là thuộc tính được sử dụng để đặt các cột mà item lưới trải dài. Đây là viết tắt của grid-column-startgrid-column-end. Với grid-column, bạn có thể định nghĩa vị trí và số cột mà item lưới trải dài theo chiều ngang thuận tiện hơn.
  • grid-row là thuộc tính được sử dụng để đặt các hàng mà item lưới trải dài. Đây là viết tắt của grid-row-startgrid-row-end. Với grid-row, bạn có thể định nghĩa vị trí và số hàng mà item lưới trải dài theo chiều dọc thuận tiện hơn.
  • Thuộc tính grid-area là thuộc tính viết tắt để đặt đồng thời grid-row-start, grid-column-start, grid-row-endgrid-column-end. Với grid-area, bạn có thể định nghĩa vị trí và kích thước của item lưới trong bố cục lưới một cách trực quan hơn.

Ví dụ:

.example {
display: grid;
grid-template-columns: repeat(3, 1fr);
/* Định nghĩa 3 cột, mỗi cột chiếm 1 phần không gian */
grid-template-rows: repeat(2, 150px);
/* Định nghĩa 2 hàng, mỗi hàng cao 150px */
gap: 10px;
padding: 20px;
}
.item {
background-color: #f2f2f2;
padding: 20px;
border: 1px solid #ddd;
text-align: center;
}
/* Định vị sử dụng grid-column và grid-row */
.item1 {
grid-column: 1 / 3; /* Từ cột 1 đến cột 3 (cột 1+2) */
grid-row: 1 / 2; /* Từ hàng 1 đến hàng 2 (hàng 1) */
}
/* Định vị sử dụng grid-area */
.item2 {
grid-area: 2 / 2 / 3 / 4; /* Từ hàng 2 cột 2 đến hàng 3 cột 4 (hàng 2)(cột 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>

Hiệu ứng:

Hiệu ứng ví dụ

Ví dụ:

body {
margin: 0;
padding: 0;
}
.container {
display: grid;
grid-template-columns: 1fr 2fr;
/* Định nghĩa hai cột, cột đầu tiên chiếm một phần, cột thứ hai chiếm hai phần */
grid-template-rows: auto;
/* Định nghĩa chiều cao hàng, hàng đầu tiên và thứ ba chiều cao được xác định bởi nội dung, hàng thứ hai chiếm không gian còn lại */
grid-template-areas:
"header header"
"sidebar main"
"footer footer";
/* Định nghĩa bố cục vùng, mỗi vùng được biểu thị bằng một chuỗi, dấu cách phân tách các ô, xuống dòng biểu thị hàng mới */
min-height: 100vh;
/* Đặt chiều cao tối thiểu để đảm bảo footer có thể nhìn thấy khi chiều cao nội dung nhỏ hơn viewport */
}
.header {
grid-area: header;
/* Đặt .header vào vùng có tên "header" */
background-color: #333;
color: #fff;
padding: 10px;
}
.sidebar {
grid-area: sidebar;
/* Đặt .sidebar vào vùng có tên "sidebar" */
background-color: #f2f2f2;
padding: 10px;
}
.main {
grid-area: main;
/* Đặt .main vào vùng có tên "main" */
padding: 10px;
}
.footer {
grid-area: footer;
/* Đặt .footer vào vùng có tên "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>

Hiệu ứng:

Hiệu ứng ví dụ

Chia sẻ:

Bình luận