Học CSS Grid trong 5 phút

Bài viết này sẽ giới thiệu tổng quan về grid cơ bản cho các bạn.

Có 5 phút thôi, chúng ta cùng bắt đầu nào. Let go!!!

1. Grid layout

Hai thành phần cốt lõi của grid là các div bọc ngoài (cha mẹ) và các item bên trong (con).

div bọc ngoài tạo ra griditem chính là nội dung bên trong cần sắp xếp của grid.

Bên dưới là ví dụ của class wrapper cùng với 6 item con

<div class="wrapper">
  <div class="item1">1</div>
  <div class="item2">2</div>
  <div class="item3">3</div>
  <div class="item4">4</div>
  <div class="item5">5</div>
  <div class="item6">6</div>
</div>

Chúng ta sẽ css cho class wrapper trình bày dưới dạng grid

.wrapper {
    display: grid;
}

Chúng ta đã định nghĩa div cha dạng grid nhưng vẫn chưa custom từng item.

Vì vậy, các item chỉ đơn giản là xếp chồng lên nhau.

Kết quả:

2. Columns and rows

Để các item trông xịn, mịn hơn, chúng ta cần xác định số hàng và số cột của wrapper.

Chúng ta sử dụng thuộc tính grid-template-rowgrid-template-column

.wrapper {
    display: grid;
    grid-template-columns: 100px 100px 100px;
    grid-template-rows: 50px 50px;
}

Chúng ta viết 3 giá trị của grid-template-columns tương ứng sẽ được 3 cột

Còn 2 giá trị của grid-template-rows tương ứng với 2 hàng

Những giá trị cụ thể kể trên cho ta biết mỗi cột rộng 100px và cao 50px

Đây là kết quả:

Để đảm bảo bạn hiểu chính xác về các giá trị, ta thử thay đổi freestyle chút xem sao:

.wrapper {
    display: grid;
    grid-template-columns: 200px 50px 100px;
    grid-template-rows: 100px 30px;
}

Kết quả sẽ là:

Đơn giản chỉ vậy thôi đó =))

3. Sắp xếp các phần tử

Phần này sẽ giới thiệu cho các bạn làm sao để sắp xếp các phần tử trên grid

Đây sẽ là phần các bạn quan tâm nhiều nhất, vì nó thật sự là vi diệu =))

Với class wrapper trên, chúng ta thử tạo một grid với 3x3 phần tử nào.

.wrapper {
    display: grid;
    grid-template-columns: 100px 100px 100px;
    grid-template-rows: 100px 100px 100px;
}

Kết quả:

Lưu ý: chúng ta thấy chỉ hiển thị 3x2 phần tử vì chúng ta chỉ có 6 item, nếu có thêm 3 item nữa, thì chỗ trống bên dưới cũng sẽ được lấp đầy theo trật tự trên.

Để xác định vị trí và thay đổi kích thước của item, chúng ta sẽ phải sử dụng thêm thuộc tính grid-columngrid-row

.item1 {
    grid-column-start: 1;
    grid-column-end: 4;
}

Với code trên, chúng ta muốn css item1 bắt đầu từ grid line thứ 1 đến grid line thứ 4

Vì vậy, item1 sẽ chiếm hết cả hàng đầu tiên, các item khác sẽ bị đẩy xuống dưới theo thứ tự

Kết quả:

Nếu các bạn còn băn khoăn về grid line, chúng ta có 3 cột nhưng có tận 4 grid line cơ =))

Code trên, ta có thể viết đơn giản hơn:

.item1 {
    grid-column: 1 / 4;
}

Để mọi người có thể hiểu một cách chính xác hơn về grid, ta sẽ sắp xếp lại các item thêm sinh động hơn nào:

.item1 {
    grid-column-start: 1;
    grid-column-end: 3;
}
.item3 {
    grid-row-start: 2;
    grid-row-end: 4;
}
.item4 {
    grid-column-start: 2;
    grid-column-end: 4;
}

Kết quả:

Nhìn trông rất hịn min đúng hem =))

4. Kết luận

Trong 5 phút qua, hi vọng bạn có cái nhìn tổng quát về grid layout

Ngoài ra, còn có rất nhiều thuộc tính của grid mà mình chưa kể ra, bạn có thể xem chi tiết ở đây

Cảm ơn các bạn đã theo dõi bài viết.

5. Tài liệu tham khảo

https://css-tricks.com/snippets/css/complete-guide-grid/

https://medium.com/free-code-camp/learn-css-grid-in-5-minutes-f582e87b1228