Trình tạo lưới CSS

Xây dựng các bố cục CSS Grid trực quan · điều chỉnh cột, hàng, khoảng cách và căn chỉnh, xem bản xem trước trực tiếp, sao chép CSS.

Thuộc tính grid

Xem trước

CSS được tạo

Cách sử dụng

  1. Xác định kích thước grid: nhập số cột và hàng cho bố cục của bạn.
  2. Xác định các đường track: điều chỉnh chiều rộng của mỗi cột và chiều cao của mỗi hàng với các đơn vị fr, pixel, phần trăm, auto hoặc minmax().
  3. Sao chép CSS: các thuộc tính display: grid, grid-template-columns, grid-template-rows và gap được tạo sẵn sàng để dán vào stylesheet của bạn.

Tại sao sử dụng trình tạo CSS Grid?

CSS Grid là hệ thống bố cục mạnh mẽ nhất của CSS, có khả năng tạo các bố cục hai chiều phức tạp mà trước đây yêu cầu các bảng, float hoặc JavaScript. Nhưng làm chủ grid-template-columns, các đơn vị fr, minmax(), repeat() và các vùng được đặt tên đòi hỏi sự thực hành. Trình tạo trực quan này cho phép bạn xây dựng bất kỳ grid nào bằng cách nhấp và kéo, sau đó tạo ra CSS sạch sẽ để sử dụng ngay lập tức hoặc nghiên cứu để hiểu sâu hơn về Grid.

Tính năng

Câu hỏi thường gặp

Đơn vị «fr» trong CSS Grid là gì?

Đơn vị fr (phân số) phân phối không gian khả dụng theo tỷ lệ. Trong một grid 3 cột với 1fr 2fr 1fr, cột giữa nhận được không gian gấp đôi các cột bên ngoài. Các đơn vị fr chia sẻ không gian còn lại sau khi phân bổ các đường track có kích thước cố định.

Cách tạo một grid responsive mà không cần media query?

Sử dụng repeat(auto-fill, minmax(200px, 1fr)) làm giá trị của grid-template-columns. Điều này tạo ra nhiều cột nhất mà kích thước tối thiểu cho phép, mở rộng để lấp đầy không gian khả dụng. Các phần tử tự động sắp xếp lại khi chiều rộng container thay đổi.

Sự khác biệt giữa grid-template và grid-auto là gì?

grid-template-columns/rows xác định các đường track rõ ràng mà bạn chỉ định. grid-auto-columns/rows xác định kích thước của các đường track ngầm, các cột và hàng được tạo tự động khi các phần tử tràn ra khỏi grid rõ ràng.

Lịch sử ngắn của CSS Grid

Trước CSS Grid, các bố cục web đã trải qua ba thời kỳ đau đớn. Bố cục dựa trên bảng (1995-2008) lạm dụng phần tử <table> cho cấu trúc trực quan, với việc «cắt nhỏ và chia» các bản dựng Photoshop thành lưới HTML. Bố cục dựa trên float (2008-2013) đã thay thế các bảng bằng thuộc tính float, đòi hỏi các thủ thuật «clearfix» như micro-clearfix của Nicolas Gallagher (2011) để chứa các phần tử con bị bao bọc. Flexbox (CSS Flexible Box Layout Module Level 1, Khuyến nghị W3C 2018) đã giải quyết các bố cục một chiều nhưng gặp khó khăn với các lưới hai chiều thực sự. Câu chuyện CSS Grid bắt đầu với việc triển khai -ms-grid của Microsoft trong Internet Explorer 10 (2012), một phiên bản ban đầu đã thông tin cho thông số kỹ thuật W3C. Bản nháp công khai W3C đầu tiên của CSS Grid Layout Module Level 1 ra mắt vào tháng 4 năm 2011, nhưng động lực thực sự đến từ công việc vận động của Rachel Andrew (cuốn sách Get Ready for CSS Grid Layout của bà, 2016) và Jen Simmons (nhà phát triển-truyền giáo Mozilla, vòng hội nghị 2016-2018). Cuộc đua trình duyệt đã được giải quyết trong một khoảng thời gian hai tháng đáng chú ý vào tháng 3 năm 2017: Chrome 57, Firefox 52, Safari 10.1 và Edge 16 đều đã cung cấp Grid không tiền tố trong vòng vài tuần với nhau. W3C đã đánh dấu Grid Level 1 là Khuyến nghị Ứng viên vào tháng 12 năm 2016; Khuyến nghị W3C cuối cùng đến vào tháng 8 năm 2020. Subgrid (Level 2) đã được cung cấp trong Firefox 71 (12/2019), Safari 16 (9/2022) và Chrome 117 (9/2023). Biên giới tiếp theo là bố cục Masonry được đề xuất (đề xuất CSS Working Group 2020, sau cờ trong Firefox kể từ 2021).

Giải phẫu của một lưới CSS

Các mô hình Grid trong thế giới thực

Tiêu chuẩn và cột mốc

Các câu hỏi thường gặp khác

Khi nào tôi nên sử dụng Grid so với Flexbox?

Lối nói ngắn gọn của cộng đồng: Flexbox dành cho một chiều, Grid dành cho hai. Nếu bạn đang xếp một hàng nút hoặc căn chỉnh các mục theo một hướng duy nhất, Flexbox đơn giản hơn. Nếu bạn đang thiết kế một bố cục toàn trang với các hàng và cột phải căn chỉnh, Grid là công cụ phù hợp. Nhiều bố cục thực tế kết hợp cả hai: Grid cho khung trang, Flexbox cho căn chỉnh cấp thành phần bên trong mỗi vùng lưới. Các framework hiện đại (Tailwind, Bootstrap 5) đón nhận mô hình này.

CSS Grid có hoạt động trong các trình duyệt cũ không?

Tất cả các trình duyệt thường xanh (Chrome, Firefox, Safari, Edge) hỗ trợ Grid kể từ tháng 3 năm 2017. Internet Explorer 11 chỉ có cú pháp -ms-grid đầu tiên (tập hợp con, có tiền tố, thiếu nhiều tính năng). Để hỗ trợ IE11, sử dụng các truy vấn @supports để quay lại Flexbox hoặc bố cục dựa trên float. Tính đến năm 2024, IE11 có mức sử dụng toàn cầu dưới 0,5%, vì vậy hầu hết các đội đã bỏ fallback. Caniuse.com báo cáo hỗ trợ toàn cầu trên 97% cho Grid không có tiền tố.

Sự khác biệt giữa grid-template-areas và grid-area là gì?

grid-template-areas được đặt trên container lưới và lập bản đồ trực quan các vùng có tên của lưới (một chuỗi mỗi hàng). grid-area được đặt trên một mục lưới để gán nó cho một trong những vùng có tên đó. Cả hai làm việc cùng nhau: container khai báo «bản đồ», các mục khai báo «tôi là vùng X». Bạn cũng có thể sử dụng grid-area trực tiếp với số dòng (grid-area: 1 / 1 / 3 / 4) thay vì tên, điều này hữu ích cho các bố cục động.

Subgrid là gì và khi nào tôi nên sử dụng nó?

Subgrid cho phép một lưới lồng nhau kế thừa các định nghĩa rãnh của lưới cha mẹ thay vì tạo của riêng mình. Điều này giải quyết vấn đề căn chỉnh các mục trên các lưới lồng nhau, ví dụ, một thẻ có bố cục bên trong phải căn chỉnh với các thẻ xung quanh. Sử dụng grid-template-columns: subgrid trên lưới lồng nhau. Có sẵn trong Firefox 71+ (12/2019), Safari 16+ (9/2022), Chrome 117+ (9/2023). Quay lại lưới lồng nhau thông thường trong các trình duyệt không hỗ trợ.

Grid tương tác với khả năng tiếp cận như thế nào?

Vị trí Grid không thay đổi thứ tự nguồn DOM: các mục xuất hiện ở vị trí trực quan bạn chỉ định, nhưng trình đọc màn hình và thứ tự tab bàn phím theo nguồn. WCAG 2.1 SC 1.3.2 Trình tự Có nghĩa yêu cầu thứ tự nguồn có ý nghĩa khi các kiểu được loại bỏ. Hàm ý: trước tiên thiết kế nguồn DOM của bạn cho thứ tự đọc hợp lý, sau đó sử dụng Grid để đặt các mục một cách trực quan. Nếu bạn sắp xếp lại các mục một cách đáng kể với grid-column: 3 / 5; grid-row: 2, kiểm tra với trình đọc màn hình để xác nhận thứ tự được nói vẫn có ý nghĩa.

Công cụ liên quan

Bộ trực quan hóa mô hình hộp CSS Trình tạo CSS đa cột Trình tạo CSS Flexbox Trình tạo CSS Clip-Path