`caption-side` CSS property
Baseline Widely available
This feature is well established and works across many devices and browser versions. It's been available across browsers since July 2015.
The caption-side CSS property puts the content of a table's <caption> on the specified side. The values are relative to the writing-mode of the table.
Try it
caption-side: top;
caption-side: bottom;
<section class="default-example" id="default-example">
<table class="transition-all" id="example-element">
<caption>
Famous animals
</caption>
<tbody>
<tr>
<th>Name</th>
<th>Location</th>
</tr>
<tr>
<td>Giraffe</td>
<td>Africa</td>
</tr>
<tr>
<td>Penguin</td>
<td>Antarctica</td>
</tr>
<tr>
<td>Sloth</td>
<td>South America</td>
</tr>
<tr>
<td>Tiger</td>
<td>Asia</td>
</tr>
</tbody>
</table>
</section>
table {
font-size: 1.2rem;
text-align: left;
color: black;
}
th,
td {
padding: 0.2rem 1rem;
}
caption {
background: #ffcc33;
padding: 0.5rem 1rem;
}
tr {
background: #eeeeee;
}
tr:nth-child(even) {
background: #cccccc;
}
Syntax
/* Directional values */ caption-side: top; caption-side: bottom; /* Global values */ caption-side: inherit; caption-side: initial; caption-side: revert; caption-side: revert-layer; caption-side: unset;
Values
This property is specified as one of the following keyword values:
-
top - The caption box should be positioned at the block start side of the table.
-
bottom - The caption box should be positioned at the block end side of the table.
Note: The CSS logical properties and values module defines two logical values, inline-start and inline-end, to position the caption box at the inline start edge and inline end edge of the table, respectively. These values are not supported in any browsers.
Formal definition
| Initial value | top |
|---|---|
| Applies to | table-caption elements |
| Inherited | yes |
| Computed value | as specified |
| Animation type | discrete |
Formal syntax
caption-side =
top |
bottom
Examples
Setting captions above and below
HTML
<table class="top">
<caption>
Caption ABOVE the table
</caption>
<tbody>
<tr>
<td>Some data</td>
<td>Some more data</td>
</tr>
</tbody>
</table>
<br />
<table class="bottom">
<caption>
Caption BELOW the table
</caption>
<tbody>
<tr>
<td>Some data</td>
<td>Some more data</td>
</tr>
</tbody>
</table>
CSS
.top caption {
caption-side: top;
}
.bottom caption {
caption-side: bottom;
}
table {
border: 1px solid red;
}
td {
border: 1px solid blue;
}
Result
Specifications
| Specification |
|---|
| Cascading Style Sheets Level 2 # propdef-caption-side |
| CSS Logical Properties and Values Module Level 1 # caption-side |
Browser compatibility
| Desktop | Mobile | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | |
caption-side |
1 |
12 |
1 |
4 |
1 |
18 |
4 |
14 |
1 |
1.0 |
4.4 |
1 |
bottom |
1 |
79 |
1 |
15 |
1 |
18 |
4 |
14 |
1 |
1.0 |
4.4 |
1 |
bottom-outside |
No |
No |
1–87 |
No |
preview |
No |
4–87 |
No |
No |
No |
No |
No |
left |
No |
No |
1–87 |
No |
1–17 |
No |
4–87 |
No |
1–17 |
No |
No |
1–17 |
right |
No |
No |
1–87 |
No |
1–17 |
No |
4–87 |
No |
1–17 |
No |
No |
1–17 |
top |
1 |
79 |
1 |
15 |
1 |
18 |
4 |
14 |
1 |
1.0 |
4.4 |
1 |
top-outside |
No |
No |
1–87 |
No |
preview |
No |
4–87 |
No |
No |
No |
No |
No |
writing-mode_relative_values |
No |
No |
42 |
No |
No |
No |
42 |
No |
No |
No |
No |
No |
See also
<caption>- CSS table module
- CSS logical properties and values module
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/caption-side