CSS Grid và Flexbox: so sánh trong thực tế. Bố cục trên lưới trong CSS. Hướng dẫn đầy đủ và tham khảo. Giải pháp Flexbox

Danny Markov

Thiết kế khá đơn giản - nó bao gồm một thùng chứa được căn giữa, bên trong chúng ta có tiêu đề, phần chính, bảng điều khiển bên và một tầng hầm. Dưới đây là các "kiểm tra" chính mà chúng ta nên chạy trong khi vẫn giữ CSS và HTML sạch nhất có thể:

  1. Đặt bốn phần chính của bố cục.
  2. Làm cho trang phản hồi nhanh (thanh bên nằm bên dưới nội dung chính trên màn hình nhỏ).
  3. Căn chỉnh nội dung tiêu đề - điều hướng bên trái, nút bên phải.

Như bạn có thể thấy, để so sánh, chúng tôi đã giữ mọi thứ đơn giản nhất có thể. Hãy bắt đầu với bài kiểm tra đầu tiên.

Bài kiểm tra 1: Bố cục các phần trang

Giải pháp Flexbox

Thêm display: flex vào container và đặt hướng phần tử con theo chiều dọc. Điều này định vị tất cả các phần bên dưới nhau.

Vùng chứa ( display: flex; flex-direction: cột; )

Bây giờ chúng ta cần đảm bảo rằng phần chính và thanh bên được đặt cạnh nhau. Vì các thùng chứa linh hoạt thường là một chiều nên chúng ta cần thêm yếu tố bổ sung.

Sau đó, chúng tôi đặt display: flex và flex-direction của phần tử này theo hướng ngược lại.

Trình bao bọc chính và thanh bên ( display: flex; flex-direction: row; )

Bước cuối cùng là đặt kích thước của phần chính và thanh bên. Chúng tôi muốn nội dung chính có chiều rộng gấp ba lần thanh bên, điều này có thể dễ dàng thực hiện với tính linh hoạt hoặc tỷ lệ phần trăm.

Như bạn có thể thấy, Flexbox đã làm tốt mọi thứ, nhưng chúng tôi cũng cần khá nhiều thuộc tính CSS cộng với một phần tử HTML bổ sung. Hãy xem CSS Grid sẽ hoạt động như thế nào.

Giải pháp lưới CSS

Có một số tùy chọn để sử dụng CSS Grid, nhưng chúng tôi sẽ sử dụng cú pháp vùng mẫu lưới là phù hợp nhất cho mục đích của chúng tôi.

Trước tiên, chúng ta sẽ xác định bốn vùng lưới, một vùng cho mỗi phần của trang:

tiêu đề ( Grid-area: header; ) .main ( Grid-area: main; ) .sidebar ( Grid-area: sidebar; ) footer ( Grid-area: footer; )

Bây giờ chúng ta có thể thiết lập lưới của mình và xác định vị trí của từng khu vực. Mã ban đầu có vẻ khá phức tạp, nhưng khi bạn đã quen với hệ thống lưới, nó sẽ trở nên dễ hiểu hơn.

Container ( display: Grid; /* Xác định kích thước và số lượng cột trong lưới của chúng ta. Đơn vị fr hoạt động giống như Flexbox: các cột chia không gian có sẵn trong hàng theo giá trị của chúng. Chúng ta sẽ có hai cột - cột đầu tiên là gấp ba lần kích thước của phần thứ hai. */ Grid-template -columns: 3fr 1fr; /* Liên kết các khu vực được tạo trước đó với các vị trí trong lưới. Dòng đầu tiên là tiêu đề. Dòng thứ hai được phân chia giữa phần chính và phần sidebar. Dòng cuối cùng là footer. */ Grid-template-areas: "header header" " main sidebar" "footer footer"; /* Khoảng cách giữa các ô lưới sẽ là 60 pixels */ Grid-gap: 60px; )

Đó là tất cả! Bố cục của chúng tôi bây giờ sẽ tuân theo cấu trúc trên và chúng tôi đã thiết lập nó để không phải xử lý lề hoặc phần đệm.

Kiểm tra 2. Làm cho trang phản hồi nhanh

Giải pháp Flexbox

Bước này liên quan chặt chẽ với bước trước. Đối với giải pháp Flexbox, chúng ta sẽ phải thay đổi hướng flex và điều chỉnh lề.

@media (độ rộng tối đa: 600px) ( .main-and-sidebar-wrapper ( flex-direction: cột; ) .main ( lề-phải: 0; lề-dưới: 60px; ) )

Trang của chúng tôi khá đơn giản nên không có nhiều thao tác trong truy vấn phương tiện nhưng bố cục phức tạp hơn sẽ cần phải làm lại nhiều.

Giải pháp lưới CSS

Vì chúng ta đã xác định các vùng lưới nên chúng ta chỉ cần xác định lại thứ tự của chúng trong truy vấn phương tiện. Chúng ta có thể sử dụng cùng một thiết lập loa.

@media (độ rộng tối đa: 600px) ( .container ( /* Căn chỉnh các vùng lưới cho bố cục trên thiết bị di động */ Grid-template-areas: "header header" "main main" "sidebar sidebar" "footer footer"; ) )

Hoặc chúng ta có thể xác định lại toàn bộ bố cục từ đầu nếu chúng ta cho rằng giải pháp này sạch hơn.

@media (độ rộng tối đa: 600px) ( .container ( /* Chuyển đổi lưới thành bố cục một cột */ Grid-template-columns: 1fr; Grid-template-areas: "header" "main" "sidebar" " chân trang"; ) )

Kiểm tra 3: Căn chỉnh các thành phần tiêu đề

Giải pháp Flexbox

Chúng tôi đã thực hiện bố cục tương tự với Flexbox trong một trong những bài viết cũ của chúng tôi -. Kỹ thuật này khá đơn giản:

Tiêu đề ( display: flex; justify-content: space-between; )

Danh sách và nút điều hướng hiện đã được căn chỉnh chính xác. Tất cả những gì còn lại là đặt các vật phẩm vào bên trong