CSS – Grid Layout

Tram Ho

Trong bài này chúng ta sẽ tìm hiểu về Grid, các thuộc tính của nó cũng như cách sử dụng Grid trong thực tế.

Grid là gì?

CSS Grid Layout là một hệ thống bố cục lưới hai chiều, nhờ sự ra đời của Grid đã thay đổi hoàn toàn cách thiết kế bố cục củawebsite. Trước kia khi thiết kế website, ta thường sử dụng tablefloatposition nhưng các cách trên sẽ bị bỏ qua mốt số chức năng quan trọng(căn giữa phần tử theo chiều dọc, …). Flexbox cũng có thể dùng để thiết kế bố cục rất tố nhưng trong một số trường hợp ta sử dụng Grid sẽ nhanh và tiện lợi hơn rất nhiều.

Một số khái niệm quan trọng

Grid Container

Screenshot from 2021-07-30 16-29-23.png

Như trong hình và code bạn có thể thấy container là toàn bộ phần có viền màu cam và nền màu xám chứa toàn bộ các grid-item hay container là element được gán thuộc tính CSS display: grid.

Grid Item

Grid item là các element con cấp đầu tiên của container của contaier.

Như trong code thì div với class not-child không phải là grid item.

Grid Line

Đường kẻ ngang hoặc dọc tạo nên cấu trúc và chia các grid-item được gọi là grid line. Như bạn có thể thấy đường kẻ màu xanh có các số bên dưới chính là là grid line.

Screenshot from 2021-07-30 16-54-58.png

Grid Cell

Grid cell là khoảng cách giữa hàng và cột của grid line. Nhưng ô 1 đến 9 hình bên dưới chính là grid-cell.

Screenshot from 2021-07-30 16-58-35.png

Grid Area

Grid area là một vùng bao gồm các grid-cell. Ví dụ như vùng bao gồm các cell 4, 5, 7, 8 bên trên là một grid area.

Một số thuộc tính của Grid

Container

grid-template-columns

grid-template-columns dùng đẻ xác định các cột trong grid layout. Các giá trị là kích thước của cột và được cách nhau bởi dấu cách.

grid-template-columns: value value ...

grid-template-rows

grid-template-rows dùng đẻ xác định các hàng trong grid layout. Các giá trị là kích thước của hàng và được cách nhau bởi dấu cách.

grid-template-rows: value value ...

grid-template-areas

grid-template-areas dùng để xác định một template grid giúp căn chỉnh layout một cách trực quan hơn và thường đi kèm với thuộc tính grid-area ở grid-item.

Giả sử ta muốn tạo một layout có 2 hàng và 3 cột với ô đầu tiên có chiều rộng là 2 cell ta sẽ có template như sau.

grid-column-gap

grid-column-gap là khoảng trống giữa các cột trong grid layout.

grid-column-gap: <value>

Screenshot from 2021-07-30 18-00-44.png

Ta có thể thấy khoảng cách giữa các cột đã được set là 1 rem.

grid-row-gap

Tương tự như grid-cloumn-gap thì grid-row-gap là đối với các hàng.

grid-row-gap: <value>

gap

Ta có thể sử dụng gap để viết tắt cho 2 thuộc tính là grid-column-gap và grid-row-gap.

gap: <grid-row-gap> <grid-column-gap> / <value> (cho cả 2 row và column)

Screenshot from 2021-07-30 18-06-52.png

grid-auto-columns và grid-auto-rows

Hai thuộc tính này dùng để chỉ định kích thước của cột hoặc hàng.

grid-auto-columns/rows: min-content | max-content | auto | <value>

place-items

place-items là shorthand của align-items: start | end | center | stretch (căn theo chiều dọc(column)) và justify-items: start | end | center | stretch (căn theo chiều ngang (row)).

place-items: <align-items> / <justify-items>

Screenshot from 2021-07-30 18-11-19.png

Item

grid-column

Ta sử dụng grid-column để xác định xem cell được CSS có độ dài như thế nào bằng grid-line(line theo chiều dọc).

grid-column: grid-line-start(số bắt đầu)/grid-line-end(số kết thúc)

Screenshot from 2021-07-30 18-26-01.png

Ta có thể thấy cell đầu tiên có độ rộng kéo dài từ line 1 đến 3 còn cell cuối cùng có độ rộng kéo dài từ line 2 đến line 4.

grid-row

Ta sử dụng grid-row để xác định xem cell được CSS có độ cao như thế nào bằng grid-line(line theo chiều dọc).

grid-row: grid-line-start(số bắt đầu)/grid-line-end(số kết thúc)

Screenshot from 2021-07-30 18-30-58.png

Tương tự như trên ta thấy cell đầu tiên có độ dài từ line 1 đến line 3 và chiều cao từ line 1 đến line 4.

grid-area

Đưa ra tên được định nghĩa trong template grid-template-areasgrid-item đó sẽ có bố cục giống như trong template.

grid-area: <name-in-template>.

Screenshot from 2021-07-30 18-45-05.png

Như hình ta có thể thấy dễ dàng tạo layout bằng cách lấy tên được định nhĩa trong grid-template-areas để gán giá trị cho grid-area của grid-item.

Thực hành

Mình sẽ tạo một ví dụ đơn giản về việc sử dụng grid để responsive.

Ở đây mình có dùng repeat()minmax() và auto-fit để responsive. Các cột của grid sẽ có chiều rộng giao động từ 250px đến 1fr và auto=fit ở đây dùng để khi chiều dài của block lớn hơn container các block sẽ tự động xuống dòng và giãn ra. Kết quả các bạn có thể xem ở đây.

Tổng kết

Như vậy qua bài viết này mình đã giúp các bạn tìm hiểu về Grid. Nó giúp ta có thể layout một cách dễ dàng. Ngoài ra còn một số thuộc tính hữu dụng khác của Grid mà mình chưa đề cập đến các bạn có thể tham khảo ở đây. Mình hy vọng qua bài viết này các bạn có thể sử dụng được Grid cho những project của mình. Cảm ơn các bạn đã theo dõi đến hết bài viết.

Chia sẻ bài viết ngay