Cách thêm viền cho bảng
Bảng mặc định không có viền. Hãy thêm viền bằng CSS: border trên mọi ô vẽ ra lưới, và border-collapse: collapse trên bảng gộp mỗi cặp viền kề nhau thành một đường.
Thuộc tính viết tắt border nhận độ rộng, kiểu và màu, theo thứ tự nào cũng được: 1px solid #6b7280. Hãy đặt nó cho th, td, không chỉ cho table: viền trên bảng chỉ vẽ khung bên ngoài.
border-collapse: separate và collapse
border-collapse quyết định các ô có dùng chung viền hay không.
| Giá trị | Kết quả |
|---|---|
separate (mặc định) | Mỗi ô có viền riêng, giữa các ô có khoảng hở do border-spacing quy định |
collapse | Các ô kề nhau dùng chung một viền; border-spacing bị bỏ qua |
Trong bảng separate, bạn thấy được cả hai lớp: khung bảng màu xanh dương và một khung màu hổ phách riêng quanh từng ô, với border-spacing ở giữa. Đổi 6px thành 0 thì các ô chạm nhau nhưng đường kẻ vẫn bị đôi. Chỉ có collapse mới gộp chúng lại.
Khi hai viền đã gộp gặp nhau mà khác nhau, viền rộng hơn sẽ thắng. Nếu cùng độ rộng, kiểu viền quyết định (double thắng solid, solid thắng dashed và dotted), và nếu vẫn ngang nhau, viền của ô thắng viền của hàng, viền của hàng thắng viền của bảng. Đó là lý do cạnh ngoài của bảng collapse có màu hổ phách chứ không phải xanh dương: ở đó cả ô và bảng đều có viền 2px solid, và ô thắng.
Chỉ kẻ dòng ngang, hoặc chỉ kẻ bên trong
Phần lớn bảng hiện đại không vẽ mọi đường kẻ. Hai kiểu phổ biến:
Bảng thứ hai bỏ viền ở cạnh ngoài của mỗi ô nằm ở rìa. border-inline-start và border-inline-end nghĩa là đầu và cuối của hàng, nên cùng một đoạn CSS vẫn đúng với các ngôn ngữ viết từ phải sang trái, nơi ô đầu tiên nằm ở phía bên kia.
Bo tròn góc bảng
border-radius không có tác dụng gì trên bảng có border-collapse: collapse. Bảng bo góc dùng mô hình separate không có khoảng hở, và vẽ mỗi đường kẻ một lần bằng cách chỉ cho các ô viền dưới và viền cuối:
Hai ô ở góc của hàng tiêu đề có bán kính bo góc riêng để nền màu xám đi theo đường cong. Không có nó, các góc vuông của chúng sẽ lòi ra ngoài viền bo tròn. Bán kính là 9px, tức 10px của bảng trừ đi viền 1px, để hai đường cong khớp nhau.
Màu và độ dày viền cho từng phần
Viền có thể khác nhau theo từng phần của bảng. Các selector trên thead, tfoot và từng hàng đặt một đường kẻ đậm hơn dưới phần tiêu đề hoặc trên hàng tổng:
Những đường 3px thắng các đường xám 1px tại chỗ chúng gặp nhau, theo quy tắc gộp viền ở trên. Về phần còn lại của cấu trúc bảng (thead, tfoot, th), xem bảng trong HTML.
Thuộc tính border
Các hướng dẫn cũ dùng thuộc tính trên thẻ <table>:
<table border="1" cellspacing="0" cellpadding="6">
Trình duyệt vẫn hiểu border="1": nó vẽ viền cho bảng và mọi ô, theo mô hình separate, nên tạo ra kiểu viền đôi. Cả ba thuộc tính đều đã lỗi thời trong HTML5. Các cách tương đương trong CSS là border trên các ô, border-spacing (hoặc border-collapse: collapse) trên bảng, và padding trên các ô.
Lỗi thường gặp
- Chỉ đặt viền cho
table. Bạn có một khung mà bên trong không có đường kẻ nào. Hãy thêm viền choth, td. - Quên
border-collapse: collapse, rồi thấy các đường kẻ bị đôi. border-radiuscùngborder-collapse: collapse. Bán kính bo góc bị bỏ qua.border-spacingcùngborder-collapse: collapse. Khoảng hở chỉ có tác dụng trong mô hình separate.- Viền trên
<tr>trong mô hình separate. Hàng không vẽ viền trừ khi bảng được gộp viền; hãy định dạng các ô. - Dùng
border="1"trong code mới. Nó vẫn chạy, nhưng không đặt được màu và đã lỗi thời.
Câu hỏi thường gặp
Làm sao thêm viền cho bảng trong HTML?
Dùng CSS trên bảng và các ô của nó: table { border-collapse: collapse; } th, td { border: 1px solid #999; }. Viền trên các ô vẽ ra lưới, và border-collapse: collapse gộp các viền kề nhau thành một đường duy nhất.
Vì sao bảng bị viền đôi?
Theo mặc định, mỗi ô vẽ viền riêng và có khoảng hở giữa các ô (border-collapse: separate), nên hai ô kề nhau hiện hai đường kẻ. Đặt border-collapse: collapse trên <table> để gộp chúng thành một.
Thuộc tính border của table còn dùng được không?
<table border="1"> vẫn vẽ viền trên mọi trình duyệt, nhưng đã lỗi thời trong HTML5 và không cho bạn chỉnh màu hay kiểu viền. Hãy dùng thuộc tính CSS border.
Làm sao bo tròn góc bảng?
border-radius không có tác dụng trên bảng có border-collapse: collapse. Hãy dùng border-collapse: separate với border-spacing: 0, đặt bán kính bo góc cho bảng, và cho các ô ở góc bán kính tương ứng (border-start-start-radius và các thuộc tính cùng loại) để nền của chúng không lòi ra khỏi góc.
Làm sao bỏ viền của bảng?
Bảng không có viền trừ khi có thứ gì đó thêm vào. Xóa thuộc tính border khỏi thẻ <table>, hoặc đặt border: none cho table, th, td để ghi đè một stylesheet đã thêm viền.