Table-related CSS properties
This article explains table-related CSS properties.
You can learn how to use and write properties for table layouts, borders, caption positions, and more.
YouTube Video
HTML for Preview
css-table.html
1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="UTF-8">
5 <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 <title>CSS Properties Example</title>
7 <link rel="stylesheet" href="css-base.css">
8 <link rel="stylesheet" href="css-table.css">
9</head>
10<body>
11 <!-- Header -->
12 <header>
13 <h1>Table Related CSS Properties</h1>
14 </header>
15
16 <!-- Main content -->
17 <main>
18 <header>
19 <h2>Table Related Properties</h2>
20 </header>
21 <article>
22 <h3>table-layout</h3>
23 <section>
24 <header><h4>table-layout: auto</h4></header>
25 <section class="sample-view">
26 <table class="table-layout-auto">
27 <thead>
28 <tr>
29 <th>Column 1</th>
30 <th>Column 2</th>
31 <th>Column 3</th>
32 </tr>
33 </thead>
34 <tbody>
35 <tr>
36 <td>Short</td>
37 <td>Some longer content here</td>
38 <td>Content</td>
39 </tr>
40 <tr>
41 <td>Another short one</td>
42 <td>This is a much longer piece of text to demonstrate the auto layout</td>
43 <td>Short</td>
44 </tr>
45 </tbody>
46 </table>
47 </section>
48 </section>
49 <section>
50 <header><h4>table-layout: fixed</h4></header>
51 <section class="sample-view">
52 <table class="table-layout-fixed">
53 <thead>
54 <tr>
55 <th>Column 1</th>
56 <th>Column 2</th>
57 <th>Column 3</th>
58 </tr>
59 </thead>
60 <tbody>
61 <tr>
62 <td>Short</td>
63 <td>Some longer content here</td>
64 <td>Content</td>
65 </tr>
66 <tr>
67 <td>Another short one</td>
68 <td>This is a much longer piece of text to demonstrate the fixed layout</td>
69 <td>Short</td>
70 </tr>
71 </tbody>
72 </table>
73 </section>
74 </section>
75 </article>
76 <article>
77 <h3>border-collapse</h3>
78 <section>
79 <header><h4>border-collapse: separate</h4></header>
80 <section class="sample-view">
81 <table class="border-collapse-separate">
82 <thead>
83 <tr>
84 <th>Header 1</th>
85 <th>Header 2</th>
86 <th>Header 3</th>
87 </tr>
88 </thead>
89 <tbody>
90 <tr>
91 <td>Cell 1</td>
92 <td>Cell 2</td>
93 <td>Cell 3</td>
94 </tr>
95 <tr>
96 <td>Cell 4</td>
97 <td>Cell 5</td>
98 <td>Cell 6</td>
99 </tr>
100 </tbody>
101 </table>
102 </section>
103 </section>
104 <section>
105 <header><h4>border-collapse: collapse</h4></header>
106 <section class="sample-view">
107 <table class="border-collapse-collapse">
108 <thead>
109 <tr>
110 <th>Header 1</th>
111 <th>Header 2</th>
112 <th>Header 3</th>
113 </tr>
114 </thead>
115 <tbody>
116 <tr>
117 <td>Cell 1</td>
118 <td>Cell 2</td>
119 <td>Cell 3</td>
120 </tr>
121 <tr>
122 <td>Cell 4</td>
123 <td>Cell 5</td>
124 <td>Cell 6</td>
125 </tr>
126 </tbody>
127 </table>
128 </section>
129 </section>
130 </article>
131 <article>
132 <h3>border-spacing</h3>
133 <section>
134 <header><h4>border-spacing: 5px 20px</h4></header>
135 <section class="sample-view">
136 <table class="border-spacing-example">
137 <thead>
138 <tr>
139 <th>Header 1</th>
140 <th>Header 2</th>
141 <th>Header 3</th>
142 </tr>
143 </thead>
144 <tbody>
145 <tr>
146 <td>Cell 1</td>
147 <td>Cell 2</td>
148 <td>Cell 3</td>
149 </tr>
150 <tr>
151 <td>Cell 4</td>
152 <td>Cell 5</td>
153 <td>Cell 6</td>
154 </tr>
155 </tbody>
156 </table>
157 </section>
158 </section>
159 </article>
160 <article>
161 <h3>caption-side</h3>
162 <section>
163 <header><h4>caption-side: top</h4></header>
164 <section class="sample-view">
165 <table>
166 <caption class="caption-side-top">
167 Table Caption on Top
168 </caption>
169 <thead>
170 <tr>
171 <th>Header 1</th>
172 <th>Header 2</th>
173 <th>Header 3</th>
174 </tr>
175 </thead>
176 <tbody>
177 <tr>
178 <td>Data 1</td>
179 <td>Data 2</td>
180 <td>Data 3</td>
181 </tr>
182 <tr>
183 <td>Data 4</td>
184 <td>Data 5</td>
185 <td>Data 6</td>
186 </tr>
187 </tbody>
188 </table>
189 </section>
190 </section>
191 <section>
192 <header><h4>caption-side: bottom</h4></header>
193 <section class="sample-view">
194 <table>
195 <caption class="caption-side-bottom">
196 Table Caption on Bottom
197 </caption>
198 <thead>
199 <tr>
200 <th>Header 1</th>
201 <th>Header 2</th>
202 <th>Header 3</th>
203 </tr>
204 </thead>
205 <tbody>
206 <tr>
207 <td>Data 1</td>
208 <td>Data 2</td>
209 <td>Data 3</td>
210 </tr>
211 <tr>
212 <td>Data 4</td>
213 <td>Data 5</td>
214 <td>Data 6</td>
215 </tr>
216 </tbody>
217 </table>
218 </section>
219 </section>
220 </article>
221 <article>
222 <h3>empty-cells</h3>
223 <section>
224 <header><h4>empty-cells: show</h4></header>
225 <section class="sample-view">
226 <table class="empty-cells-show">
227 <tr>
228 <th>Header 1</th>
229 <th>Header 2</th>
230 <th>Header 3</th>
231 </tr>
232 <tr>
233 <td>Data 1</td>
234 <td></td> <!-- Empty cell -->
235 <td>Data 3</td>
236 </tr>
237 <tr>
238 <td>Data 4</td>
239 <td></td> <!-- Empty cell -->
240 <td>Data 6</td>
241 </tr>
242 </table>
243 </section>
244 </section>
245 <section>
246 <header><h4>empty-cells: hide</h4></header>
247 <section class="sample-view">
248 <table class="empty-cells-hide">
249 <tr>
250 <th>Header 1</th>
251 <th>Header 2</th>
252 <th>Header 3</th>
253 </tr>
254 <tr>
255 <td>Data 1</td>
256 <td></td> <!-- Empty cell -->
257 <td>Data 3</td>
258 </tr>
259 <tr>
260 <td>Data 4</td>
261 <td></td> <!-- Empty cell -->
262 <td>Data 6</td>
263 </tr>
264 </table>
265 </section>
266 </section>
267 </article>
268 </main>
269</body>
270</html>
Table layout
table-layout
property
1table {
2 width: 100%;
3}
4
5th, td {
6 border: 1px solid black;
7 padding: 10px;
8}
9
10table.table-layout-auto {
11 border-collapse: collapse;
12 table-layout: auto;
13}
14
15table.table-layout-fixed {
16 border-collapse: collapse;
17 table-layout: fixed;
18}
19
20table.table-layout-fixed th {
21 width: 33.33%; /* Distribute width equally among 3 columns */
22}
table-layout
is a CSS property that controls the layout method of HTML tables. This property allows you to specify how to calculate the column widths of a table.
-
In the
table-layout-auto
class, column widths are determined based on the content within each cell. -
Column widths vary according to the content, and cells with long content will widen the column.
-
The
table-layout-fixed
class usestable-layout: fixed
. -
Each column’s width is set equally, and the width does not change even if the content is long.
Values of table-layout
1table {
2 table-layout: auto;
3}
4
5table {
6 table-layout: fixed;
7}
table-layout
mainly has two values: auto
and fixed
.
-
auto
(default value):- Specifying
auto
automatically adjusts the table's column widths based on the content. - The browser reads all the content of each cell and determines each column's width based on that content.
- This may result in slower rendering of the entire table.
- Specifying
-
fixed
:- Specifying
fixed
means each column's width is determined by the width of the cells in the first row or by thewidth
attribute. - The entire table is drawn immediately and the column widths are determined without reading all the content.
- Performance improves even when there is a lot of data in the table.
- Specifying
Difference between table-layout: auto
and table-layout: fixed
- With
auto
, the table width adjusts automatically according to the content. A more dynamic layout is possible, but performance may worsen with complex tables. - With
fixed
, column widths are fixed, maintaining a consistent layout regardless of the table content. While performance improves, content may be truncated if it does not fit the width.
The border-collapse
property
1table.border-collapse-separate {
2 border-collapse: separate;
3 border-spacing: 10px; /* Set space between cells */
4}
5
6table.border-collapse-collapse {
7 border-collapse: collapse;
8}
border-collapse
is a CSS property that controls how the borders between table cells are displayed. It is used to define how the borders between table cells are displayed.
-
When using
border-collapse: separate
, there will be distinct borders and spaces between cells. The spacing between cells is adjusted with theborder-spacing
property. In this example, a space of 10px is set between each cell. -
When using
border-collapse: collapse
, the borders of adjacent cells are merged and displayed as a single border. As a result, the table has a more cohesive design.
As in this example, the border-collapse
property mainly has two values: separate
and collapse
.
-
separate
(default value):- When specifying
separate
, each cell border is drawn separately, and there is space between the cells. - It is used when you want to clearly distinguish the borders, as the cell borders are displayed apart.
- The space between cells can be adjusted with the
border-spacing
property.
- When specifying
-
collapse
:- When specifying
collapse
, the borders of adjacent cells are merged and displayed as a single border. - Since the borders overlap, the entire table has a unified appearance.
- Rows and columns of the table are displayed neatly, making it suitable for a simpler design.
- When specifying
The border-spacing
property
1table.border-spacing-example {
2 border-collapse: separate;
3
4 /* Set 5px spacing between columns and 20px spacing between rows */
5 border-spacing: 5px 20px;
6}
The border-spacing
property is a CSS property for specifying the spacing between cells in an HTML table. It helps adjust the space between table cells and control the visual margin. In this example, cell spacing is added as 5px
horizontally and 20px
vertically.
The border-spacing
property only takes effect on tables where border-collapse: separate;
is specified. If border-collapse: collapse;
is specified, this property is ineffective.
Usage
Values for the border-spacing
property are specified in pixels or other length units. It can be specified in the following two formats:.
- Single value
1table {
2 border-spacing: 10px;
3}
- When specifying a single value, the spacing between rows (top and bottom) and columns (left and right) is set to the same value.
In this example, a space of 10px
is added between all cells.
- Two values
1table {
2 border-spacing: 10px 20px;
3}
- When specifying two values, the first value sets the horizontal spacing between columns, and the second value sets the vertical spacing between rows.
In this example, the space between columns is 10px
, and the space between rows is 20px
.
The caption-side
property
1caption.caption-side-top {
2 caption-side: top; /* Display the caption at the top of the table */
3 font-weight: bold;
4 font-size: 1.2em;
5 margin-bottom: 10px;
6 background-color: #ccc;
7}
8
9caption.caption-side-bottom {
10 caption-side: bottom; /* Display the caption at the bottom of the table */
11 font-weight: bold;
12 font-size: 1.2em;
13 margin-top: 10px;
14 background-color: #ccc;
15}
The caption-side
property is a CSS property used to specify where the caption (<caption>
element) of an HTML table is displayed.
-
Specifying
top
displays the caption at the top of the table.- This is the default setting, and captions are often used as the title or description of the table.
-
Specifying
bottom
displays the caption at the bottom of the table.- Use this when you want to place explanations below the table.
empty-cells
property
1table.empty-cells-show {
2 empty-cells: show; /* Display empty cells */
3}
4
5table.empty-cells-hide {
6 empty-cells: hide; /* Display empty cells */
7}
The empty-cells
is a CSS property to control whether empty cells in an HTML table are displayed. By default, empty cells in a table also display borders, but you can use this property to control the display.
- Specifying
show
will display empty cells as well. This is the default behavior. - Specifying
hide
makes empty cells invisible. Borders and backgrounds of the cells will not be drawn.
You can follow along with the above article using Visual Studio Code on our YouTube channel. Please also check out the YouTube channel.