---
layout: docs
title: Tables
description: Documentation and examples for opt-in styling of tables (given their prevalent use in JavaScript plugins) with Bootstrap.
group: content
toc: true
---
## Examples
Due to the widespread use of tables across third-party widgets like calendars and date pickers, we've designed our tables to be **opt-in**. Just add the base class `.table` to any `
`, then extend with custom styles or our various included modifier classes.
Using the most basic table markup, here's how `.table`-based tables look in Bootstrap. **All table styles are inherited in Bootstrap 4**, meaning any nested tables will be styled in the same manner as the parent.
{% capture example %}
| # |
First |
Last |
Handle |
| 1 |
Mark |
Otto |
@mdo |
| 2 |
Jacob |
Thornton |
@fat |
| 3 |
Larry |
the Bird |
@twitter |
{% endcapture %}
{% include example.html content=example %}
You can also invert the colors—with light text on dark backgrounds—with `.table-dark`.
{% capture example %}
| # |
First |
Last |
Handle |
| 1 |
Mark |
Otto |
@mdo |
| 2 |
Jacob |
Thornton |
@fat |
| 3 |
Larry |
the Bird |
@twitter |
{% endcapture %}
{% include example.html content=example %}
## Table head options
Similar to tables and dark tables, use the modifier classes `.thead-light` or `.thead-dark` to make ``s appear light or dark gray.
{% capture example %}
| # |
First |
Last |
Handle |
| 1 |
Mark |
Otto |
@mdo |
| 2 |
Jacob |
Thornton |
@fat |
| 3 |
Larry |
the Bird |
@twitter |
| # |
First |
Last |
Handle |
| 1 |
Mark |
Otto |
@mdo |
| 2 |
Jacob |
Thornton |
@fat |
| 3 |
Larry |
the Bird |
@twitter |
{% endcapture %}
{% include example.html content=example %}
## Striped rows
Use `.table-striped` to add zebra-striping to any table row within the ``.
{% capture example %}
| # |
First |
Last |
Handle |
| 1 |
Mark |
Otto |
@mdo |
| 2 |
Jacob |
Thornton |
@fat |
| 3 |
Larry |
the Bird |
@twitter |
{% endcapture %}
{% include example.html content=example %}
{% capture example %}
| # |
First |
Last |
Handle |
| 1 |
Mark |
Otto |
@mdo |
| 2 |
Jacob |
Thornton |
@fat |
| 3 |
Larry |
the Bird |
@twitter |
{% endcapture %}
{% include example.html content=example %}
## Bordered table
Add `.table-bordered` for borders on all sides of the table and cells.
{% capture example %}
| # |
First |
Last |
Handle |
| 1 |
Mark |
Otto |
@mdo |
| 2 |
Jacob |
Thornton |
@fat |
| 3 |
Larry the Bird |
@twitter |
{% endcapture %}
{% include example.html content=example %}
{% capture example %}
| # |
First |
Last |
Handle |
| 1 |
Mark |
Otto |
@mdo |
| 2 |
Jacob |
Thornton |
@fat |
| 3 |
Larry the Bird |
@twitter |
{% endcapture %}
{% include example.html content=example %}
## Borderless table
Add `.table-borderless` for a table without borders.
{% capture example %}
| # |
First |
Last |
Handle |
| 1 |
Mark |
Otto |
@mdo |
| 2 |
Jacob |
Thornton |
@fat |
| 3 |
Larry the Bird |
@twitter |
{% endcapture %}
{% include example.html content=example %}
`.table-borderless` can also be used on dark tables.
{% capture example %}
| # |
First |
Last |
Handle |
| 1 |
Mark |
Otto |
@mdo |
| 2 |
Jacob |
Thornton |
@fat |
| 3 |
Larry the Bird |
@twitter |
{% endcapture %}
{% include example.html content=example %}
## Hoverable rows
Add `.table-hover` to enable a hover state on table rows within a ``.
{% capture example %}
| # |
First |
Last |
Handle |
| 1 |
Mark |
Otto |
@mdo |
| 2 |
Jacob |
Thornton |
@fat |
| 3 |
Larry the Bird |
@twitter |
{% endcapture %}
{% include example.html content=example %}
{% capture example %}
| # |
First |
Last |
Handle |
| 1 |
Mark |
Otto |
@mdo |
| 2 |
Jacob |
Thornton |
@fat |
| 3 |
Larry the Bird |
@twitter |
{% endcapture %}
{% include example.html content=example %}
## Small table
Add `.table-sm` to make tables more compact by cutting cell padding in half.
{% capture example %}
| # |
First |
Last |
Handle |
| 1 |
Mark |
Otto |
@mdo |
| 2 |
Jacob |
Thornton |
@fat |
| 3 |
Larry the Bird |
@twitter |
{% endcapture %}
{% include example.html content=example %}
{% capture example %}
| # |
First |
Last |
Handle |
| 1 |
Mark |
Otto |
@mdo |
| 2 |
Jacob |
Thornton |
@fat |
| 3 |
Larry the Bird |
@twitter |
{% endcapture %}
{% include example.html content=example %}
## Contextual classes
Use contextual classes to color table rows or individual cells.
| Class |
Heading |
Heading |
| Active |
Cell |
Cell |
| Default |
Cell |
Cell |
{% for color in site.data.theme-colors %}
| {{ color.name | capitalize }} |
Cell |
Cell |
{% endfor %}
{% highlight html %}
...
{% for color in site.data.theme-colors %}
...
{% endfor %}
| ... |
{% for color in site.data.theme-colors %}
... | {% endfor %}
{% endhighlight %}
Regular table background variants are not available with the dark table, however, you may use [text or background utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/colors/) to achieve similar styles.
| # |
Heading |
Heading |
| 1 |
Cell |
Cell |
| 2 |
Cell |
Cell |
| 3 |
Cell |
Cell |
| 4 |
Cell |
Cell |
| 5 |
Cell |
Cell |
| 6 |
Cell |
Cell |
| 7 |
Cell |
Cell |
| 8 |
Cell |
Cell |
| 9 |
Cell |
Cell |
{% highlight html %}
...
...
...
...
...
| ... |
... |
... |
... |
... |
{% endhighlight %}
{% include callout-warning-color-assistive-technologies.md %}
Create responsive tables by wrapping any `.table` with `.table-responsive{-sm|-md|-lg|-xl}`, making the table scroll horizontally at each `max-width` breakpoint of up to (but not including) 576px, 768px, 992px, and 1120px, respectively.
{% include callout-info-mediaqueries-breakpoints.md %}
## Captions
A `` functions like a heading for a table. It helps users with screen readers to find a table and understand what it's about and decide if they want to read it.
{% capture example %}
List of users
| # |
First |
Last |
Handle |
| 1 |
Mark |
Otto |
@mdo |
| 2 |
Jacob |
Thornton |
@fat |
| 3 |
Larry |
the Bird |
@twitter |
{% endcapture %}
{% include example.html content=example %}
## Responsive tables
Responsive tables allow tables to be scrolled horizontally with ease. Make any table responsive across all viewports by wrapping a `.table` with `.table-responsive`. Or, pick a maximum breakpoint with which to have a responsive table up to by using `.table-responsive{-sm|-md|-lg|-xl}`.
{% capture callout %}
##### Vertical clipping/truncation
Responsive tables make use of `overflow-y: hidden`, which clips off any content that goes beyond the bottom or top edges of the table. In particular, this can clip off dropdown menus and other third-party widgets.
{% endcapture %}
{% include callout.html content=callout type="warning" %}
### Always responsive
Across every breakpoint, use `.table-responsive` for horizontally scrolling tables.
| # |
Heading |
Heading |
Heading |
Heading |
Heading |
Heading |
Heading |
Heading |
Heading |
| 1 |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
| 2 |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
| 3 |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
Cell |
{% highlight html %}
{% endhighlight %}
### Breakpoint specific
Use `.table-responsive{-sm|-md|-lg|-xl}` as needed to create responsive tables up to a particular breakpoint. From that breakpoint and up, the table will behave normally and not scroll horizontally.
{% for bp in site.data.breakpoints %}{% unless bp.breakpoint == "xs" %}
| # |
Heading |
Heading |
Heading |
Heading |
Heading |
| 1 |
Cell |
Cell |
Cell |
Cell |
Cell |
| 2 |
Cell |
Cell |
Cell |
Cell |
Cell |
| 3 |
Cell |
Cell |
Cell |
Cell |
Cell |
{% endunless %}{% endfor %}
{% highlight html %}
{% for bp in site.data.breakpoints %}{% unless bp.breakpoint == "xs" %}
{% endunless %}{% endfor %}
{% endhighlight %}