Trình tạo bảng HTML

Tạo các bảng HTML một cách trực quan và sao chép mã.

Không có dữ liệu nào rời khỏi thiết bị của bạn

Cách sử dụng

  1. Xác định số hàngcột, sau đó nhấp Áp dụng.
  2. Nhập dữ liệu trực tiếp vào các ô có thể chỉnh sửa.
  3. Kích hoạt các tùy chọn như hàng tiêu đề, sọc, viền và di chuột.
  4. Nhấp Sao chép HTML để sao chép mã được tạo.

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

Mã được tạo có bao gồm CSS không?

Có. Khi bạn kích hoạt các tùy chọn như sọc, viền hoặc di chuột, công cụ tạo các style CSS inline trong HTML để bảng hoạt động ở mọi nơi.

Kích thước tối đa của bảng là gì?

Tối đa 50 hàng và 20 cột. Đối với các bộ dữ liệu lớn hơn, hãy xem xét sử dụng một công cụ spreadsheet và xuất sang HTML.

Cách thức hoạt động

  1. Xác định kích thước của bảng: nhập số hàng và cột để tạo lưới ban đầu.
  2. Điền dữ liệu: nhấp vào các ô để nhập nội dung, thêm các hàng tiêu đề và kích hoạt các viền và sọc.
  3. Tạo kiểu bảng: chọn kiểu viền, màu nền của các tiêu đề, các hàng sọc và padding ô.
  4. Sao chép HTML: markup bảng được tạo bao gồm một <thead> với các tiêu đề <th> và một cấu trúc semantic chính xác.

Tại sao sử dụng trình tạo bảng HTML?

Viết tay markup bảng HTML là tốn công và lặp đi lặp lại, đặc biệt cho các bảng với nhiều hàng hoặc các tiêu đề phức tạp. Có được sự lồng nhau chính xác của <table>, <thead>, <tbody>, <tr>, <th><td> mỗi lần dễ mắc lỗi. Trình tạo này tạo các bảng HTML semantic chính xác và dễ tiếp cận với các thuộc tính scope trên các ô tiêu đề cho khả năng tương thích với các trình đọc màn hình, hỗ trợ caption đúng và CSS sạch cho các viền và các trạng thái di chuột. Sử dụng nó cho các bảng giá, các bảng so sánh, các bảng dữ liệu và tài liệu.

Đặc điểm của các bảng

Trình tạo bảng HTML là gì?

Trình tạo bảng HTML cung cấp cho bạn một lưới trực quan mà bạn có thể điền giống như một bảng tính, sau đó xuất ra markup

tương đương với tất cả các phần tử ngữ nghĩa phù hợp. Thay vì nhập
, , , , riêng cho hàng tiêu đề và CSS nội tuyến cho các tùy chọn trực quan mà bạn đánh dấu. Đầu ra sẵn sàng để sao chép-dán cho các bài đăng blog, tài liệu, mẫu email và bất kỳ ngữ cảnh nào chấp nhận HTML. Lưới trực quan chạy hoàn toàn trong trình duyệt của bạn nên không có dữ liệu nào rời khỏi thiết bị của bạn.

Bên trong trình tạo có gì

Hàng điều khiển hàng đầu chứa hai đầu vào số (hàng và cột), một nút Áp dụng, và bốn hộp kiểm tùy chọn (hàng tiêu đề, hàng có sọc, có viền, hiệu ứng di chuột). Điều chỉnh kích thước trước, nhấp Áp dụng, sau đó đánh dấu các tùy chọn phù hợp với thiết kế của bạn. Lưới có thể chỉnh sửa bên dưới cập nhật ngay lập tức và HTML được tạo trong textarea phản ánh mọi thay đổi bạn thực hiện.

Lưới có thể chỉnh sửa là một bảng HTML thực sự với các đầu vào trong mỗi ô, vì vậy bạn có thể tab giữa các ô, dán một cột giá trị, hoặc sử dụng điều hướng bàn phím. Hàng tiêu đề (khi được đánh dấu) được kết xuất với nền màu để bạn có thể nói trong nháy mắt hàng nào sẽ trở thành

bằng tay và đếm các thẻ mở và đóng, bạn đặt kích thước, nhập dữ liệu và sao chép kết quả. Đầu ra là HTML xác thực và đọc đúng cho trình đọc màn hình.

Các phần tử bảng ngữ nghĩa đã có trong HTML kể từ bản nháp 1993 và được chính thức hóa trong HTML 2.0 (1995). Chúng tồn tại vì một lý do: dữ liệu dạng bảng. Bảng giá, ma trận so sánh, lưới dữ liệu có thể sắp xếp, bảng tuần hoàn các nguyên tố, bất kỳ tập hợp các sự kiện hình chữ nhật nào mà các hàng và cột mang ý nghĩa. Các bảng đọc đúng cho công nghệ hỗ trợ khi được sử dụng cho dữ liệu dạng bảng và tạo ra cơn ác mộng về khả năng truy cập khi được sử dụng cho bố cục trang (kỷ nguyên

và Flexbox đã chấm dứt sự lạm dụng đó).

Trình tạo này xuất ra markup có thể truy cập với các thuộc tính scope trên các ô tiêu đề, một

trong đầu ra. Hộp đầu ra bên dưới hiển thị HTML kết quả trong monospace, sẵn sàng để sao chép.

Ba nút hành động nằm ở dưới cùng: Copy HTML ghi markup vào clipboard của bạn qua Clipboard API, Toggle Preview hiển thị một phiên bản được kết xuất bên dưới để bạn có thể xác nhận kiểu, và Clear Cells làm trống dữ liệu mà không cần đặt lại kích thước. Bản xem trước sử dụng cùng CSS với đầu ra, vì vậy những gì bạn thấy là những gì blog hoặc tài liệu của bạn sẽ hiển thị.

Lịch sử và bối cảnh

Tim Berners-Lee đề xuất các bảng (1993)

Bản nháp HTML đầu tiên bao gồm

là đề xuất HTML 3.0 của Dave Raggett vào cuối năm 1993. Phần tử này được mô phỏng trên môi trường LaTeX tabular và mô hình bảng CALS được sử dụng cho tài liệu kỹ thuật. Mosaic và Netscape sớm kết xuất các bảng ngay khi markup được đề xuất, ngay cả trước khi tiêu chuẩn hóa, đó là lý do tại sao các bảng là một trong những nguyên thủy trực quan sớm nhất trên web.

RFC 1942 tiêu chuẩn hóa mô hình bảng (1996)

RFC 1942 của Dave Raggett (tháng 5 năm 1996) đã cung cấp cho các bảng HTML đặc tả chính thức đầu tiên của họ, bao gồm thead, tbody, tfoot, colgroup và thuộc tính scope cho khả năng truy cập. Cùng năm đó, khuyến nghị W3C HTML 3.2 đã áp dụng mô hình bảng về cơ bản nguyên văn. Cấu trúc phần lớn không thay đổi trong ba thập kỷ.

Thời đại đen tối của các bảng bố cục (1996 đến 2005)

Trước khi CSS được hỗ trợ rộng rãi, các nhà thiết kế đã sử dụng các bảng để định vị các phần tử trang: một bảng bốn ô chứa tiêu đề, điều hướng trái, nội dung và chân trang. Kỹ thuật hoạt động nhưng tạo ra markup không thể đọc được, làm hỏng trình đọc màn hình và làm cho việc thiết kế lại đau đớn. Sự truyền giáo CSS của Eric Meyer (2000-2005) và Designing With Web Standards của Jeffrey Zeldman (2003) đã chấm dứt kỷ nguyên, trả các bảng về mục đích ngữ nghĩa của chúng: dữ liệu dạng bảng.

Các giá trị display CSS table-* (2004 trở đi)

CSS 2.1 đã thêm display: table, table-row và table-cell, vì vậy bạn có thể có hành vi bố cục giống bảng trên các phần tử không phải bảng. Điều này hữu ích cho khoảng thời gian ngắn khi Flexbox và Grid chưa được hỗ trợ (khoảng 2010 đến 2015). Hôm nay, display: grid và display: flex đã thay thế các giá trị bảng CSS này cho bố cục, và các bảng thực được dành riêng cho dữ liệu.

Vai trò ARIA grid và khả năng truy cập (2014)

WAI-ARIA 1.0 (2014) đã giới thiệu role=grid cho các bảng tương tác và làm rõ cách các trình đọc màn hình nên thông báo các tiêu đề bảng qua thuộc tính scope và mẫu headers/id. Các trình đọc màn hình hiện đại (NVDA, JAWS, VoiceOver) đọc đúng một

được đánh dấu đúng với ngữ cảnh cột và hàng, điều này không thể tái tạo bằng các lưới dựa trên
.

Các mẫu bảng đáp ứng (2011 đến nay)

Khi iPhone làm cho các màn hình nhỏ chiếm ưu thế, các nhà thiết kế phải tìm ra cách hiển thị các bảng rộng trên viewport hẹp. Bài viết về bảng đáp ứng năm 2011 của Filament Group đã khởi đầu một làn sóng các mẫu: cuộn ngang, các hàng xếp chồng trên di động, các cột thu gọn theo ưu tiên. Nhóm Làm việc CSS đã làm việc trên container queries và subgrid để làm cho các mẫu này dễ dàng hơn; hiện tại, cách tiếp cận tiêu chuẩn là bọc bảng trong overflow-x: auto.

Quy trình thực tế

Bảng giá cho trang đích SaaS

Ba cột (Free, Pro, Enterprise) với mười hàng tính năng hoặc hơn. Đánh dấu hàng tiêu đề để biến tên gói thành các ô

, đánh dấu có viền để tách biệt rõ ràng, để sọc tắt nếu thiết kế của bạn có nền hàng riêng. Sao chép HTML, dán vào CMS hoặc trang tĩnh của bạn, và thêm một lớp bao bọc mỏng cho chủ đề.

Ma trận so sánh cho các đánh giá blog

Khi xem xét năm công cụ qua tám tiêu chí, một bảng với các hàng có sọc và các ô có viền đọc rõ ràng hơn so với một danh sách dấu đầu dòng. Đánh dấu có sọc, có viền và hàng tiêu đề; nhập hoặc dán dữ liệu; sao chép. Markup ngữ nghĩa làm cho so sánh có thể đọc được trong các trình đọc feed, các dịch vụ lưu trữ và các trình đọc màn hình.

Bảng tham chiếu trong tài liệu API

Tài liệu API thường hiển thị tên tham số, kiểu, mặc định và mô tả dưới dạng bảng. Trình tạo cung cấp cho bạn bốn cột với một hàng tiêu đề, bạn điền các tham số, sao chép HTML và dán vào Markdown hỗ trợ HTML thô, hoặc vào framework tài liệu của bạn (Docusaurus, MkDocs, Hugo). Thuộc tính scope làm cho các cột có thể điều hướng trong các trình đọc màn hình.

Bản tin email (kèm cảnh báo)

Các ứng dụng email (đặc biệt là Outlook 2007-2019) có hỗ trợ CSS rất không nhất quán, vì vậy HTML bản tin vẫn sử dụng các bảng cho bố cục (một ngoại lệ đối với quy tắc không-bảng-bố-cục). Đối với các bảng dữ liệu bên trong bản tin, đầu ra có kiểu nội tuyến của trình tạo hoạt động trong hầu hết các ứng dụng. Kiểm tra trong Litmus hoặc Email on Acid trước khi gửi đến một danh sách lớn.

Mockup nhanh bảng điều khiển nội bộ

Khi tạo mẫu bảng điều khiển quản trị nội bộ, một bảng HTML tĩnh với các hàng có sọc trông gần với sản phẩm cuối cùng hơn là văn bản giữ chỗ. Tạo cấu trúc, dán vào thành phần React hoặc Vue, và thay thế dữ liệu tĩnh bằng vòng lặp dữ liệu ràng buộc sau này.

Tạo PDF từ HTML

Khi tạo PDF từ HTML với các công cụ như Puppeteer, wkhtmltopdf, hoặc in sang PDF của Chrome, các bảng kết xuất đáng tin cậy trên tất cả các engine. Sử dụng trình tạo để xây dựng bảng, dán vào mẫu của bạn, và chạy pipeline PDF. Tùy chọn có viền cung cấp các đường in sắc nét mà không cần CSS bổ sung.

Các cạm bẫy phổ biến

Sử dụng các bảng cho bố cục trang

Các bảng dành cho dữ liệu dạng bảng, không phải cấu trúc trang. Một

với một hàng và ba cột để định vị tiêu đề, nội dung và thanh bên làm cho trang đọc như một bảng dữ liệu cho các trình đọc màn hình, điều này khó hiểu. Sử dụng Flexbox hoặc CSS Grid cho bố cục thay vào đó. Ngoại lệ duy nhất là email HTML, nơi các bảng bố cục vẫn cần thiết cho việc kết xuất đa-ứng-dụng.

Thiếu thuộc tính scope trên các ô tiêu đề

Mỗi

trống đọc là trống cho các trình đọc màn hình, điều này nghe có vẻ kỳ lạ khi liệt kê 50 mục. Nếu một ô hợp pháp không có dữ liệu, hãy viết hoặc . Lưu ý rằng thực thể dấu gạch ngang giới thiệu một em-dash, mà trang này tránh; sử dụng dấu gạch nối, "N/A", hoặc "Không có sẵn" thay thế.

Sắp xếp và lọc không có nâng cao tiến bộ

Một bảng HTML tĩnh không thể được sắp xếp hoặc lọc bởi người dùng. Nếu khán giả của bạn cần tương tác, hãy phân lớp trong DataTables, AG Grid, hoặc Tanstack Table. Trình tạo tạo ra bảng ngữ nghĩa cơ bản, trở thành nền tảng cho các thư viện này. Điều hướng bàn phím và các vai trò ARIA đi kèm với thư viện.

Quyền riêng tư và xử lý dữ liệu

Mọi thứ chạy trong trình duyệt của bạn. Lưới trực quan, đầu ra HTML và bản xem trước đều sống trong JavaScript phía máy khách. Chúng tôi không gửi dữ liệu của bạn đi đâu cả, không ghi nhật ký đầu vào, hoặc lưu trữ bất cứ thứ gì trong cookie hoặc localStorage. Tải lại trang và bảng trước đó biến mất.

Sau khi trang được tải, công cụ hoạt động ngoại tuyến. Bạn có thể ngắt kết nối khỏi mạng và xây dựng các bảng chứa dữ liệu khách hàng, giá nội bộ, hoặc bất kỳ nội dung bí mật nào khác mà không cần chạm vào máy chủ bên thứ ba. Nút Copy HTML sử dụng Clipboard API yêu cầu một cử chỉ người dùng và không thể quan sát được bởi các bên ngoài.

Khi không sử dụng một bảng HTML tĩnh

Bố cục trang (sử dụng Flexbox hoặc Grid)

Nếu bạn muốn một thanh bên cạnh nội dung chính, một lưới thẻ, hoặc một thanh điều hướng, hãy sử dụng CSS Flexbox (display: flex) hoặc CSS Grid (display: grid). Các bảng cho bố cục tạo ra đầu ra trình đọc màn hình khó hiểu và HTML không linh hoạt không thích ứng với các thay đổi viewport theo cách các nguyên thủy bố cục hiện đại làm.

Các tập dữ liệu lớn (trên 1000 hàng)

Một bảng HTML tĩnh 10.000 hàng chậm để kết xuất và tiêu thụ bộ nhớ đáng kể. Sử dụng một thư viện lưới ảo hóa (TanStack Virtual, React Window, AG Grid) chỉ kết xuất các hàng hiển thị. HTML tĩnh tốt cho dưới vài trăm hàng.

Thao tác dữ liệu tương tác (sử dụng một thư viện lưới)

Khi người dùng cần sắp xếp, lọc, chỉnh sửa, nhóm hoặc phân trang, bạn cần một thư viện lưới thực sự. AG Grid, TanStack Table, DataTables, và Bootstrap Table đều tạo ra markup

nên có scope="col" hoặc scope="row" để các trình đọc màn hình biết tiêu đề nào áp dụng cho ô dữ liệu nào. Không có scope, người đọc phải đoán, thường tạo ra ngữ cảnh sai. Trình tạo này phát ra scope tự động cho các hàng tiêu đề. Nếu bạn chỉnh sửa HTML thủ công, hãy giữ các thuộc tính scope đúng vị trí.

Các tiêu đề phức tạp (đa cấp) không có headers/id

Các bảng với các tiêu đề cột được nhóm (Q1, Q2 mỗi cái được chia thành Jan, Feb, Mar) cần thuộc tính headers trên mỗi ô dữ liệu chỉ đến id của các tiêu đề liên quan. Scope một mình không đủ cho các tiêu đề hai cấp. Trình tạo không tạo ra các tiêu đề phức tạp; cho những điều này, chỉnh sửa HTML thủ công hoặc sử dụng một plugin CMS hỗ trợ mẫu này.

Các bảng rộng trên di động

Một bảng sáu cột không thể đọc được trên màn hình điện thoại rộng 375 pixel. Mẫu thân thiện với di động mặc định là bọc bảng trong một div với overflow-x: auto để người dùng có thể cuộn ngang. Đối với các bảng nặng cột, hãy xem xét xếp chồng các hàng thành các thẻ nhỏ trên màn hình nhỏ qua @media (max-width). Đầu ra của trình tạo không được tự động bọc; thêm bộ bao bọc trong CSS của bạn.

Các ô trống không có nội dung rõ ràng

Một

--
có thể truy cập dưới mui xe trong khi thêm tính tương tác. Đầu ra của trình tạo là điểm khởi đầu, không phải là kết thúc.

Biểu đồ và đồ thị (sử dụng SVG hoặc canvas)

Một biểu đồ cột không phải là một bảng, đó là một trực quan hóa. Sử dụng Chart.js, D3, Recharts, hoặc bất kỳ thư viện biểu đồ dựa trên SVG nào. Nếu bạn cần cả biểu đồ và bảng dữ liệu hỗ trợ cho khả năng truy cập, kết xuất biểu đồ và đặt một

với cùng dữ liệu gần đó (hoặc ẩn trong một lớp ẩn-trực-quan) để người dùng trình đọc màn hình nhận được các con số.

Các câu hỏi khác

Tôi có nên luôn sử dụng thead và tbody không?

Đối với các bảng có hàng tiêu đề, có.

tách các hàng tiêu đề khỏi các hàng dữ liệu, cho phép các trình duyệt đóng băng tiêu đề trên các bảng dài và cho phép các trình đọc màn hình thông báo tiêu đề một cách chính xác. Trình tạo bao gồm thead tự động khi tùy chọn hàng tiêu đề được đánh dấu. Đối với các bảng không có tiêu đề, bạn có thể bỏ qua cả hai, nhưng việc bao gồm để hoàn thiện là rẻ.

Khi nào tôi sử dụng scope="col" vs scope="row"?

scope="col" đi trên các ô

gắn nhãn một cột (hàng tiêu đề trên cùng). scope="row" đi trên các ô gắn nhãn một hàng (ô ngoài cùng bên trái khi mỗi hàng có tên). Hầu hết các bảng chỉ có tiêu đề cột, vì vậy scope="col" là trường hợp phổ biến. Nếu bạn có cả hai, đánh dấu mỗi cái với scope thích hợp.

Làm thế nào tôi tạo một bảng có thể sắp xếp?

Sử dụng một thư viện JavaScript thêm nhấp-để-sắp-xếp vào markup

hiện có. Sortable.js, TanStack Table, và DataTables đều làm điều này. CSS thuần không thể sắp xếp. Đầu ra của trình tạo là nền tảng tĩnh; phân lớp thư viện lên trên trong dự án cuối cùng của bạn. Đối với khả năng truy cập, thư viện nên thêm aria-sort vào cột đang hoạt động.

Mẫu đáp ứng tốt nhất là gì?

Đơn giản nhất và dễ truy cập nhất là overflow-x: auto trên một div bao bọc, bảo tồn ngữ nghĩa của bảng trong khi cho phép người dùng cuộn ngang. Đối với các bảng nặng cột, mẫu hàng xếp chồng (display: block trên td ở chiều rộng hẹp, với nhãn dữ liệu qua các thuộc tính data-label) đọc mỗi hàng như một danh sách có nhãn trên di động. Cả hai đều hợp lệ; chọn dựa trên trường hợp sử dụng đọc-vs-so-sánh của bảng.

Tôi có thể sử dụng các bảng HTML trong Markdown không?

Hầu hết các bộ xử lý Markdown (GitHub Flavored Markdown, Pandoc, MDX, MkDocs, Hugo) chấp nhận HTML thô cùng với cú pháp Markdown, vì vậy bạn có thể dán đầu ra của trình tạo trực tiếp. Cú pháp bảng gốc của Markdown đơn giản hơn nhưng thiếu colspan, rowspan, scope và kiểu, vì vậy đối với bất cứ điều gì vượt ra ngoài một lưới đơn giản, HTML tốt hơn. Lưu ý: một số bộ phân tích Markdown nghiêm ngặt (CommonMark không có tiện ích mở rộng) bỏ qua HTML theo mặc định.

Làm thế nào tôi tạo kiểu các màu hàng xen kẽ mà không có CSS?

Đánh dấu tùy chọn Hàng có Sọc trong trình tạo. Đầu ra bao gồm các thuộc tính kiểu nội tuyến trên mỗi hàng khác, vì vậy việc tạo sọc tồn tại ngay cả trong các ngữ cảnh mà CSS bị loại bỏ (một số ứng dụng webmail). Nếu môi trường của bạn cho phép CSS bên ngoài, ưu tiên tr:nth-child(even) trong một stylesheet, sạch hơn các kiểu nội tuyến và dễ cập nhật hơn.