Giới thiệu về Bố cục lưới CSS. Cách tạo bố cục lưới CSS đáp ứng. Chỉ định khu vực mẫu và thử nghiệm

Chúng tôi sẽ cho bạn biết cách CSS Grid cho phép bạn tạo đánh dấu phản hồi chất lượng cao mà không cần dùng đến các khung của bên thứ ba như Bootstrap.

Lưới gốc cung cấp nhiều lợi thế hơn các khung, đặc biệt là khi so sánh với khung phổ biến nhất trong số chúng: Bootstrap. Vì CSS hiện đại cho phép bạn tạo các đánh dấu phức tạp mà không cần JavaScript nên mã của bạn sẽ sạch hơn và dễ bảo trì hơn.

Đánh dấu có thể đơn giản hơn

Thay thế Bootstrap bằng CSS Grid sẽ làm được HTML sạch hơn. Ví dụ: hãy xem xét một phần nhỏ của trang mà chúng ta phải bố cục, nó trông như thế này:

Khởi động

Trước tiên, hãy xem mã ví dụ cho trang này trong Bootstrap.

Có một số điều cần chú ý:

— Mỗi hàng phải được đặt trong div riêng của nó.
- Bạn phải sử dụng tên lớp để tạo đánh dấu (col-xs-2).
— Khi mẫu phát triển và trở nên phức tạp hơn, điều tương tự cũng sẽ xảy ra với mã HTML.

Nếu chúng ta nói về khả năng phản hồi, đánh dấu sẽ còn tệ hơn:

Lưới CSS

Bây giờ chúng ta hãy xem ví dụ tương tự về đánh dấu trong CSS thuần túy:

Đánh dấu này dễ đọc hơn nhiều. Sự lộn xộn của các lớp không còn nữa và số lượng div đã giảm đi.

Tất nhiên, không giống như ví dụ với Bootstrap được kết nối với trang, ở đây bạn cần tự mình mô tả các kiểu:

Linh hoạt hơn

Hãy làm việc dựa trên khả năng thích ứng. Ví dụ: hãy xóa MENU khỏi hàng đầu dành cho màn hình di động. Nói cách khác, hãy thay đổi điều này:

Lưới CSS

Việc xây dựng lại lưới CSS rất dễ dàng. Tất cả những gì bạn cần làm chỉ đơn giản là thêm truy vấn phương tiện và mô tả điều gì sẽ xảy ra với các thành phần trang.

Bằng cách này, bạn thậm chí không cần phải mở HTML để thiết kế lại trang.

Khởi động

Nếu nhà phát triển cần thay đổi điều gì đó trong mẫu Bootstrap, anh ta sẽ phải bắt đầu bằng cách thay đổi chính HTML. Trên thực tế, bạn cần di chuyển MENU sao cho nó ở trên HEADER.

Trong trường hợp này, việc chỉ thay đổi hành vi của kiểu trong truy vấn phương tiện sẽ không hiệu quả. Để giải quyết vấn đề này, bạn cần dùng đến JavaScript.

Không còn giới hạn 12 cột

Không phải đây là hạn chế nghiêm trọng nhưng trong một số trường hợp nó gây ra sự bất tiện. Bởi vì Lưới khởi động về cơ bản được chia thành 12 cột, các vấn đề có thể phát sinh khi chia, ví dụ: thành 5, 7 hoặc 9 cột.

CSS Grid cho phép bạn tạo bao nhiêu cột liên tiếp tùy ý.

Điều này được thực hiện bằng cách đặt giá trị của thuộc tính Grid-template-columns:

Nhân tiện, nó sử dụng flexbox, điều này cũng cho phép bạn dễ dàng quản lý đánh dấu thông qua CSS, nhưng trên khoảnh khắc này Nó thậm chí còn chưa hết beta.

Hỗ trợ trình duyệt

Vào thời điểm viết bài này, 75% trình duyệt hỗ trợ CSS Grid.

Không có gì ngăn cản nhiều nhà phát triển bắt đầu sử dụng CSS Grid ngay bây giờ, nhưng thật không may, không phải tất cả các dự án đều sẵn sàng hoạt động với phương pháp bố cục này. Tuy nhiên, nhiều nhà phát triển nổi tiếng, chẳng hạn như Morten Rand-Eriksen của LinkedIn và Jen Simmons của Mozilla, tin chắc rằng phương pháp thiết kế trang này là tương lai: cách trình bày trực quan phải được tách biệt khỏi logic JavaScript và thích ứng độc lập với nó.

Trong bài viết này bạn sẽ tìm thấy khóa học đầy đủ bằng lưới CSS. Chúng ta sẽ xem nó là gì, sự khác biệt với FlexBox là gì và cách bạn có thể làm việc với CSS Grid.

Lưới CSS là cách tiếp cận mớiđể tạo các trang web thích ứng với nhiều khối nằm ở bất kỳ đâu trên trang web. Bên cạnh đó Lưới CSS Ngoài ra còn có một công nghệ rất giống với mắt lưới. Chúng tôi sẽ không đi sâu vào những khác biệt nhỏ nhất giữa chúng, vì điều này sẽ cần một bài viết riêng, nhưng chúng tôi sẽ mô tả ngắn gọn những khác biệt chính.

Lưới CSS có thể gọi là phiên bản ngầu hơn và cải tiến hơn FlexBox, vì FlexBox cho phép bạn chỉ làm việc trên một mặt phẳng: tạo cột hoặc tạo hàng.

Lưới CSS cho phép bạn làm được nhiều việc hơn vì chúng hoạt động trên cả hai mặt phẳng cùng một lúc. Do đó, việc tạo các khối trang web thích ứng dễ dàng hơn nhiều và khả năng sắp xếp các đối tượng theo ý muốn đơn giản là vô tận.

Mời bạn xem video đầy đủ về cách học CSS Grid để hiểu ngay bản chất Lưới CSS:


  • Bài học về ;

Trong bài học, ba trang đã được tạo, mã cho mỗi trang có thể được sao chép bên dưới.

tập tin đầu tiên

Lưới CSS
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Minima animi, tạm thời. Vitae consectetur voluptatevente soluta totam iste dicta neque nesciunt a! Sự cố chất lỏng quae Eveniet blanditiis, laudantium giả định nda natus doloribus, fuga mollitia debitis dolorem, soluta asperiores accusamus. Qui, necessitatibus autem doloremque corporis eligendi dolorum natus, eius aperiam consequatur aliquid, quaerat ngoại trừuri sequi đẩy lùi, tạm thời kiêm sed velit. Một sự kích động lao động làm việc quibusdam consequatur quas harum unde sint sint trừ, molestiae quo?
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nghi ngờ, nostrum animi, aliquid consequuntur iusto esse nulla accusamus commododi perferendis deserunt ipsa quidem, illo quam minima aspernatur vero natus?

Tệp thứ hai

Lưới CSS
Lorem ipsum dolor sit amet, consectetur adipisicing elit.
Lorem ipsum.
Lorem ipsum.
Lorem ipsum.
Lorem ipsum.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Repellendus magni atque nostrum deleniti magnam unde ad, expedita perferendis labum aut, pariatur delectus. Deleniti dolores consequuntur sed iurerationne, laudantium exerciteem perferendis reprehenderit delectus aperiam fugiat rerum Earum quidem facere aspernatur ipsam harum. Trừ bí danh sequivente aspernatur expedita, odio nemo corporis consectetur labe, voluptas quasi.
Lorem ipsum dolor sit amet, consectetur adipisicing elit.
Lorem ipsum dolor sit amet, consectetur adipisicing elit.
Lorem ipsum dolor sit amet, consectetur adipisicing elit.
Lorem ipsum dolor sit amet, consectetur adipisicing elit.

Tệp thứ ba

Lưới CSS
Hộp 1
Hộp 2
Hộp 3
Hộp 4
Hộp 5
Hộp 6

Nguyên lý hoạt động

Làm việc với lưới rất đơn giản. Thuật toán hành động ở đây như sau:

  1. Chúng tôi tạo một khối chính và đặt các khối khác vào đó ( phần);
  2. Thêm thuộc tính display:grid vào khối chính;
  3. Thuộc tính lưới CSS hiện có thể được áp dụng cho tất cả các thành phần khối chính;
  4. Thêm các thuộc tính khác nhau. Bạn có thể tìm thấy tài liệu về tất cả các thuộc tính có thể có;

Mỗi khối có thể được đặt theo chiều rộng, chiều cao và vị trí. Các khối được tạo dựa trên lưới ngay lập tức có thiết kế thích ứng, giúp điều chỉnh các khối theo các độ phân giải màn hình khác nhau.

Bằng cách này bạn có thể viết ít hơn và nhận được nhiều hơn. Còn gì tuyệt vời hơn nữa? Chia sẻ kinh nghiệm sử dụng lưới trong dự án của bạn trong phần bình luận cho bài viết này

Bài viết này cho thấy cách so sánh này công nghệ mới, nó hoạt động chứ không chỉ là mô tả các thuộc tính với các ví dụ hời hợt.

Bản thân bài viết này là bản dịch tăng cường đáp ứng của CSS Grid Tutorial

Mô-đun CSS Grid được Nhóm làm việc CSS phát triển để cung cấp cách tốt nhất để tạo mẫu trong CSS. Nó đã được đưa vào Khuyến nghị của Ứng viên vào tháng 2 năm 2017 và các trình duyệt chính bắt đầu hỗ trợ nó vào tháng 3 năm 2017.

CSS Grid sẽ sớm trở thành một phần không thể thiếu trong bộ công cụ của bất kỳ nhà phát triển front-end nào. Và nếu bạn là một trong số họ, thì bạn sẽ phải học CSS Grid — đây gần như chắc chắn sẽ là một kỹ năng không thể thương lượng đối với bất kỳ vị trí phát triển front-end nào.

Với chức năng mạnh mẽ và cú pháp trực quan này, các mẫu lưới chắc chắn sẽ thay đổi cách xây dựng web.

Giới thiệu

Lưới CSS là người mẫu mới mẫu, được tối ưu hóa cho các mẫu hai chiều. Đó là mô hình lý tưởng cho các mẫu trang web, biểu mẫu, phòng trưng bày và bất kỳ thứ gì yêu cầu định vị chính xác và đáp ứng.

Với sự phát triển của web ở những năm trước, việc phát triển các mẫu trang web ngày càng trở nên khó khăn. TRONG những năm đầu web, bảng HTML thường được sử dụng cho các mẫu, biểu mẫu nhiều cột, v.v. Nhưng phương pháp này có nhược điểm của nó. Điều này có nghĩa là bản trình bày phải được thực hiện ở cấp độ đánh dấu, do đó không có sự phân biệt giữa bản trình bày và nội dung. Trên thực tế, các bảng được tạo ra để chứa dữ liệu dạng bảng chứ không phải để tạo mẫu. Và không cần chạm vào vấn đề ngữ nghĩa, các mẫu bảng không được tạo cho thiết kế đáp ứng.

Floats cuối cùng đã thay thế các mẫu bảng như một phương pháp được chấp nhận và đề xuất rộng rãi để tạo mẫu, vì nó cho phép chúng ta định vị các phần tử một cách độc lập với bố cục. Tuy nhiên, cho đến nay phương pháp này được coi là một cải tiến đáng kể trên nền bố cục dạng bảng, nó cũng có những hạn chế của nó. Phao được thiết kế chủ yếu cho các mẫu tài liệu và không phù hợp với các mẫu ứng dụng phức tạp hiện phổ biến trên web. Các phần tử nổi khó kiểm soát, đặc biệt là trên các thiết bị và khung nhìn kích cỡ khác nhau. Điều này dẫn đến nhiều vụ hack giống như lưới khác nhau đã trở thành tiêu chuẩn, hầu hết chúng đều yêu cầu đánh dấu bổ sung làm mất đi toàn bộ khái niệm tách nội dung. Vì vậy Nhóm làm việc CSS đang tìm kiếm một giải pháp tốt hơn.

Mô hình CSS Grid giải quyết những vấn đề này và hơn thế nữa. Nó cho phép bạn tạo các mẫu nâng cao trong một khoảng thời gian ngắn mà bạn sẽ dành cho chúng với các nhóm và ít mã hóa hơn.

Nhưng tất nhiên người ta có thể sử dụng những nghĩa khác nhau, chẳng hạn như 100px , 7em , 30%, v.v. Bạn cũng có thể gán tên cho chuỗi cùng với kích thước của chúng.

cột-mẫu-cột: 1fr 1fr 1fr

Tương tự như trên, chỉ xác định các cột trong lưới.

Để lộ một khoảng trống. Đó là khoảng cách giữa các phần tử lưới. Ở đây, chúng tôi sử dụng đơn vị chiều dài vw, tương ứng với chiều rộng của khung nhìn, nhưng chúng tôi cũng có thể sử dụng 10px, 1em, v.v. Thuộc tính Grid-gap là viết tắt của Grid-row-gap và Grid-column-gap của cải.

Chà, phần còn lại của mã chỉ đơn giản là gán những phong cách khác các phần tử lưới.

#lưới >

hàm lặp lại()

Bạn có thể sử dụng hàm lặp lại() để thực hiện các khai báo lặp lại về giá trị kích thước của một phần tử. Ví dụ: thay vì làm điều này:

Hàng mẫu lưới: 1fr 1fr 1fr 1fr 1fr;

Chung ta co thể lam được việc nay:

Lưới-mẫu-hàng: lặp lại (5, 1fr);

Điều này sẽ làm giảm đáng kể số lượng mã bạn cần viết, đặc biệt nếu bạn đang làm việc với các lưới lớn và lặp lại.

Tạo mẫu trang web bằng lưới CSS

Lưới bao gồm cú pháp "đồ họa ASCII" trực quan trong đó bạn hầu như có thể "nhìn thấy" mẫu trong mã, giúp bạn dễ dàng tạo và sửa đổi mẫu của mình. Ngay cả những thay đổi đáng kể có thể được thực hiện trong vài giây. Cú pháp trực quan này cũng giúp với thiết kế web đáp ứng. Tạo các mẫu khác nhau cho các thiết bị khác nhau trở nên dễ dàng hơn khi sử dụng lưới.

Bây giờ chúng ta hãy tạo một mẫu trang web trông như thế này:

Và đây là mã cho mẫu này:

Ví dụ

tiêu đề
Bài báo
Quảng cáo
Chân trang

Chúng ta hãy xem xét kỹ hơn mã của chúng tôi. Đánh dấu HTML trông như thế này:

tiêu đề
Bài báo
Quảng cáo
Chân trang

Và vì vậy chúng tôi sẽ làm vùng chứa lưới, vì vậy tất cả các phần tử khác đều trở thành phần tử lưới.

Bây giờ hãy nhìn vào đồ họa ASCII mà chúng ta đã nói đến trước đây.

Grid-template-areas: “tiêu đề tiêu đề tiêu đề” “quảng cáo bài viết điều hướng” “chân trang chân trang chân trang”;

Phần này xác định mẫu của chúng tôi. Chỉ cần nhìn vào code chúng ta có thể thấy đó là một lưới 3x3 (ba hàng và ba cột). Điều này mang lại cho chúng ta năm vùng lưới trên chín ô lưới, vì một số vùng lưới trải rộng trên nhiều ô.

Chúng ta cũng thấy tiêu đề chiếm toàn bộ hàng đầu tiên trong số 3 ô, còn chân trang chiếm toàn bộ hàng dưới cùng, cũng chiếm 3 ô. Các phần điều hướng, nội dung và quảng cáo đều chia sẻ không gian ở hàng thứ hai, trong đó mỗi phần tử này có một ô.

Bây giờ chúng ta có thể gán từng vùng lưới này cho từng phần tử:

#pageHeader ( vùng lưới: tiêu đề; ) #pageFooter ( vùng lưới: chân trang; ) #mainArticle ( vùng lưới: bài viết; ) #mainNav ( vùng lưới: nav; ) #siteAds ( vùng lưới: quảng cáo; )

Thuộc tính vùng lưới là thuộc tính tốc ký cho phép bạn đặt các phần tử lưới trên lưới. Trong trường hợp của chúng tôi, chúng tôi chỉ tham chiếu đến các tên mà chúng tôi đã chỉ định trước đó trong vùng mẫu lưới.

Hầu hết các mẫu đã được hoàn thành. Phần còn lại của mã sẽ chỉ xử lý các kích thước, không gian và chiều cao, nói chung là một khu vực trang trí nhiều hơn.

Đoạn mã sau cung cấp kích thước của hàng và cột:

Lưới-mẫu-hàng: 60px 1fr 60px; lưới-mẫu-cột: 20% 1fr 15%;

Dòng đầu tiên và dòng thứ ba đều cao 60px và dòng thứ hai chiếm toàn bộ không gian còn lại.

Cột đầu tiên là 20% và cột thứ ba là 15%. Cái thứ hai chiếm hết không gian còn lại.

Thay đổi mẫu

Bạn có thể thay đổi mẫu một cách đơn giản bằng cách sắp xếp lại các vùng lưới trong Grid-template-areas .

Vì vậy, nếu chúng ta thay đổi điều này:

Grid-template-areas: “tiêu đề tiêu đề điều hướng” “quảng cáo bài viết điều hướng” “quảng cáo chân trang điều hướng”;

Kết quả là chúng ta có được mẫu sau:

Tuy nhiên, bạn có thể cần điều chỉnh kích thước nếu bạn di chuyển lưới nhỏ hơn đến vị trí lớn hơn.

Ví dụ: để làm điều này:

Điều hướng hiện chiếm không gian chứa nội dung, do đó kích thước đã được điều chỉnh. Nếu không, chúng ta sẽ có nội dung thu hẹp và điều hướng rộng. Vì vậy, mã bây giờ trông như thế này.

Grid-template-areas: “header header header” “quảng cáo điều hướng bài viết” /* Trước đó có “quảng cáo điều hướng bài viết” */ “footer footer footer”; lưới-mẫu-hàng: 60px 1fr 60px; lưới-mẫu-cột: 1fr 20% 15%; /* Trước đó là '20% 1fr 15%' */

Tạo lưới thích ứng

Mẫu lưới có các giá trị như tự động điền và tự động điều chỉnh cho phép bạn tạo một lưới có nhiều rãnh có kích thước nhất định sẽ vừa với một vùng chứa. Điều này có thể có nghĩa là lưới phản hồi nhanh, nghĩa là các phần tử thay đổi vị trí khi bạn thay đổi kích thước cửa sổ trình duyệt.

Ví dụ về sử dụng Tự động điền:

Ví dụ

1
2
3
4
5
6
7
8
9

Đây là kết quả:

Mã chịu trách nhiệm cho việc này:

Cột mẫu lưới: lặp lại (tự động điền, minmax (150px, 1fr));

Trong đó, các cột có kích thước tối thiểu là 150px và tối đa không gian còn lại. Những bản nhạc như vậy sẽ được lặp lại nhiều lần nếu cần thiết để vừa với thùng chứa.

Hàm Repeat() lặp lại định nghĩa bản nhạc theo số lần được chỉ định bởi tham số đầu tiên. Việc sử dụng tính năng tự động điền sẽ khiến các bản nhạc lặp lại nhiều lần nhất có thể cho đến khi lấp đầy vùng chứa.

Kích thước của các bản nhạc này được chỉ định trong tham số thứ hai. Trong trường hợp của chúng tôi, chúng tôi sử dụng minmax(150px, 1fr) để chỉ ra rằng kích thước cột tối thiểu là 150px và tối đa là 1fr.

Tự động điều chỉnh

tính năng tự động điều chỉnh hoạt động giống như tính năng tự động điền. Sự khác biệt duy nhất ở đây là tính năng tự động điều chỉnh sẽ tập hợp tất cả các bản nhạc trống ở cuối vị trí, trong khi tính năng tự động điền thì không. Cách tốt nhất ở đây là trình diễn bằng so sánh.

Ví dụ

1
2
1
2

Sử dụng hai phần tử lưới nhỏ ở đây sẽ giúp thể hiện được toàn bộ ý tưởng công việc. Tính năng tự động điền để lại các rãnh trống ở cuối theo kích thước đã chỉ định và tính năng tự động điều chỉnh sẽ kéo dài rãnh trống, dẫn đến các rãnh được lấp đầy bằng các phần tử bị kéo dài để lấp đầy khoảng trống.

Lưới có truy vấn phương tiện

Một trong những điểm mạnh của lưới là bạn có thể tạo một mẫu hoàn toàn khác chỉ trong vài giây.

Điều này làm cho lưới trở nên lý tưởng cho các truy vấn phương tiện. Chúng ta có thể chỉ cần gán lại các giá trị trong đồ họa ASCII và gói kết quả vào một truy vấn phương tiện.

Ví dụ

tiêu đề
Bài báo
Quảng cáo
Chân trang

Đây là mẫu ba cột trên khung nhìn lớn và được nén thành một cột duy nhất trên các thiết bị nhỏ. Vì vậy, ví dụ này sẽ trông khác nhau tùy thuộc vào kích thước màn hình. Trong mọi trường hợp, đây là mã có liên quan cho mẫu ba cột cho chế độ xem rộng.

Grid-template-areas: “tiêu đề tiêu đề tiêu đề” “quảng cáo bài viết điều hướng” “chân trang chân trang chân trang”;

Và đây là mã tương ứng cho phiên bản di động:

Khu vực mẫu lưới: “tiêu đề” “bài viết” “quảng cáo” “điều hướng” “chân trang”;

Vì vậy, toàn bộ vấn đề là gán lại các giá trị trong thuộc tính Grid-template-areas.

Trong trường hợp của chúng tôi, chúng tôi đã gói phiên bản di động trong một truy vấn phương tiện, như thế này:

@media all và (max-width: 575px) ( body ( Grid-template-areas: “tiêu đề” “bài viết” “quảng cáo” “nav” “chân trang”; lưới-template-rows: 80px 1fr 70px 1fr 70px; lưới- cột mẫu: 1fr; ) )

Xin lưu ý rằng chúng tôi cũng đã điều chỉnh các giá trị trong Grid-template-rows và Grid-template-columns để phù hợp với mẫu mới. Đặc biệt, chỉ nên có một cột và nó sẽ chiếm hết dung lượng trống. Và vì tất cả các phần tử lưới sẽ nằm trong một đống nên chúng tôi sẽ chỉ định 5 hàng và xác định chiều cao của chúng.

Kết hợp lưới với khối

Tùy thuộc vào yêu cầu mẫu của bạn, không có gì ngăn cản bạn thay đổi phiên bản di động thành display: block . Như ở đây:

@media all và (độ rộng tối đa: 575px) ( body ( display: block; ) )

Điều này sẽ hoạt động tương tự như trong ví dụ trên, nhưng theo mặc định, các phần tử sẽ xuất hiện theo thứ tự ban đầu. Trong ví dụ trên, phiên bản di động có điều hướng bên dưới quảng cáo, nhưng nếu chúng ta sử dụng display: block thì điều hướng sẽ ở trên quảng cáo.

Cũng bằng cách sử dụng phương pháp này, bạn cũng có thể cần thêm một số phần đệm để bù đắp cho việc thiếu khoảng trống có trong phiên bản lưới.

Lưới rõ ràng và ẩn

CSS Grid sử dụng khái niệm lưới rõ ràng và lưới ẩn. Đây là khái niệm quan trọng mà bạn cần phải cẩn thận khi tạo lưới, nếu không bạn sẽ có một loạt hàng và cột mà bạn không bao giờ ngờ tới.

Lưới rõ ràng là một lưới mà bạn xác định trong các hàng mẫu lưới, cột mẫu lưới và các vùng mẫu lưới.

Tuy nhiên, bạn vẫn có thể có các phần tử không vừa với lưới được xác định "rõ ràng" của mình. Ví dụ: bạn đã xác định một lưới chỉ có thể chứa sáu phần tử, nhưng bản thân vùng chứa thực sự được tạo thành từ chín phần tử. Chỉ có sáu phần tử sẽ phù hợp với lưới rõ ràng và ba phần tử sẽ vẫn còn. Và đó là lúc các lưới tiềm ẩn xuất hiện.

Lưới ngầm được tạo tự động bởi bộ chứa lưới bất cứ khi nào các phần tử lưới nằm bên ngoài lưới rõ ràng. Vùng chứa tạo các rãnh lưới ẩn bằng cách thêm các hàng ẩn vào lưới. Những đường này, cùng với các lưới rõ ràng, tạo thành các lưới ẩn. Đây là một ví dụ:

Ví dụ

1
2
3
4
5
6

Trong ví dụ này, chúng tôi xác định rõ ràng hai hàng và hai cột sẽ chứa bốn thành phần lưới. Tuy nhiên, có sáu phần tử lưới, do đó, một lưới ẩn đã được tạo ra để chứa hai phần tử bổ sung.

Và điều này rất tốt. Nếu lưới ngầm chưa được tạo thì hai yếu tố bổ sung sẽ tạo ra một mớ hỗn độn hoàn toàn trong lưới.

Đặt kích thước rãnh cho lưới ngầm

Bạn có thể nhận thấy rằng hàng phụ không cao bằng hai hàng trước. Điều này là do chúng tôi đặt chiều cao hàng trong thuộc tính Grid-template-rows nhưng nó chỉ áp dụng cho các lưới rõ ràng. Chiều cao hàng trên lưới ngầm phải được đặt bằng thuộc tính Grid-auto-rows. Nhưng vì chúng tôi không làm điều này nên hóa ra hàng ẩn sử dụng kích thước bản nhạc tự động, kích thước này dựa trên nội dung. Đây là cách đặt các thuộc tính để đặt kích thước bản nhạc:

Nói chung nó diễn ra như thế này:

Lưới rõ ràng sử dụng các hàng mẫu lưới và cột mẫu lưới

Lưới ngầm sử dụng các hàng tự động lưới và cột tự động lưới

Ví dụ

Trong trường hợp này chúng ta không cần phải chỉ định giá trị cuối cùng trên phần tử đầu tiên vì nó chỉ bao gồm một bản nhạc. Điều tương tự cũng có thể nói về phần tử lưới thứ hai. Theo mặc định, nếu bạn không chỉ định dòng kết thúc, phần tử sẽ chỉ kéo dài một rãnh.

Trên thực tế, chúng tôi không cần chỉ định bất kỳ vị trí nào cho phần tử lưới đầu tiên, vì nó ở một vị trí nhất định nên dù sao thì nó cũng đã ở đó. Nhưng nếu chúng ta không chỉ định vị trí cho phần tử thứ hai thì nó sẽ nằm ngay sau phần tử đầu tiên, chỉ chiếm 1 track.

Đặt tên đường lưới

Bạn cũng có thể đặt tên cho các đường lưới để dễ tham khảo hơn. Điều này có thể được thực hiện bằng cách đặt các thuộc tính Grid-template-rows và Grid-template-columns, ví dụ như ở đây:

#grid ( display: Grid; /* Đặt các bản nhạc và đặt tên cho các dòng */ Grid-template-rows: 50px 1fr 80px ; Grid-template-columns: 120px 1fr 80px ; Grid-gap: 5px; Height: 90vh; ) . .. /* Bây giờ hãy tham khảo những dòng được đặt tên đó */ #item2 ( Grid-row-start: row3-start; Grid-column-start: col2-start; Grid-row-end: row3-end; Grid-column-end : col3 -end; )

Các dòng được đặt tên có thể rõ ràng hoặc ẩn. Các dòng được đặt tên ngầm định được tạo bất cứ khi nào bạn tạo các vùng lưới được đặt tên bằng cách sử dụng Grid-template-areas .

Tên được lấy từ vùng lưới với -start và -end được thêm vào ở cuối, tùy thuộc vào đó là đầu hay cuối dòng.

Do đó, đối với mỗi vùng lưới có tên là tiêu đề, bốn dòng ẩn sẽ được tạo. Hai cái được đặt tên là header-start và cột-start trong vùng lưới được đặt tên và hai cái được đặt tên tương ứng là header-end.

Các vùng lưới được đặt tên

Các vùng lưới có thể được đặt tên trong thuộc tính Grid-template-areas của chính vùng chứa lưới. Đây là những gì chúng tôi đã làm trước đây khi tạo mẫu trang web. Để khôi phục cái này trong bộ nhớ, nó trông như thế này:

#grid ( display: Grid; /* Đặt tên cho vùng lưới */ Grid-template-areas: “a a” “b c”; ... ) ... /* Bây giờ áp dụng từng thành phần lưới cho vùng lưới được đặt tên */ # a ( diện tích lưới: a; ) #b ( diện tích lưới: b; ) #c ( diện tích lưới: c; )

Bạn có thể chỉ ra một ô trống bằng cách sử dụng dấu chấm (.) hoặc một chuỗi dấu chấm không có dấu cách. Ví dụ:

Các vùng mẫu lưới: “a a” “. b"; Hoặc các vùng mẫu lưới: “tiêu đề tiêu đề” “... nội dung”;

Thuộc tính vị trí lưới

Có ba thuộc tính ngắn có thể được sử dụng thay cho thuộc tính bố cục lưới dài được đề cập trong các ví dụ trên. Đây là nơi tất cả họ đều phù hợp.

vùng lưới - Thuộc tính này là viết tắt của:

cột lưới - Thuộc tính này là viết tắt của:

lưới-cột-bắt đầu — cho biết dòng cột nào của phần tử lưới đang bắt đầu và nó mở rộng đến bao nhiêu rãnh.

Grid-column-end  — cho biết phần tử lưới kết thúc ở dòng cột nào và nó mở rộng đến bao nhiêu rãnh.

Grid-row — thuộc tính này là viết tắt của:

lưới-hàng-bắt đầu — cho biết phần tử lưới bắt đầu từ dòng hàng nào và nó mở rộng đến bao nhiêu rãnh.

Grid-row-end  - cho biết dòng hàng nào sẽ là dòng cuối cùng của phần tử và nó sẽ kéo dài bao nhiêu rãnh.

Bạn cũng có thể sử dụng thuộc tính Grid-auto-flow, đã được đề cập ở chương trước. Nó chỉ định cách đặt các phần tử lưới được đặt tự động trong lưới. Các phần tử được đặt tự động là những phần tử không được đặt rõ ràng bằng cách sử dụng bất kỳ thuộc tính nào ở trên.

Tạo một lưới lồng nhau

Bản thân các phần tử lưới có thể trở thành lưới trong CSS Grid. Nghĩa là, bạn có thể lồng một phần tử lưới vào trong một phần tử lưới khác, từ đó tạo ra một lưới lồng nhau.

Để tạo một lưới lồng nhau như vậy, tất cả những gì bạn phải làm là áp dụng display:grid (hoặc display: inline-grid) cho phần tử lưới và nó sẽ trở thành một lưới. Bạn cũng có thể sử dụng display: subgrid để tạo lưới con. , Làm thế nào điều này xảy ra.

Ví dụ

1
2
3
5
6
7
8

Di sản

Hầu hết các thuộc tính lưới không được kế thừa, điều đó có nghĩa là lưới lồng nhau của bạn sẽ không kế thừa các giá trị của lưới cha của nó. Điều này cho phép bạn thực hiện các thay đổi đối với lưới cha mà không vô tình ảnh hưởng đến lưới con.

Ví dụ: bạn đặt Grid-auto-flow: cột trên lưới cha nhưng bạn không đặt thuộc tính trên lưới lồng nhau. Trong trường hợp này, lưới lồng nhau sẽ được đặt thành hàng vì đó là giá trị ban đầu cho thuộc tính này.

Ví dụ

1
2
3
5
6
7
8

Lưu ý rằng trên lưới cha, các số đi theo chiều dọc xuống các cột thay vì theo chiều ngang dọc theo hàng, nhưng lưới lồng nhau vẫn đi theo chiều ngang dọc theo hàng.

Lưới con

Mô-đun CSS Grid đặt giá trị lưới con cho thuộc tính hiển thị. Tuy nhiên, không phải tất cả các trình duyệt đều hỗ trợ nó. Giá trị này sẽ tỏ ra khá hữu ích.

Lưới con là một lưới lồng nhau nhưng có display: subgrid . Điều này làm cho nó trở thành một loại bộ chứa lưới đặc biệt tham gia vào việc thiết lập kích thước lưới của bộ chứa lưới chính. Nói cách khác, nội dung của lưới con ảnh hưởng đến kích thước của lưới cha, cho phép nội dung được trải rộng trên hai lưới. Dưới đây là một ví dụ về nơi thuộc tính này có thể hữu ích.

Dưới đây là danh sách các yếu tố:

Và đây là CSS, trong đó danh sách là một lưới và các thành phần danh sách là các lưới con.

Ul ( display: lưới; lưới: auto-flow / auto 1fr; ) li ( display: subgrid; lưới-cột: span 2; lề: 0,5em; đường viền: rắn; đệm: 0,5em; ) nhãn ( lưới-cột: 1; ) đầu vào (cột lưới: 2; )

Ví dụ này sẽ hiển thị nhãn và thông tin nhập trong một hàng, có đường viền xung quanh mỗi mục danh sách. Cung cấp cho mỗi thành phần danh sách một lưới con có nghĩa là sẽ không có bất kỳ vấn đề nào với việc căn chỉnh các biểu mẫu đầu vào, bởi vì mỗi thành phần danh sách sẽ tham gia vào việc định hình kích thước của lưới cha.

Biểu mẫu vị trí tự động

Bạn có thể sử dụng lưới rõ ràng làm lợi thế khi tạo biểu mẫu hoặc bất kỳ tập hợp phần tử nào khác yêu cầu căn chỉnh lưới. Ví dụ: bạn có thể sử dụng lưới rõ ràng để tạo biểu mẫu như thế này:

Và khi bạn thêm các thành phần biểu mẫu vào đánh dấu của mình, lưới rõ ràng sẽ thêm các hàng để chứa chúng. Vì vậy, để tạo hình dạng trên cùng, chúng ta cần đánh dấu này.

Không cần đánh dấu bổ sung để sắp xếp mọi thứ một cách chính xác. Và cũng không cần thêm các lớp bổ sung cho các thành phần của biểu mẫu. Chúng tôi chỉ thêm một lớp cho

phần tử, nhưng ngay cả điều này cũng là tùy chọn. Đây là một ví dụ hoạt động:

Ví dụ

Bạn có thể tự động thêm các thành phần biểu mẫu mới và chúng sẽ tự động điều chỉnh cho phù hợp với các thành phần khác vì chúng sẽ được đặt trong một lưới rõ ràng.

Điều này có thể thực hiện được vì chúng tôi đã tự biến biểu mẫu thành một lưới (hiển thị: lưới được áp dụng cho .myForm). Và sau đó họ chỉ ra rằng các nhãn nằm trong một cột và các điều khiển nằm trong một cột khác.

Đây là một ví dụ khác, lần này có nhiều phần tử hơn:

Ví dụ

Bạn cần taxi nào?
Tiện ích bổ sung

Khi các lưới con trở nên phổ biến trong các trình duyệt, sẽ có thể căn chỉnh các phần tử biểu mẫu không phải là hậu duệ trực tiếp của

. Ví dụ: chẳng hạn như danh sách các thành phần biểu mẫu.

Căn chỉnh lưới CSS

Nói chung, hầu hết các thuộc tính căn chỉnh đều hoạt động giống nhau trên các phần tử lưới cũng như trên các phần tử khác. Nhưng cũng có một số thuộc tính căn chỉnh chỉ áp dụng cho lưới và phần uốn cong.

Thuộc tính Align-items chỉ định giá trị căn chỉnh tiêu chuẩn cho tất cả các thành phần lưới tham gia vào vùng chứa lưới trong bối cảnh định dạng của nó.

căn chỉnh các mục: giữa;

Trong ví dụ trên, chúng tôi đang sử dụng căn chỉnh-items: center cho vùng chứa lưới, do đó tất cả các thành phần lưới sẽ được căn chỉnh về tâm của trục khối.

Nhưng vì đây là mặc định nên bất kỳ thành phần lưới nào cũng có thể ghi đè lên nó bằng thuộc tính Align-self.

Thuộc tính tự căn chỉnh

Thuộc tính này căn chỉnh một phần tử trong khối vùng chứa dọc theo trục khối/cột/chéo.

Màu đỏ ( nền: màu cam; chiều cao: 40%; căn chỉnh: đường cơ sở; ) .green ( nền: màu vàng xanh; chiều cao: 60%; ) .blue ( nền: thépblue; chiều cao: tự động; căn chỉnh: căng; )

thuộc tính địa điểm

Thuộc tính này là một cách viết tắt của just-items vàalign-items .

Đặc biệt đối với người dùng trang web, chúng tôi cung cấp bài học thực tế về cách sử dụng hệ thống Lưới 960. Hãy tưởng tượng rằng chúng ta được giao một bản thiết kế bố cục. Đầu tiên, chúng ta phải phác thảo một kế hoạch triển khai cấu trúc trang web và chỉ sau đó mới tiến hành viết mã trực tiếp. Sau khi nghiên cứu bài viết này, bạn sẽ có thể xử lý mọi kiểu tóc cổ điển trong thời gian ngắn nhất và màu tóc tự nhiên trong nhiều năm (không có tóc bạc). Vì vậy, đây là thiết kế của chúng tôi:

1. Tạo lưới

Như bạn đã biết, hệ thống 960 Grid sử dụng toàn bộ các lớp và có sẵn trong một số biến thể (phiên bản 12 cột và 16 cột). Vùng chứa chính, bất kể số lượng cột, sẽ luôn rộng 960px. Đối với thiết kế này, chúng tôi sẽ chọn hệ thống 12 cột. Mỗi khối trong hệ thống 960 Grid có lề ngoài là 0 10px. Điều này đảm bảo cho chúng tôi phần đệm đồng đều, tỷ lệ 20px. Đối với những người đang bối rối bởi kích thước 960px, tôi khuyên bạn nên xem sơ đồ này. Kích thước này là tối ưu cho phần lớn độ phân giải màn hình. Vì vậy, chúng tôi có khả năng tạo các khối có chiều rộng này:

  • 140px
  • 220px
  • 300px
  • 380px
  • 460px
  • 540px
  • 620px
  • 700px
  • 780px
  • 860px
  • 940px

Mỗi kích thước có lớp riêng, tên của nó được đặt theo sơ đồ Grid_X, trong đó X là số cột. Nếu bạn cần khối 960px thì bạn nên chọn lớp Grid_12. Để kích hoạt hệ thống 960 Grid, bạn cần đặt vùng chứa cha thành lớp container_12 hoặc vùng chứa 16. Dưới đây là một ví dụ nhỏ về một trang gồm 3 khối. Chiều rộng của cái đầu tiên bằng chiều rộng 960px, 2 cái còn lại lớn bằng một nửa:

Hãy nhớ rằng khi bạn lấp đầy một hàng bằng các khối có lớp Grid_X, hãy đảm bảo rằng tổng cộng chúng không quá 12. Ví dụ: như chúng ta có - hai khối Grid_6 + Grid_6 = 12. Có thể ít hơn: 6, 4 , 2, v.v. d. Bây giờ chúng ta đã xem qua các nguyên tắc cơ bản, chúng ta có thể bắt đầu bài tập thực tế:

2. Tạo một mô hình

Chúng ta hãy thử xây dựng một sơ đồ về những gì chúng ta cần tạo nên. Trước hết chúng ta cần 2 khối 960px. Một cho logo, một cho điều hướng. Tiếp theo là 2 khối (trên một dòng), dành cho áp phích và bản trình bày trang web, khối phân cách (toàn bộ chiều rộng), 4 cột (trên một dòng), lại là khối phân cách và chân trang. Một cái gì đó như thế này:

Tôi nghĩ sau khi xem hình ảnh bạn đã biết chúng tôi cần những lớp học nào. Hãy tự mình thử chúng, sau đó xem mã bên dưới để xem bạn có nghĩ đúng không:

Hãy nhớ rằng ở cuối mỗi dòng chúng ta cần chèn

để hiển thị bình thường trong tất cả các trình duyệt. Đừng quên đưa CSS 960 Grid vào trang của bạn trong phần đầu.

Vậy là bộ xương đã sẵn sàng, vì vậy đã đến lúc bắt đầu trang trí. Hãy đặt chiều cao và màu nền của các khối phân cách. Chiều cao của khối menu sẽ phụ thuộc vào chính menu đó. Ngoài ra, đừng quên thêm logo của bạn:

Div.spacer ( màu nền: #8FC73E; chiều cao: 1em; ) div#navbar ( màu nền: #8FC73E; phần đệm: 10px 0; )

Đây là những gì chúng ta sẽ nhận được:

Hiện tại chúng tôi không quan tâm đến thông tin chút nào nên bạn có thể chèn nội dung từ đây vào các cột trung tâm trang này. Trước khi làm phần trên, hãy làm phần dưới. Trong thiết kế của chúng tôi, nền chân trang có màu xám. Hiện tại, chúng tôi không thể thực hiện điều này vì nếu bạn còn nhớ, có một số vết lõm giữa các khối sẽ không cho phép chúng tôi sơn hoàn toàn lên khu vực này. Để giải quyết vấn đề này chúng ta hãy di chuyển 3 khối liên quan đến footer thành các khối riêng biệt với id = footer. Một chi tiết nữa: khi chúng ta sử dụng các lớp trong các lớp, sẽ rất tốt nếu đặt các giá trị alpha (để cho biết khối nào sẽ là khối đầu tiên và khối omega - cho khối cuối cùng):

Div#footer ( màu nền: #e5e5e6; )

Hoàn hảo! Chân trang của chúng tôi bây giờ có màu nền. Thêm một số văn bản vào đó và chuyển sang khối điều hướng. Theo tất cả các quy luật của nguyên tắc bố cục hiện đại, điều hướng là một danh sách không đánh số. Thêm mã và kiểu sau:

  • Bài viết
  • chủ đề
  • Về
  • biên tập viên
  • Liên hệ

Div#navbar ul ( kiểu danh sách: không; hiển thị: khối; lề: 0 10px; ) div#navbar ul li ( float: left; lề: 0 1.5em; phông chữ: đậm 1em Arial; )

Mát mẻ! Mọi thứ đang diễn ra tốt đẹp với chúng tôi. Tất cả những gì còn lại là một khối có áp phích và bản trình bày về trang web, nhưng trước khi chúng tôi bắt đầu triển khai chúng, tôi muốn nói vài lời về các khung CSS nói chung.

3. CSS framework sẽ không giải quyết được mọi vấn đề của bạn

Trước khi bắt đầu bố trí thiết kế của mình bằng khung CSS, bạn nên tính đến một số nhược điểm của các hệ thống này. Khi đọc bài viết này, bạn không thể không nhận thấy rằng các quy tắc xây dựng trang rất nghiêm ngặt. Mọi thứ đều có kích thước cố định riêng. Khi bạn thay đổi độ rộng của một khối, bạn phải thay đổi các khối khác. Trong mọi trường hợp, một cái gì đó phải được hy sinh. Ví dụ: bạn sẽ làm gì nếu bạn có thiết kế 1000px và Lưới 960 cho phép bạn tạo chiều rộng tối đa là 960px... Và bạn muốn 1000px! Nếu không có sự thay đổi mã lớn thì điều này không thể thực hiện được. Ví dụ: khách hàng muốn có một trang web rộng hơn hoặc nhà thiết kế không đồng ý với cách triển khai của bạn. Có một vấn đề khác liên quan đến chiều cao của loa. Nếu ba cột có cùng màu nền (như phần chân trang của chúng ta) thì các cột này cần có cùng chiều cao. Một nhược điểm đáng kể khác: việc sử dụng thêm thụt lề và tạo khung dẫn đến phá hủy toàn bộ bố cục. Để thêm những gì cần thiết và không phá hủy bất cứ thứ gì, bạn cần phải bù đắp cho những kích thước đã thêm. Bây giờ tôi sẽ chỉ cho bạn cách. Hãy bắt đầu hoàn thiện phần trên cùng.

4. Phần trên

Trước tiên, hãy giải quyết vấn đề về chiều cao của cột - hãy sửa nó. Tiếp theo, hãy tạo các div trống trong khối này và khối khác. Chúng sẽ chứa thông tin hình ảnh hoặc văn bản. Chúng tôi sẽ không đặt phần đệm bên trong vì... bạn có thể làm đảo lộn tỷ lệ chiều rộng của lưới. Hãy tạo một thụt lề nhỏ bên ngoài cho thẻ p để văn bản trông đẹp mắt.

Trong trường hợp này, tốt hơn là tạo một lớp cho kiểu đó hơn là tạo ID, bởi vì chúng ta cần áp dụng nó cho một số khối. Nếu cần, điều này cũng sẽ cho phép chúng ta thay đổi chiều cao trong 2 lần đếm. Lớp học của chúng ta trông như thế này:

Div.topSection div ( viền: rắn 10px #e5e5e6; chiều cao: 280px; ) div.topSection div p ( lề: 10px; )

Mát mẻ! Hãy xem những gì chúng ta có:

Sẵn sàng để điền vào? Sau đó thêm một số văn bản vào khối bên trái, nhưng đừng lạm dụng nó để không vượt quá chiều cao. Trên thực tế, trong các dự án thực tế, người thiết kế phải tính toán tất cả những điều này (số lượng ký tự đáp ứng kích thước khối); Trước khi chèn hình ảnh vào khối bên phải, bạn cần quyết định kích thước của nó, nếu bạn chưa làm như vậy. Điều này có thể được thực hiện sớm trong quá trình thiết kế hoặc thông qua FireBug. Nhấp vào Kiểm tra. Bấm vào div chúng ta cần. Chọn tab Bố cục. Sau này, bạn sẽ thấy tất cả thông tin bạn cần. Hình ảnh sau đây sẽ giúp bạn:

Trong ảnh chụp màn hình, áp phích có kích thước 360x280. Tìm một hình ảnh và tạo kiểu cho nó:

Img#poster ( chiều rộng: 360px; chiều cao: 280px; )

Đó là tất cả! Mẫu đã sẵn sàng. Bây giờ tất cả những gì còn lại là điền nội dung thực vào đó và đăng trực tuyến:

5. Biết các lựa chọn của bạn

Bây giờ mọi thứ đã sẵn sàng, hãy tóm tắt. Lưới 960 cho phép chúng tôi tán một mẫu trong 15 phút. Mát mẻ? Đúng! Chúng tôi đã thử nghiệm nó trong IE6, IE7 chưa? KHÔNG! Phải? KHÔNG. Điều này chỉ là khởi đầu! Vậy bây giờ là gì? Bây giờ bạn cần cho khách hàng xem và xem phản ứng. Nếu anh ấy hài lòng với điều này thì chúng tôi có thể bắt đầu thử nghiệm, nhưng nếu không, và khách hàng muốn thứ gì đó phức tạp hơn thì anh ấy sẽ phải tự viết mọi thứ lại từ đầu. Tôi sẽ lặp lại nó một lần nữa. Khung CSS không giải quyết được mọi vấn đề. Mặc dù vậy, hàng nghìn nhà phát triển vẫn sử dụng chúng như một công cụ phát triển web thông thường vì giống như bất kỳ công cụ nào, khung CSS có lĩnh vực riêng dành cho ứng dụng rộng rãi. Trong mọi trường hợp, nếu yêu cầu thiết kế không quá cụ thể (80% trường hợp), thì sử dụng 960 Grid bạn có thể tiết kiệm rất nhiều thời gian - và thời gian là tiền bạc!

Từ tác giả: Khi tạo các trang web phức tạp, lưới tạo ra sự khác biệt rất lớn. Tầm quan trọng của chúng trong thiết kế web hiện đại trở nên rõ ràng khi bạn nhìn vào số lượng khuôn khổ mà công nghệ này đã được triển khai để tăng tốc độ phát triển.

Khi bạn đã quen với đặc tả CSS Grid Layout, bạn sẽ không cần các tệp kiểu riêng biệt nếu muốn làm việc với hệ thống lưới. Một lợi ích quan trọng không kém là bạn sẽ không còn dựa vào các thuộc tính nội tuyến và nổi để định vị các thành phần trên trang. Trong hướng dẫn này, chúng ta sẽ tìm hiểu những điều cơ bản về hệ thống lưới và cũng tạo ra một bố cục blog đơn giản.

Hỗ trợ trình duyệt

Hiện tại, chỉ có IE 10+ và Edge hỗ trợ đặc tả Grid Layout, công nghệ này chưa thể được sử dụng trên các trang thương mại.

Trong Chrome, tùy chọn này có thể được kích hoạt thông qua cờ “Tính năng của nền tảng web thử nghiệm” trong chrome://flags. Trong Firefox – cờ bố cục.css.grid.enabled.

Một tùy chọn khác là sử dụng polyfill, và vâng, CSS Grid Polyfill tồn tại! Bạn có thể sử dụng bất kỳ tùy chọn nào trong ba tùy chọn được mô tả và nghiên cứu Bố cục lưới khi nó vẫn đang ở giai đoạn phát triển ban đầu.

Xin lưu ý: IE hiện đang chạy phiên bản thông số kỹ thuật cũ hơn, điều đó có nghĩa là trình duyệt không hỗ trợ đầy đủ thông số kỹ thuật mới. Khi chúng ta xem các ví dụ, tôi khuyên bạn nên sử dụng Chrome hoặc Firefox.

Thuật ngữ hệ thống lưới

Về việc định vị các phần tử, hệ thống CSS Grid là các bảng giống nhau. Tuy nhiên, công cụ này mạnh mẽ và đa dạng hơn nhiều. Trong phần này, tôi sẽ nói về một số thuật ngữ mà bạn cần nhớ khi làm việc với lưới:

Đơn vị đo lường fr: Sử dụng các đơn vị này để đặt lượng không gian trống. Được sử dụng kết hợp với hàng lưới và cột lưới. Từ thông số kỹ thuật: "Việc phân bổ không gian chỉ xảy ra sau khi tất cả" độ dài "hoặc kích thước của hàng và cột nội dung đã đạt đến kích thước tối đa."

Đường: Các đường đánh dấu ranh giới của các phần tử khác. Chúng có cả chiều ngang và chiều dọc. Trong hình bên dưới có 4 đường dọc và 4 đường ngang.

Đường ray: Đường ray là khoảng cách giữa các đường thẳng song song. Trong hình bên dưới có 3 rãnh dọc và 3 rãnh ngang.

Ô: Ô là khối xây dựng của lưới. Chỉ có 9 ô trong hình dưới đây.

Diện tích: Diện tích là một hình chữ nhật có số ô tùy ý. Những thứ kia. một rãnh vừa là một vùng vừa là một ô.

Định vị các phần tử trong lưới

Hãy bắt đầu với những điều cơ bản. Trong phần này, tôi sẽ chỉ cho bạn cách sử dụng lưới để đặt các phần tử ở những vị trí cụ thể. Để làm việc với CSS Grid Layout, bạn cần tạo một phần tử cha và một hoặc nhiều phần tử con. Ví dụ: tôi sẽ lấy phần đánh dấu bên dưới:

MỘT
B
C
D
E
F

< div class = "grid-container" >

< div class = "grid-element item-a" >MỘT< / div >

< div class = "grid-element item-b" >B< / div >

< div class = "grid-element item-c" >C< / div >

< div class = "grid-element item-d" >D< / div >

< div class = "grid-element item-e" >E< / div >

< div class = "grid-element item-f" >F< / div >

< / div >

Để tạo lưới, vùng chứa phải chỉ định các thuộc tính display:grid hoặc display:inline-grid, cũng như các kiểu khác:

Vùng chứa lưới ( display: Grid; Grid-template-columns: 200px 10px 0.3fr 10px 0.7fr; Grid-template-rows: auto 20px auto; )

Lưới - thùng chứa (

hiển thị:lưới;

lưới - mẫu - cột : 200px 10px 0,3fr 10px 0,7fr ;

lưới - mẫu - hàng: tự động 20px tự động;

Thuộc tính Grid-template-columns và Grid-template-rows thiết lập độ rộng của hàng và cột. Trong ví dụ trên tôi đã tạo 5 cột. Cột rộng 10px được sử dụng làm dấu phân cách giữa các phần tử. Cột đầu tiên có chiều rộng 200px. Cột thứ ba chiếm 0,3 không gian còn lại. Và cột thứ năm chiếm 0,7 không gian còn lại.

Vì hàng đầu tiên được đặt thành Grid-template-rows: auto, điều này cho phép hàng mở rộng khi nội dung được thêm vào. Dòng 20px hoạt động như một dấu phân cách. Trong bản demo bên dưới, bạn có thể thấy các phần tử được ép chặt vào nhau.

Hãy chú ý đến phần tử B - nó nằm ở cột thứ hai, được chúng tôi sử dụng làm dấu phân cách. Nếu vị trí của các phần tử không được đặt thủ công, trình duyệt sẽ đặt các phần tử vào các ô từ trái sang phải và nếu chúng không vừa trong một hàng thì những phần tử còn lại sẽ chuyển sang hàng thứ hai. Đó là lý do tại sao chúng tôi để lại 4 cột dự phòng ở dòng thứ hai.

Để di chuyển một phần tử đến một ô lưới nhất định, bạn cần đặt vị trí của phần tử này thông qua CSS. Trước khi tôi giải thích cách di chuyển các phần tử lưới, hãy xem hình ảnh bên dưới.

Trong ví dụ này, chúng tôi sẽ sử dụng hệ thống vị trí phần tử tuyến tính. Một hệ thống tuyến tính có nghĩa là các đường trong lưới sẽ đóng vai trò chủ đạo trong việc sắp xếp các phần tử. Lấy phần tử B làm ví dụ, theo chiều ngang, khối này bắt đầu ở dòng thứ 3 và kết thúc ở dòng cột thứ 4. Ngoài các đường thẳng đứng, phần tử này còn nằm giữa các đường ở hàng thứ nhất và thứ hai.

Để đặt đường thẳng đứng bắt đầu của một phần tử, chúng ta sẽ sử dụng thuộc tính bắt đầu cột lưới. Trong trường hợp của chúng tôi, giá trị sẽ là 3. Thuộc tính Grid-column-end cho biết đường thẳng đứng kết thúc của phần tử. Trong trường hợp của chúng tôi là 4. Các giá trị cho các đường ngang được đặt theo cách tương tự.

Dựa trên những điều trên, chúng tôi kết luận rằng để di chuyển phần tử B sang ô thứ hai, bạn phải sử dụng mã:

Phần tử-b ( lưới-cột-bắt đầu: 3; lưới-cột-cuối: 4; bắt đầu hàng lưới: 1; cuối hàng lưới: 2; )

Phần tử - b (

lưới - cột - bắt đầu : 3 ;

lưới - cột - cuối : 4 ;

lưới - hàng - bắt đầu : 1 ;

lưới - hàng - cuối : 2 ;

Tương tự, để di chuyển phần tử F sang ô thứ sáu:

Phần tử-f ( lưới-cột-bắt đầu: 5; lưới-cột-cuối: 6; bắt đầu hàng lưới: 3; cuối hàng lưới: 4; )

Phần tử - f (

lưới - cột - bắt đầu : 5 ;

lưới - cột - cuối : 6 ;

lưới - hàng - bắt đầu : 3 ;

lưới - hàng - cuối : 4 ;

Tạo bố cục cơ bản

Bây giờ chúng ta sẽ tạo một bố cục blog cơ bản, sẽ có đầu trang, chân trang, thanh bên và hai phần dành cho nội dung. Đầu tiên là các dấu hiệu:

tiêu đề
Nội dung chính
Thông tin thêm

< div class = "grid-container" >

< div class = "grid-element header" >tiêu đề< / div >

< div class = "grid-element sidebar" >Thanh bên< / div >

< div class = "grid-element main" >Nội dung chính< / div >

< div class = "grid-element extra" >Thông tin thêm< / div >

< div class = "grid-element footer" >Chân trang< / div >

< / div >

Hãy nhớ rằng thứ tự các thẻ được đặt trong đánh dấu không ảnh hưởng đến vị trí của các thành phần trên trang web. Không cần thay đổi CSS, bạn có thể đặt footer vào phần đánh dấu phía trên tiêu đề nhưng vị trí của các phần tử vẫn được giữ nguyên. Nhưng tôi không khuyên bạn nên làm điều đó. Ý tưởng chính ở đây là đánh dấu không còn cho bạn biết phần tử sẽ nằm ở đâu nữa.

Tất cả những gì chúng ta phải làm là xác định giá trị của các thuộc tính như Grid-row-end cho tất cả các phần tử. Như trong ví dụ trước, chúng ta sẽ sử dụng sơ đồ lưới để xác định các giá trị thuộc tính.