Hướng dẫn is css grid better than flexbox? - lưới css có tốt hơn flexbox không?

Các quy trình phát triển web đã phát triển kể từ buổi bình minh của Internet: Các nhà phát triển đã phát hành các mô hình bố cục đáp ứng để giúp tạo và duy trì các trang web dễ dàng hơn. Cùng với Bootstrap, sự cạnh tranh lớn nhất trong số các mô hình bố cục được hỗ trợ là CSS Grid so với Flexbox.responsive layout models to make creating and maintaining web pages easier. Along with Bootstrap, the biggest rivalry among supported layout models is CSS Grid vs. Flexbox.

Hướng dẫn is css grid better than flexbox? - lưới css có tốt hơn flexbox không?

Tất cả các trang web yêu cầu ít nhất một vài tiêu đề, đoạn văn, hình ảnh và các thuộc tính điều hướng khác. Nếu nó có trang của bạn, bạn cũng muốn tổ chức và hiển thị các yếu tố này một cách hiệu quả và đảm bảo chúng trông đẹp trên bất kỳ màn hình nào, từ máy tính để bàn đến thiết bị di động và tất cả các tùy chọn ở giữa. & NBSP;. If it’s your page, you also want to organize and display these elements effectively and ensure they look good on any screen, from desktops to mobile devices and all the options in between. 

Trước đây, các chủ sở hữu trang web đã phải hack hack CSS của họ, sử dụng các phần tử bảng, các khối nội tuyến, phao và các loại định vị khác nhau. Tạo bố cục phức tạp cũng cần JavaScript. Những kỹ thuật này có phần hiệu quả nhưng thiếu chức năng chính, như định tâm thẳng đứng, khiến nó không phù hợp trên các trình duyệt. Họ cũng làm cho mã của một trang web khó khăn hơn nhiều để duy trì.CSS, using table elements, in-line blocks, floats, and different positioning types. Creating complex layouts required JavaScript as well. These techniques were somewhat effective but missing key functionality, like vertical centering, which made it inconsistent across browsers. They also made the code of a site much more difficult to maintain.

Hãy để so sánh một số mô hình bố cục được hỗ trợ tốt nhất.

Hướng dẫn is css grid better than flexbox? - lưới css có tốt hơn flexbox không?

CSS Grid và Flexbox là các mô hình bố cục có chung điểm tương đồng và thậm chí có thể được sử dụng cùng nhau. Sự khác biệt chính là bạn có thể sử dụng lưới CSS để tạo bố cục hai chiều. Ngược lại, bạn chỉ có thể sử dụng Flexbox để tạo bố cục một chiều. Điều đó có nghĩa là bạn có thể đặt các thành phần dọc theo trục X và Y trong lưới CSS và chỉ có một trục trong Flexbox.

Hãy cùng đi qua từng mô hình bên dưới bắt đầu với CSS Grid. & NBSP;

Với lưới CSS, bạn có thể căn chỉnh các thành phần thành các cột và hàng. Tính năng này làm cho nó lý tưởng cho các bố cục lớn hơn phải được chia thành các phần. Nói cách khác, loại bố cục này sẽ có các yếu tố cần chồng lên và lớp thay vì tuyến tính.

Dưới đây là một minh họa hữu ích (bởi nhà phát triển Ayush Gupta) của một bố cục có thể với CSS Grid.developer Ayush Gupta) of a possible layout with CSS Grid.

Hướng dẫn is css grid better than flexbox? - lưới css có tốt hơn flexbox không?

Nguồn

Với Flexbox, bạn có thể bố trí và căn chỉnh các phần tử trong một thùng chứa ngay cả khi bạn không biết kích thước của các yếu tố đó hoặc nếu kích thước có thể thay đổi. Điều đó bởi vì một thùng chứa flex, rất linh hoạt: nó mở rộng các yếu tố linh hoạt để lấp đầy không gian khi nó có sẵn và thu nhỏ chúng để ngăn chặn tràn khi nó không.

Dưới đây là một minh họa hữu ích khác của nhà phát triển Ayush Gupta cho thấy một bố cục mà có thể với Flexbox.

Hướng dẫn is css grid better than flexbox? - lưới css có tốt hơn flexbox không?

Nguồn

Với Flexbox, bạn có thể bố trí và căn chỉnh các phần tử trong một thùng chứa ngay cả khi bạn không biết kích thước của các yếu tố đó hoặc nếu kích thước có thể thay đổi. Điều đó bởi vì một thùng chứa flex, rất linh hoạt: nó mở rộng các yếu tố linh hoạt để lấp đầy không gian khi nó có sẵn và thu nhỏ chúng để ngăn chặn tràn khi nó không.article on CSS Tricks, co-founder of CodePen, Chris Coyier made an important note. Like Flexbox, you can use CSS Grid to create one-dimensional layouts. Also like CSS Grid, Flexbox can be used to create two-dimensional layouts. The difference here is that CSS Grid allows you to create 2D layouts in ways that Flexbox does not.

Dưới đây là một minh họa hữu ích khác của nhà phát triển Ayush Gupta cho thấy một bố cục mà có thể với Flexbox.

Trong một bài viết về CSS Tricks, đồng sáng lập của Codepen, Chris Coyier đã ghi chú quan trọng. Giống như Flexbox, bạn có thể sử dụng CSS Grid để tạo bố cục một chiều. Cũng giống như CSS Grid, Flexbox có thể được sử dụng để tạo bố cục hai chiều. Sự khác biệt ở đây là CSS Grid cho phép bạn tạo bố cục 2D theo những cách mà FlexBox không có.

Với Flexbox, bạn cũng có thể tạo các thùng chứa Flex đa dòng. Bạn chỉ đơn giản là phải áp dụng thuộc tính FLEX-AWRAP với giá trị của Wrap Wrap vào container của bạn. Bằng cách đó, nếu các mục của bạn quá lớn để tất cả hiển thị trong một dòng trên một khung nhìn cụ thể, chúng sẽ quấn vào một dòng khác thay vì co lại để phù hợp với một hàng.

Hướng dẫn is css grid better than flexbox? - lưới css có tốt hơn flexbox không?

Nguồn

Với Flexbox, bạn có thể bố trí và căn chỉnh các phần tử trong một thùng chứa ngay cả khi bạn không biết kích thước của các yếu tố đó hoặc nếu kích thước có thể thay đổi. Điều đó bởi vì một thùng chứa flex, rất linh hoạt: nó mở rộng các yếu tố linh hoạt để lấp đầy không gian khi nó có sẵn và thu nhỏ chúng để ngăn chặn tràn khi nó không.

Dưới đây là một minh họa hữu ích khác của nhà phát triển Ayush Gupta cho thấy một bố cục mà có thể với Flexbox.

Trong một bài viết về CSS Tricks, đồng sáng lập của Codepen, Chris Coyier đã ghi chú quan trọng. Giống như Flexbox, bạn có thể sử dụng CSS Grid để tạo bố cục một chiều. Cũng giống như CSS Grid, Flexbox có thể được sử dụng để tạo bố cục hai chiều. Sự khác biệt ở đây là CSS Grid cho phép bạn tạo bố cục 2D theo những cách mà FlexBox không có.HTML. With Flexbox, you must use HTML and CSS. Let’s take a closer look at each process below.

Với Flexbox, bạn cũng có thể tạo các thùng chứa Flex đa dòng. Bạn chỉ đơn giản là phải áp dụng thuộc tính FLEX-AWRAP với giá trị của Wrap Wrap vào container của bạn. Bằng cách đó, nếu các mục của bạn quá lớn để tất cả hiển thị trong một dòng trên một khung nhìn cụ thể, chúng sẽ quấn vào một dòng khác thay vì co lại để phù hợp với một hàng.

Điều này tạo ra các hàng và cột theo một nghĩa. Nhưng làm thế nào được bọc các vật phẩm Flex xếp hàng trên một hàng độc lập với cách chúng xếp hàng ở hàng trước. Điều đó bởi vì bạn có thể kiểm soát nơi các yếu tố uốn cong kết thúc như bạn có thể trong CSS Grid; Các phần tử uốn chỉ đơn giản là theo một trục duy nhất và sau đó bọc tương ứng. Kết quả là bố cục sẽ trông giống như một cái lưới hơn là một lưới.

Hầu hết các chủ sở hữu trang web đã giành được bất cứ nơi nào gần với mười hai cột. Trong trường hợp đó, bạn chỉ cần các cột của mình để thêm tối đa mười hai để chúng hiển thị trên một khối ngang. Điều đó có nghĩa là nếu tôi muốn tạo hai cột, trong đó một cột có kích thước bằng một nửa, tôi sẽ sử dụng các lớp .col-4 và .col-8. .col-4 and .col-8.

Bây giờ, hãy nói rằng tôi muốn tạo các cột có chiều rộng bằng nhau hiển thị theo chiều ngang cho đến khi chúng đạt đến một chiều rộng màn hình nhất định và sau đó tự động xếp chồng lên nhau. Trong trường hợp đó, tôi cần phải sử dụng điểm dừng lưới đáp ứng. & NBSP;

Năm tầng đáp ứng mặc định của hệ thống lưới Bootstrap 4 được liệt kê bên dưới. Xin lưu ý rằng giá trị được liệt kê trong pixel là điểm dừng mà tại đó các cột sẽ tự động xếp chồng lên nhau.

Tiền tố lớpKích thước thiết bịChiều rộng container tối đa
.col-thiết bị thêm nhỏÍt hơn 576px
.col-sm-thiết bị nhỏbằng hoặc lớn hơn 576px
.col-md-thiết bị trung bìnhbằng hoặc lớn hơn 768px
.col-lg-thiết bị lớnbằng hoặc lớn hơn 992px
.col-xl-Thiết bị cực lớnbằng hoặc lớn hơn 1200px

Bởi vì hệ thống cột và các tầng đáp ứng hoạt động cùng nhau, bạn sẽ thường thấy một số và tiền tố xác định lớp .col. Chúng tôi sẽ thấy rằng trong ví dụ dưới đây..col class. We’ll see that in the example below.

Ví dụ về lưới bootstrap

Hãy nói rằng tôi muốn tạo sáu cột có chiều rộng bằng nhau xếp chồng lên nhau trên điện thoại di động hoặc màn hình rộng nhỏ hơn 576px. Để làm như vậy, tôi đã sử dụng lớp .col-SM-2..col-sm-2 class.

Áp dụng lớp này cho sáu yếu tố, sau đó tôi kết hợp chúng liên tiếp, như được hiển thị bên dưới.

elements, I’d then wrap these in a row, as shown below.

 

   <div class="row">

<div class="col-sm-2" style="background-color:lavender;">.col-sm-2</div>

<div class="col-sm-2" style="background-color:lavenderblush;">.col-sm-2</div>

<div class="col-sm-2" style="background-color:lavender;">.col-sm-2</div>

<div class="col-sm-2" style="background-color:lavenderblush;">.col-sm-2</div>

<div class="col-sm-2" style="background-color:lavender;">.col-sm-2</div>

<div class="col-sm-2" style="background-color:lavenderblush;">.col-sm-2</div>

</div>

</div>

Bạn có thể thấy tôi đã thêm một số kiểu CSS nội tuyến để thấy rõ hơn từng cột riêng lẻ trên mặt trước. Đây là kết quả:

Hướng dẫn is css grid better than flexbox? - lưới css có tốt hơn flexbox không?

Nguồn

Bây giờ chúng tôi sẽ đi qua một ví dụ về việc xây dựng một lưới trong flexbox để bạn có thể so sánh cả hai quy trình.

Ví dụ về lưới flexbox

Hãy nói rằng tôi muốn tạo một lưới flexbox với sáu cột, như chữ trên. Trong phần cơ thể, tôi chỉ cần tạo sáu yếu tố và bọc chúng trong một yếu tố với lớp .flex-container. Tại đây, mã HTML:

elements and wrap them in a
element with the .flex-container class. Here’s the HTML code:

 

   <div class="flex-container">

<div>1</div>

<div>2</div>

<div>3</div>

<div>4</div>

<div>5</div>

<div>6</div>

</div>

Sau đó, tôi đã thêm CSS vào phần đầu của trang của tôi.

Sử dụng bộ chọn CSS. Sau đó, tôi có thể chỉ định chiều cao của thùng chứa cũng như màu nền, như hình dưới đây.CSS selector .flex-container, I’d make the container flexible by setting the display property to flex. I can then specify the height of the container as well as the background color, as shown below.

 

   .flex-container {

display: flex;

height: 250px;

background-color: gray;

}

Để tạo kiểu cho các mục Flex trong thùng chứa, tôi đã sử dụng bộ chọn .Flex-container> Div. Sau đó tôi có thể đặt màu nền, chiều rộng, lề và kích thước phông chữ của từng mục. Tôi cũng có thể sử dụng thuộc tính Align văn bản để đặt căn chỉnh của phông chữ trong mỗi mục và thuộc tính có chiều cao dòng để đặt khoảng cách từ trên cùng của thùng chứa flex mà phông chữ sẽ được hiển thị..flex-container > div. I can then set the background color, width, margin, and font size of each item. I can also use the text-align property to set the alignment of the font within each item and the line-height property to set how far from the top of the flex container the font will be displayed.

Ở đây, mã CSS:

 

   .flex-container > div {

background-color: #f1f1f1;

width: 100px;

margin: 10px;

text-align: center;

line-height: 60px;

font-size: 48px;

}

Đây là kết quả:

Hướng dẫn is css grid better than flexbox? - lưới css có tốt hơn flexbox không?
Nguồn

Bây giờ chúng tôi sẽ đi qua một ví dụ về việc xây dựng một lưới trong flexbox để bạn có thể so sánh cả hai quy trình.viewport changes size, I can simply add the flex-basis property in my CSS. Let’s set it to 1 1 150px so that the items grow and shrink from a flex-basis of 150 pixels. Here’s the new CSS:

 

   .flex-container {

display: flex;

height: 250px;

background-color: gray;

}

.flex-container > div {

background-color: #f1f1f1;

width: 100px;

margin: 10px;

text-align: center;

line-height: 50px;

font-size: 48px;

flex: 1 1 150px;

}

Đây là kết quả:

Hướng dẫn is css grid better than flexbox? - lưới css có tốt hơn flexbox không?

Nguồn

Bây giờ chúng tôi sẽ đi qua một ví dụ về việc xây dựng một lưới trong flexbox để bạn có thể so sánh cả hai quy trình.

Ví dụ về lưới flexbox

Hãy nói rằng tôi muốn tạo một lưới flexbox với sáu cột, như chữ trên. Trong phần cơ thể, tôi chỉ cần tạo sáu yếu tố và bọc chúng trong một yếu tố với lớp .flex-container. Tại đây, mã HTML:

Sau đó, tôi đã thêm CSS vào phần đầu của trang của tôi.

Sử dụng bộ chọn CSS. Sau đó, tôi có thể chỉ định chiều cao của thùng chứa cũng như màu nền, như hình dưới đây.

Để tạo kiểu cho các mục Flex trong thùng chứa, tôi đã sử dụng bộ chọn .Flex-container> Div. Sau đó tôi có thể đặt màu nền, chiều rộng, lề và kích thước phông chữ của từng mục. Tôi cũng có thể sử dụng thuộc tính Align văn bản để đặt căn chỉnh của phông chữ trong mỗi mục và thuộc tính có chiều cao dòng để đặt khoảng cách từ trên cùng của thùng chứa flex mà phông chữ sẽ được hiển thị.

Ở đây, mã CSS:

Đây là kết quả:

 

   <div class="wrapper">

<div class="box1">One</div>

<div class="box2">Two</div>

<div class="box3">Three</div>

<div class="box4">Four</div>

<div class="box5">Five</div>

</div>

Nếu tôi muốn các mục Flex lấp đầy toàn bộ container, bất kể chế độ xem thay đổi kích thước như thế nào, tôi chỉ cần thêm thuộc tính Flex-Basis trong CSS của tôi. Hãy để Lừa đặt nó thành 1 1 150px để các vật phẩm phát triển và thu nhỏ từ cơ sở linh hoạt của 150 pixel. Ở đây, các CSS mới:

 

   .wrapper {

display: grid;

background-color: gray;

}

Các thuộc tính vật phẩm flex bổ sung là thứ tự, phát triển flex, flex-shrink, cơ sở flex và tự căn chỉnh. Bạn có thể tìm hiểu thêm về họ trong một hướng dẫn đầy đủ về Flexbox trên các thủ thuật CSS.fr unit. The fr unit represents a fraction of the available space in the grid container rather than a set amount and ensures that grid tracks grow and shrink according to the available space. The CSS for my example would now look like this:

 

   .wrapper {

display: grid;

background-color: gray;

grid-template-columns: 1fr, 1fr, 1fr;

}

Lưu ý rằng chúng tôi đã sử dụng thuộc tính cột lưới bản tin để xác định rõ ràng các cột trên lưới của chúng tôi, nhưng chúng tôi không sử dụng các thuộc tính của các hàng lưới lưới để xác định rõ ràng các hàng. Điều đó không có nghĩa là lưới CSS của bạn không có hàng; Nó chỉ có nghĩa là các hàng được xác định ngầm. Bạn có thể đặt kích thước cho các bản nhạc được tạo trong lưới ngầm với các thuộc tính của các tầng tự động và lưới điện lưới.

Hãy nói rằng tôi muốn đảm bảo rằng các bản nhạc được tạo ra trong lưới ngầm của tôi cao 100 pixel. Sau đó, tôi đã thêm các CSS sau đây để kết quả cuối cùng là:

 

   .wrapper {

display: grid;

background-color: gray;

grid-template-columns: 1fr, 1fr, 1fr;

grid-auto-rows: 100px;

}

Cuối cùng, tôi cần đặt năm mục trong thùng chứa lưới. Với CSS GRID, bạn sử dụng các thuộc tính bắt đầu từ cột lưới, kết thúc cột lưới, row-row-row và get-row-end và đặt giá trị thành các dòng lưới khác nhau. Các đường lưới về cơ bản là các dải phân cách ngang và dọc của các vật phẩm con trong lưới. Ví dụ, các đường lưới của lưới ba cột, hai hàng này được đánh số bên dưới:grid-column-start, grid-column-end, grid-row-start and grid-row-end properties and set the value to different grid lines. Grid lines are basically the horizontal and vertical dividers of child items in a grid. The grid lines of this three-column, two-row grid, for example, are numbered below:

Hướng dẫn is css grid better than flexbox? - lưới css có tốt hơn flexbox không?

Nguồn

Vì vậy, nếu tôi muốn Box1 của tôi trải dài từ dòng xa bên trái trên lưới đến bên phải, thì tôi sẽ đặt nó lên dòng cột một và kéo dài đến dòng thứ tư. Và, nếu tôi muốn nó kéo dài một rãnh hàng ngầm, thì tôi sẽ bắt đầu nó ở dòng hàng một và kết thúc nó ở dòng hàng hai, như được hiển thị bên dưới. Tôi cũng có CSS ​​đến Style Box2 và Box4.box2 and box4.

 

   .box1 {

grid-column-start: 1;

grid-column-end: 4;

grid-row-start: 1;

grid-row-end: 2;

}

.box2 {

grid-column-start: 1;

grid-row-start: 2;

grid-row-end: 4;

}

.box4 {

grid-column-start: 2;

grid-row-start: 2;

grid-row-end: 4;

}

Kết quả sẽ là:

Hướng dẫn is css grid better than flexbox? - lưới css có tốt hơn flexbox không?

Nguồn

Vì vậy, nếu tôi muốn Box1 của tôi trải dài từ dòng xa bên trái trên lưới đến bên phải, thì tôi sẽ đặt nó lên dòng cột một và kéo dài đến dòng thứ tư. Và, nếu tôi muốn nó kéo dài một rãnh hàng ngầm, thì tôi sẽ bắt đầu nó ở dòng hàng một và kết thúc nó ở dòng hàng hai, như được hiển thị bên dưới. Tôi cũng có CSS ​​đến Style Box2 và Box4.

Kết quả sẽ là:

Bạn có thể nhấp vào liên kết nguồn để xem những gì tôi đã sử dụng để tạo kiểu cho các mục lưới. Nó từ ví dụ Flexbox ở trên.

 

   <div class="flex-container">

<div>1</div>

<div>2</div>

<div>3</div>

<div>4</div>

<div>5</div>

<div>6</div>

</div>

0

Hệ thống lưới bootstrap

 

   <div class="flex-container">

<div>1</div>

<div>2</div>

<div>3</div>

<div>4</div>

<div>5</div>

<div>6</div>

</div>

1

Bây giờ, hãy để nói rằng tôi muốn thực hiện một hàng với hai cột, một cột có chiều rộng đầy đủ và một cột có chiều rộng một nửa để họ xếp chồng lên nhau trên thiết bị di động. Ở đây, HTML:

 

   <div class="flex-container">

<div>1</div>

<div>2</div>

<div>3</div>

<div>4</div>

<div>5</div>

<div>6</div>

</div>

2

Hãy nói rằng tôi muốn tạo một hàng khác với ba cột chiếm một nửa chế độ xem trên thiết bị di động và một phần ba trên máy tính để bàn.

Hướng dẫn is css grid better than flexbox? - lưới css có tốt hơn flexbox không?

Nguồn

Vì vậy, nếu tôi muốn Box1 của tôi trải dài từ dòng xa bên trái trên lưới đến bên phải, thì tôi sẽ đặt nó lên dòng cột một và kéo dài đến dòng thứ tư. Và, nếu tôi muốn nó kéo dài một rãnh hàng ngầm, thì tôi sẽ bắt đầu nó ở dòng hàng một và kết thúc nó ở dòng hàng hai, như được hiển thị bên dưới. Tôi cũng có CSS ​​đến Style Box2 và Box4.

Kết quả sẽ là:

Hướng dẫn is css grid better than flexbox? - lưới css có tốt hơn flexbox không?

CSS Grid hay Flexbox nào tốt nhất?

Sự khác biệt chính là bạn có thể sử dụng lưới CSS để tạo bố cục hai chiều. Ngược lại, bạn chỉ có thể sử dụng Flexbox để tạo bố cục một chiều. Điều đó có nghĩa là bạn có thể đặt các thành phần dọc theo trục X và Y trong lưới CSS và chỉ có một trục trong Flexbox.you can use CSS Grid to create two-dimensional layouts. In contrast, you can only use Flexbox to create one-dimensional layouts. That means you can place components along the X- and Y-axis in CSS Grid and only one axis in Flexbox.

Tôi có nên sử dụng Grid hay Flexbox 2022 không?

Lưới là tốt nhất cho bố cục hai chiều với nhiều yếu tố cần được định vị chính xác so với nhau.Flexbox tốt hơn cho bố cục một chiều hoặc một dòng, nơi bạn chỉ cần không gian một loạt các yếu tố theo một cách nhất định.

Flexbox hay lưới nào dễ dàng hơn?

Lưới được tạo cho bố cục hai chiều trong khi Flexbox dành cho một.Điều này có nghĩa là Flexbox có thể hoạt động trên hàng hoặc cột tại một thời điểm, nhưng lưới có thể hoạt động trên cả hai.Flexbox, cung cấp cho bạn sự linh hoạt hơn trong khi làm việc trên một trong hai phần tử (hàng hoặc cột).Đánh dấu HTML và CSS sẽ dễ dàng quản lý trong loại kịch bản này.Flexbox, gives you more flexibility while working on either element (row or column). HTML markup and CSS will be easy to manage in this type of scenario.

Lưới có chậm hơn Flexbox không?

Không có sự khác biệt có thể nhìn thấy giữa hai bố cục.Từ điểm chuẩn này, chúng ta có thể thấy rằng các màn trình diễn giữa hai thuật toán là rất giống nhau và do đó không có ưu thế rõ ràng của cái này so với cái kia.. From this benchmark we can see that the performances between the two algorithms are very similar and therefore there is no clear superiority of one over the other.