Chia layout của list item với Flex nhưng có khoảng cách column-gap giống Grid, và hoàn toàn responsive với 20 dòng SCSS

Là một dev Frontend, chắc hẳn ai cũng từng phải làm việc với 1 list. Đó có thể là 1 list sản phẩm, list ảnh, list item… Với 1 list item, để chia layout sao cho đều chúng ta có thể dùng nhiều cách, ví dụ dùng display: grid hoặc display: flex Điểm khác biệt

Là một dev Frontend, chắc hẳn ai cũng từng phải làm việc với 1 list. Đó có thể là 1 list sản phẩm, list ảnh, list item…

Với 1 list item, để chia layout sao cho đều chúng ta có thể dùng nhiều cách, ví dụ dùng display: grid hoặc display: flex
Điểm khác biệt lớn nhất giữa gridflex là với grid thì chúng ta có thể set khoảng cách giữa cách item rất dễ dàng so với flex

Lấy ví dụ với 1 layout như sau

Chúng ta có một list item gồm 4 item 1 hàng

.grid
  .grid__layout
    .grid__item Item 1
    .grid__item Item 2
    .grid__item Item 3
    .grid__item Item 4
    .grid__item Item 5
    .grid__item Item 6

Với grid thì chúng ta chỉ cần set column-gap là các item sẽ tự động cách đều nhau
Nhưng với flex thì chùng ta cần dùng đến margin để chia khoảng cách, cộng thêm với việc responsive sẽ rất khó khắn trong tính toán
Chúng ta có thể giải quyết vẫn đề này bằng cách dùng CSS Variables

.grid {--itemPerRow: 4;--itemMargin: 16px;@media(max-width: 1399.98px){--itemPerRow: 3;--itemMargin: 16px;}@media(max-width: 1199.98px){--itemPerRow: 2;--itemMargin: 14px;}@media(max-width: 991.98px){--itemPerRow: 1;--itemMargin: 12px;}&__layout {display: flex;flex-wrap: wrap;margin-right:calc(-1 *var(--itemMargin));}&__item {width:calc(100% /var(--itemPerRow)-var(--itemMargin));margin: 0 var(--itemMargin)var(--itemMargin) 0;}}

Nguồn: viblo.asia

Bài viết liên quan

9 Mẹo lập trình Web “ẩn mình” giúp tiết kiệm hàng giờ đồng hồ

Hầu hết các lập trình viên (kể cả những người giỏi) đều tốn thời gian x

Can GPT-4o Generate Images? All You Need to Know about GPT-4o-image

OpenAI‘s GPT-4o, introduced on March 25, 2025, has revolutionized the way we create visual con

Khi nào nên dùng main, section, article, header, footer, và aside trong HTML5

HTML5 đã giới thiệu các thẻ ngữ nghĩa giúp cấu trúc nội dung web một cách có

So sánh Webhook và API: Khi nào nên sử dụng?

Trong lĩnh vực công nghệ thông tin và phát triển phần mềm, Webhook và API là hai th