The caption-side property places a table’s <caption> on the block-start or block-end side of the table. In horizontal left-to-right writing, that means above (top) or below (bottom).
It applies to table-caption elements and is inherited. The initial value is top. Placement follows the table’s writing-mode.
Unsupported logical values.
The spec also defines inline-start and inline-end, but no browsers support them yet. Use top and bottom only.
Syntax
CSS Syntax
syntax.css
caption-side:top | bottom | initial | inherit;
Values
Property Values
Value
Description
Try it
top
Default. Places the caption at the block-start side of the table
Set on table.caption-side on the table is inherited by the caption.
Same result. The caption still ends up below the table with bottom.
Handy for many tables. One rule on a shared table class can position every caption.
Override when needed. A more specific rule on caption can still change one table.
Edge Cases & Pitfalls
Most issues come from missing captions or unsupported values.
html
Needs a real <caption>
caption-side only positions a caption element. A styled <p> above the table is not a caption.
order
Keep caption first in the markup
Put <caption> as the first child of <table>. CSS moves where it is drawn, not where it belongs in the document.
logical
inline-start / inline-end are unsupported
Those values exist in the logical properties module, but browsers do not implement them. Use top and bottom.
writing
Sides follow writing-mode
top and bottom are block edges. With a vertical writing-mode, those edges are not the same as “above” and “below” on screen.
a11y
Caption text still matters most
Position helps layout. A meaningful caption helps people understand the table. Empty captions help no one.
Compatibility
Browser Support
caption-side is a browser table layout property. Node.js, Deno, and Bun do not apply it.
✓ Baseline · Widely available
caption-side
top and bottom: Chrome 1+, Firefox 1+, Safari 1+, Edge 12+, IE 8+. Logical inline values are not supported.
99%top / bottom
Google Chrome1+
Full
Mozilla Firefox1+
Full
Apple Safari1+
Full
Microsoft Edge12+
Full
OperaSupported
Full
Samsung InternetSupported
Full
Internet Explorer8+
Full
caption-sideWidely supported
Bottom line: Safe to use top and bottom everywhere. Skip inline-start and inline-end until browsers catch up.
Remember
Key Takeaways
Role: place a table caption at the block-start (top) or block-end (bottom) side.
Common values:top and bottom.
Initial value:top. Inherited. Applies to table-caption elements.
Accessibility: use a real, meaningful <caption> — position alone is not enough.
One line:caption-side puts the table caption above or below — top by default, bottom when you want a note under the data.
Frequently Asked Questions
It places a table's caption above or below the table box. Use top for a title above the table, or bottom for a note below it.
The initial value is top, so the caption sits at the block-start side of the table by default.
It applies to table-caption elements (the HTML caption inside a table). Because it is inherited, you can also set it on the table.
top puts the caption at the block-start edge of the table. bottom puts it at the block-end edge. In horizontal left-to-right writing, that means above and below.
Those logical values are defined in CSS Logical Properties, but browsers do not support them yet. Stick to top and bottom.
It is Baseline and widely available: Chrome 1+, Firefox 1+, Safari 1+, Edge 12+. It is a browser layout property, not a Node.js feature.