Descripción general
Debido al uso generalizado de elementos <table>
en widgets de terceros como calendarios y
selectores de fechas, las tablas de Bootstrap son opt-in. Agrega la clase base
.table
a cualquier <table>
, luego amplía con nuestras clases de modificadores
opcionales o estilos personalizados. No todos los estilos de tabla se heredan en Bootstrap, lo que significa
que cualquier tabla anidada se puede diseñar independientemente del padre.
Usando el marcado de tabla más básico, así es como se ven las tablas basadas en .table
en
Bootstrap.
# |
Primero |
Último |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Primero</th>
<th scope="col">Último</th>
<th scope="col">Handle</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1</th>
<td>Mark</td>
<td>Otto</td>
<td>@mdo</td>
</tr>
<tr>
<th scope="row">2</th>
<td>Jacob</td>
<td>Thornton</td>
<td>@fat</td>
</tr>
<tr>
<th scope="row">3</th>
<td colspan="2">Larry the Bird</td>
<td>@twitter</td>
</tr>
</tbody>
</table>
Variantes
Usa clases contextuales para colorear tablas, filas de tablas o celdas individuales.
Clase |
Encabezado |
Encabezado |
Por defecto |
Celda |
Celda |
Primary |
Celda |
Celda |
Secondary |
Celda |
Celda |
Success |
Celda |
Celda |
Danger |
Celda |
Celda |
Warning |
Celda |
Celda |
Info |
Celda |
Celda |
Light |
Celda |
Celda |
Dark |
Celda |
Celda |
<!-- En tablas -->
<table class="table-primary">...</table>
<table class="table-secondary">...</table>
<table class="table-success">...</table>
<table class="table-danger">...</table>
<table class="table-warning">...</table>
<table class="table-info">...</table>
<table class="table-light">...</table>
<table class="table-dark">...</table>
<!-- En filas -->
<tr class="table-primary">...</tr>
<tr class="table-secondary">...</tr>
<tr class="table-success">...</tr>
<tr class="table-danger">...</tr>
<tr class="table-warning">...</tr>
<tr class="table-info">...</tr>
<tr class="table-light">...</tr>
<tr class="table-dark">...</tr>
<!-- En celdas (`td` or `th`) -->
<tr>
<td class="table-primary">...</td>
<td class="table-secondary">...</td>
<td class="table-success">...</td>
<td class="table-danger">...</td>
<td class="table-warning">...</td>
<td class="table-info">...</td>
<td class="table-light">...</td>
<td class="table-dark">...</td>
</tr>
Transmitir significado a las tecnologías de
asistencia
El uso del color para agregar significado solo proporciona una indicación visual, que no se transmitirá a
los usuarios de tecnologías de asistencia, como los lectores de pantalla. Asegúrate de que la información
denotada por el color sea obvia a partir del contenido mismo (por ejemplo, el texto visible) o se incluya a
través de medios alternativos, como texto adicional oculto con la clase .visually-hidden
.
Tablas acentuadas
Filas de rayas
Usa .table-striped
para agregar rayas de cebra a cualquier fila de la tabla dentro de
<tbody>
.
# |
Primero |
Último |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-striped">
...
</table>
Estas clases también se pueden agregar a las variantes de la tabla:
# |
Primero |
Último |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-dark table-striped">
...
</table>
# |
Primero |
Último |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-success table-striped">
...
</table>
Filas con estado hover
Agrega .table-hover
para habilitar un estado hover en las filas de la tabla dentro de
<tbody>
.
# |
Primero |
Último |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-hover">
...
</table>
# |
Primero |
Último |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-dark table-hover">
...
</table>
Estas filas hover también se pueden combinar con la variante a rayas (.table-striped
):
# |
Primero |
Último |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-striped table-hover">
...
</table>
Filas y celdas active
Resalta una fila o celda de la tabla agregando una clase .table-active
.
# |
Nombre |
Apellido |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table">
<thead>
...
</thead>
<tbody>
<tr class="table-active">
...
</tr>
<tr>
...
</tr>
<tr>
<th scope="row">3</th>
<td colspan="2" class="table-active">Larry the Bird</td>
<td>@twitter</td>
</tr>
</tbody>
</table>
# |
Nombre |
Apellido |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-dark">
<thead>
...
</thead>
<tbody>
<tr class="table-active">
...
</tr>
<tr>
...
</tr>
<tr>
<th scope="row">3</th>
<td colspan="2" class="table-active">Larry the Bird</td>
<td>@twitter</td>
</tr>
</tbody>
</table>
¿Cómo funcionan las variantes y las tablas
acentuadas?
Para las tablas acentuadas (filas rayadas, filas
hover y tablas activas), usamos algunas técnicas para hacer que estos
efectos funcionen para todas nuestras variantes de tabla:
- Comenzamos configurando el fondo de una celda de tabla con la propiedad personalizada
--bs-table-bg
. Todas las variantes de la tabla establecen esa propiedad personalizada para
colorear las celdas de la tabla. De esta forma, no nos meteremos en problemas si se utilizan colores
semitransparentes como fondos de tablas.
- Luego agregamos una sombra en las celdas de la tabla con
box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);
para superponer cualquier
background-color
especificado. Debido a que usamos una gran extensión y sin desenfoque, el
color será monótono. Dado que --bs-table-accent-bg
no está configurado de forma predeterminada,
no tenemos una sombra predeterminada.
- Cuando se agregan las clases
.table-striped
, .table-hover
o
.table-active
, --bs-table-accent-bg
se establece en un color semitransparente para
colorear el fondo.
- Para cada variante de tabla, generamos un color
--bs-table-accent-bg
con el mayor contraste
según ese color. Por ejemplo, el accent color para .table-primary
es más oscuro mientras que
.table-dark
tiene un accent color más claro.
- Los colores del texto y del borde se generan de la misma manera y sus colores se heredan de forma
predeterminada.
Detrás de escena se ve así:
@mixin table-variant($state, $background) {
.table-#{$state} {
$color: color-contrast(opaque($body-bg, $background));
$hover-bg: mix($color, $background, percentage($table-hover-bg-factor));
$striped-bg: mix($color, $background, percentage($table-striped-bg-factor));
$active-bg: mix($color, $background, percentage($table-active-bg-factor));
$border-color: mix($color, $background, percentage($table-border-factor));
--#{$variable-prefix}table-color: #{$color};
--#{$variable-prefix}table-bg: #{$background};
--#{$variable-prefix}table-border-color: #{$border-color};
--#{$variable-prefix}table-striped-bg: #{$striped-bg};
--#{$variable-prefix}table-striped-color: #{color-contrast($striped-bg)};
--#{$variable-prefix}table-active-bg: #{$active-bg};
--#{$variable-prefix}table-active-color: #{color-contrast($active-bg)};
--#{$variable-prefix}table-hover-bg: #{$hover-bg};
--#{$variable-prefix}table-hover-color: #{color-contrast($hover-bg)};
color: var(--#{$variable-prefix}table-color);
border-color: var(--#{$variable-prefix}table-border-color);
}
}
Bordes de la tabla
Tablas bordeadas
Agrega .table-bordered
para mostrar bordes en todos los lados de la tabla y las celdas.
# |
Primero |
Último |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-bordered">
...
</table>
Se pueden agregar utilidades de color de borde para
cambiar los colores:
# |
Primero |
Último |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-bordered border-primary">
...
</table>
Tablas sin bordes
Agrega .table-borderless
para una tabla sin bordes.
# |
Primero |
Último |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-borderless">
...
</table>
# |
Primero |
Último |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-dark table-borderless">
...
</table>
Tablas compactas
Agrega .table-sm
para hacer que cualquier .table
sea más compacta cortando todo el
padding
de las celdas por la mitad.
# |
Primero |
Último |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-sm">
...
</table>
# |
Primero |
Último |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-dark table-sm">
...
</table>
Alineamiento vertical
Las celdas de la tabla de <thead>
siempre están alineadas verticalmente hacia abajo. Las
celdas de la tabla en <tbody>
heredan su alineación de <table>
y están
alineadas en la parte superior por defecto. Usa las clases vertical align para volver a alinear donde sea necesario.
Encabezado 1 |
Encabezado 2 |
Encabezado 3 |
Encabezado 4 |
Esta celda hereda vertical-align: middle; de la tabla |
Esta celda hereda vertical-align: middle; de la tabla |
Esta celda hereda vertical-align: middle; de la tabla |
Este es un texto de marcador de posición, destinado a ocupar bastante espacio vertical, para
demostrar cómo funciona la alineación vertical en las celdas anteriores. |
Esta celda hereda vertical-align: bottom; de la fila de la tabla |
Esta celda hereda vertical-align: bottom; de la fila de la tabla |
Esta celda hereda vertical-align: bottom; de la fila de la tabla |
Este es un texto de marcador de posición, destinado a ocupar bastante espacio vertical, para
demostrar cómo funciona la alineación vertical en las celdas anteriores. |
Esta celda hereda vertical-align: middle; de la tabla |
Esta celda hereda vertical-align: middle; de la tabla |
Esta celda está alineada en la parte superior. |
Este es un texto de marcador de posición, destinado a ocupar bastante espacio vertical, para
demostrar cómo funciona la alineación vertical en las celdas anteriores. |
<div class="table-responsive">
<table class="table align-middle">
<thead>
<tr>
...
</tr>
</thead>
<tbody>
<tr>
...
</tr>
<tr class="align-bottom">
...
</tr>
<tr>
<td>...</td>
<td>...</td>
<td class="align-top">Esta celda está alineada en la parte superior.</td>
<td>...</td>
</tr>
</tbody>
</table>
</div>
Anidamiento
Las tablas anidadas no heredan los estilos de borde, los estilos active y las variantes de tabla.
# |
Nombre |
Apellido |
Handle |
1 |
Mark |
Otto |
@mdo |
Encabezado |
Encabezado |
Encabezado |
A |
Nombre |
Apellido |
B |
Nombre |
Apellido |
C |
Nombre |
Apellido |
|
3 |
Larry |
the Bird |
@twitter |
<table class="table table-striped">
<thead>
...
</thead>
<tbody>
...
<tr>
<td colspan="4">
<table class="table mb-0">
...
</table>
</td>
</tr>
...
</tbody>
</table>
Cómo funciona el anidamiento
Para evitar que cualquier estilo se filtre a las tablas anidadas, usamos el selector combinador
secundario (>
) en nuestro CSS. Dado que necesitamos apuntar a todos los td
s y
th
s en thead
, tbody
y tfoot
, nuestro selector se vería
bastante largo sin él. Como tal, usamos el selector .table > :not(caption) > * > *
de
aspecto bastante extraño para apuntar a todos los td
s y th
s de .table
,
pero no a ninguna de las posibles tablas anidadas.
Ten en cuenta que si agregas <tr>
s como elementos secundarios directos de una tabla, esos
<tr>
se incluirán en un <tbody>
de forma predeterminada, lo que hará que
nuestros selectores funcionen según lo previsto.
Anatomía
Encabezado de tabla
De manera similar a las tablas y las tablas oscuras, usa las clases de modificadores
.table-light
o .table-dark
para hacer que <thead>
s aparezca gris
claro u oscuro.
# |
Nombre |
Apellido |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry |
the Bird |
@twitter |
<table class="table">
<thead class="table-light">
...
</thead>
<tbody>
...
</tbody>
</table>
# |
Nombre |
Apellido |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry |
the Bird |
@twitter |
<table class="table">
<thead class="table-dark">
...
</thead>
<tbody>
...
</tbody>
</table>
Pie de tabla
# |
Nombre |
Apellido |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry |
the Bird |
@twitter |
Footer |
Footer |
Footer |
Footer |
<table class="table">
<thead>
...
</thead>
<tbody>
...
</tbody>
<tfoot>
...
</tfoot>
</table>
Captions
Un <caption>
funciona como un encabezado para una tabla. Ayuda a los usuarios con lectores
de pantalla a encontrar una tabla y entender de qué se trata y decidir si quieren leerla.
Lista de usuarios
# |
Primero |
Último |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-sm">
<caption>Lista de usuarios</caption>
<thead>
...
</thead>
<tbody>
...
</tbody>
</table>
También puedes colocar <caption>
en la parte superior de la tabla con
.caption-top
.
Lista de usuarios
# |
Nombre |
Apellido |
Handle |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry |
the Bird |
@twitter |
<table class="table caption-top">
<caption>Lista de usuarios</caption>
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Nombre</th>
<th scope="col">Apellido</th>
<th scope="col">Handle</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1</th>
<td>Mark</td>
<td>Otto</td>
<td>@mdo</td>
</tr>
<tr>
<th scope="row">2</th>
<td>Jacob</td>
<td>Thornton</td>
<td>@fat</td>
</tr>
<tr>
<th scope="row">3</th>
<td>Larry</td>
<td>the Bird</td>
<td>@twitter</td>
</tr>
</tbody>
</table>
Tablas responsive
Las tablas responsive permiten que las tablas se desplacen horizontalmente con facilidad. Haz que cualquier
tabla responda en todas los viewports envolviendo una .table
con .table-responsive
.
O elije un breakpoint máximo con el que tener una tabla responsive usando
.table-responsive{-sm|-md|-lg|-xl|-xxl}
.
Recorte/truncamiento vertical
Las tablas responsive utilizan overflow-y: hidden
, que recorta cualquier contenido que vaya
más allá de los bordes inferior o superior de la tabla. En particular, esto puede recortar menús
desplegables y otros widgets de terceros.
Siempre responsive
En cada breakpoint, usa .table-responsive
para tablas de desplazamiento horizontal.
# |
Encabezado |
Encabezado |
Encabezado |
Encabezado |
Encabezado |
Encabezado |
Encabezado |
Encabezado |
Encabezado |
1 |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
2 |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
3 |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
<div class="table-responsive">
<table class="table">
...
</table>
</div>
Breakpoint specifico
Usa .table-responsive{-sm|-md|-lg|-xl|-xxl}
según sea necesario para crear tablas responsive
hasta un breakpoint particular. A partir de ese breakpoint, la tabla se comportará normalmente y no se
desplazará horizontalmente.
Estas tablas pueden aparecer rotas hasta que sus estilos responsive se apliquen a anchos de viewports
específicos.
# |
Encabezado |
Encabezado |
Encabezado |
Encabezado |
Encabezado |
Encabezado |
Encabezado |
Encabezado |
1 |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
2 |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
3 |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
# |
Encabezado |
Encabezado |
Encabezado |
Encabezado |
Encabezado |
Encabezado |
Encabezado |
Encabezado |
1 |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
2 |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
3 |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
# |
Encabezado |
Encabezado |
Encabezado |
Encabezado |
Encabezado |
Encabezado |
Encabezado |
Encabezado |
1 |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
2 |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
3 |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
# |
Encabezado |
Encabezado |
Encabezado |
Encabezado |
Encabezado |
Encabezado |
Encabezado |
Encabezado |
1 |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
2 |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
3 |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
# |
Encabezado |
Encabezado |
Encabezado |
Encabezado |
Encabezado |
Encabezado |
Encabezado |
Encabezado |
1 |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
2 |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
3 |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
# |
Encabezado |
Encabezado |
Encabezado |
Encabezado |
Encabezado |
Encabezado |
Encabezado |
Encabezado |
1 |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
2 |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
3 |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
Celda |
<div class="table-responsive">
<table class="table">
...
</table>
</div>
<div class="table-responsive-sm">
<table class="table">
...
</table>
</div>
<div class="table-responsive-md">
<table class="table">
...
</table>
</div>
<div class="table-responsive-lg">
<table class="table">
...
</table>
</div>
<div class="table-responsive-xl">
<table class="table">
...
</table>
</div>
<div class="table-responsive-xxl">
<table class="table">
...
</table>
</div>
Sass
Variables
$table-cell-padding-y: .5rem;
$table-cell-padding-x: .5rem;
$table-cell-padding-y-sm: .25rem;
$table-cell-padding-x-sm: .25rem;
$table-cell-vertical-align: top;
$table-color: $body-color;
$table-bg: transparent;
$table-accent-bg: transparent;
$table-th-font-weight: null;
$table-striped-color: $table-color;
$table-striped-bg-factor: .05;
$table-striped-bg: rgba($black, $table-striped-bg-factor);
$table-active-color: $table-color;
$table-active-bg-factor: .1;
$table-active-bg: rgba($black, $table-active-bg-factor);
$table-hover-color: $table-color;
$table-hover-bg-factor: .075;
$table-hover-bg: rgba($black, $table-hover-bg-factor);
$table-border-factor: .1;
$table-border-width: $border-width;
$table-border-color: $border-color;
$table-striped-order: odd;
$table-group-separator-color: currentColor;
$table-caption-color: $text-muted;
$table-bg-scale: -80%;
Loop
$table-variants: (
"primary": shift-color($primary, $table-bg-scale),
"secondary": shift-color($secondary, $table-bg-scale),
"success": shift-color($success, $table-bg-scale),
"info": shift-color($info, $table-bg-scale),
"warning": shift-color($warning, $table-bg-scale),
"danger": shift-color($danger, $table-bg-scale),
"light": $light,
"dark": $dark,
);
Personalización
- Las variables de factor (
$table-striped-bg-factor
, $table-active-bg-factor
&
$table-hover-bg-factor
) se utilizan para determinar el contraste en las variantes de la tabla.
- Además de las variantes de tablas claras y oscuras, los colores del tema se aclaran con la variable
$table-bg-scale
.