Обзор
Из-за повсеместного использования элементов <table>
в сторонних виджетах, таких как календари и средства выбора даты, таблицы Bootstrap имеют подписку. Добавьте базовый класс .table
к любому <table>
, затем расширьте с помощью наших дополнительных классов модификаторов или пользовательских стилей. Все стили таблиц не наследуются в Bootstrap, то есть любые вложенные таблицы могут быть стилизованы независимо от родительских.
Используя самую простую разметку таблиц, вот как таблицы на основе .table
выглядят в Bootstrap.
# |
Имя |
Фамилия |
Обращение |
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">Имя</th>
<th scope="col">Фамилия</th>
<th scope="col">Обращение</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>
Варианты
Используйте контекстные классы для раскрашивания таблиц, строк таблицы или отдельных ячеек.
Класс |
Заголовок |
Заголовок |
По умолчанию |
Ячейка |
Ячейка |
Primary |
Ячейка |
Ячейка |
Secondary |
Ячейка |
Ячейка |
Success |
Ячейка |
Ячейка |
Danger |
Ячейка |
Ячейка |
Warning |
Ячейка |
Ячейка |
Info |
Ячейка |
Ячейка |
Light |
Ячейка |
Ячейка |
Dark |
Ячейка |
Ячейка |
<!-- На таблицах -->
<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>
<!-- На строках -->
<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>
<!-- На ячейках (`td` или `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>
Передача смысла вспомогательным технологиям
Использование цвета для добавления смысла обеспечивает только визуальную индикацию, которая не будет передана пользователям вспомогательных технологий, таких как программы чтения с экрана. Убедитесь, что информация, обозначенная цветом, либо очевидна из самого содержимого (например, видимый текст), либо включена с помощью альтернативных средств, таких как дополнительный текст, скрытый с помощью класса .visually-hidden
.
Акцентированные таблицы
Полосатые строки
Используйте .table-striped
, чтобы добавить полосатую зебру к любой строке таблицы внутри <tbody>
.
# |
Имя |
Фамилия |
Обращение |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-striped">
...
</table>
Эти классы также можно добавить в варианты таблиц:
# |
Имя |
Фамилия |
Обращение |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-dark table-striped">
...
</table>
# |
Имя |
Фамилия |
Обращение |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-success table-striped">
...
</table>
Строки с наведением
Добавьте .table-hover
, чтобы включить состояние наведения курсора на строки таблицы внутри <tbody>
.
# |
Имя |
Фамилия |
Обращение |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-hover">
...
</table>
# |
Имя |
Фамилия |
Обращение |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-dark table-hover">
...
</table>
Эти строки с наведением также можно комбинировать с полосатым вариантом:
# |
Имя |
Фамилия |
Обращение |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-striped table-hover">
...
</table>
Активные таблицы
Выделите строку или ячейку таблицы, добавив класс .table-active
.
# |
Первый |
Последний |
Обработчик |
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>
# |
Первый |
Последний |
Обработчик |
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>
Как работают варианты и акцентированные таблицы?
Для таблиц с акцентом (полосатые строки, строки с наведением и активные таблицы)мы использовали некоторые методы, чтобы эти эффекты работали для все наши варианты таблиц:
- Мы начинаем с установки фона ячейки таблицы с помощью настраиваемого свойства
--bs-table-bg
. Затем все варианты таблицы устанавливают это настраиваемое свойство для раскрашивания ячеек таблицы. Таким образом, у нас не будет проблем, если полупрозрачные цвета используются в качестве фона стола.
- Затем мы добавляем тень вставки на ячейки таблицы с помощью
box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg);
на слой поверх любого указанного background-color
. Поскольку мы используем большой разброс и отсутствие размытия, цвет будет монотонным. Так как --bs-table-accent-bg
по умолчанию не установлен, у нас нет тени блока по умолчанию.
- Когда добавляются классы
.table-striped
, .table-hover
или .table-active
для --bs-table-accent-bg
устанавливается полупрозрачный цвет для раскрашивания фона.
- Для каждого варианта таблицы мы генерируем цвет
--bs-table-accent-bg
с самым высоким контрастом в зависимости от этого цвета. Например, основной цвет для .table-primary
темнее, а для .table-dark
светлее.
- Цвета текста и границ генерируются одинаково, а их цвета наследуются по умолчанию.
За кадром это выглядит так:
@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));
--#{$variable-prefix}table-bg: #{$background};
--#{$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: $color;
border-color: mix($color, $background, percentage($table-border-factor));
}
}
Границы таблицы
Таблицы с границами
Добавьте .table-bordered
для границ со всех сторон таблицы и ячеек.
# |
Имя |
Фамилия |
Обращение |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-bordered">
...
</table>
Для изменения цвета можно добавить утилиты цвета границы:
# |
Имя |
Фамилия |
Обращение |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-bordered border-primary">
...
</table>
Таблицы без границ
Добавьте .table-borderless
для таблицы без границ.
# |
Имя |
Фамилия |
Обращение |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-borderless">
...
</table>
# |
Имя |
Фамилия |
Обращение |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-dark table-borderless">
...
</table>
Маленькие таблицы
Добавьте .table-sm
, чтобы сделать любой .table
более компактным, разрезав все ячейки padding
пополам.
# |
Имя |
Фамилия |
Обращение |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-sm">
...
</table>
# |
Имя |
Фамилия |
Обращение |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-dark table-sm">
...
</table>
Вертикальное выравнивание
Ячейки таблицы <thead>
всегда выравниваются по вертикали по низу. Ячейки таблицы в <tbody>
наследуют свое выравнивание от <table>
и по умолчанию выравниваются по верхнему краю. Используйте классы вертикальное выравнивание для повторного выравнивания там, где это необходимо.
Заголовок 1 |
Заголовок 2 |
Заголовок 3 |
Заголовок 4 |
Эта ячейка наследует vertical-align: middle; из таблицы |
Эта ячейка наследует vertical-align: middle; из таблицы |
Эта ячейка наследует vertical-align: middle; из таблицы |
Это текст-заполнитель, предназначенный для того, чтобы занять довольно много места по вертикали, чтобы продемонстрировать, как работает вертикальное выравнивание в предыдущих ячейках. |
Эта ячейка наследует vertical-align: bottom; из строки таблицы |
Эта ячейка наследует vertical-align: bottom; из строки таблицы |
Эта ячейка наследует vertical-align: bottom; из строки таблицы |
Это текст-заполнитель, предназначенный для того, чтобы занять довольно много места по вертикали, чтобы продемонстрировать, как работает вертикальное выравнивание в предыдущих ячейках. |
Эта ячейка наследует vertical-align: middle; из таблицы |
Эта ячейка наследует vertical-align: middle; из таблицы |
Эта ячейка выровнена по верхнему краю. |
Это текст-заполнитель, предназначенный для того, чтобы занять довольно много места по вертикали, чтобы продемонстрировать, как работает вертикальное выравнивание в предыдущих ячейках. |
<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">Эта ячейка выровнена по верхнему краю.</td>
<td>...</td>
</tr>
</tbody>
</table>
</div>
Вложенность
Стили границ, активные стили и варианты таблиц не наследуются вложенными таблицами.
# |
Первый |
Последний |
Обработчик |
1 |
Mark |
Otto |
@mdo |
Заголовок |
Заголовок |
Заголовок |
А |
Первый |
Последний |
Б |
Первый |
Последний |
В |
Первый |
Последний |
|
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>
Как работает вложение
Чтобы предотвратить попадание любых стилей во вложенные таблицы, мы используем селектор дочернего комбинатора (>
) в нашем CSS. Поскольку нам нужно настроить таргетинг на все td
и th
в thead
, tbody
и tfoot
, наш селектор без этого выглядел бы довольно долго. Таким образом, мы используем довольно странно выглядящий селектор .table > :not(caption) > * > *
для нацеливания на все td
и th
в .table
, но ни на одну из потенциально вложенных таблиц.
Обратите внимание, что если Вы добавите <tr>
в качестве прямых дочерних элементов таблицы, эти <tr>
по умолчанию будут заключены в <tbody>
, что заставит наши селекторы работать должным образом.
Анатомия
Верхний колонтитул таблицы
Подобно таблицам и темным таблицам, используйте классы-модификаторы .table-light
или .table-dark
чтобы <thead>
казались светлыми или темно-серыми.
# |
Первый |
Последний |
Обработчик |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry |
the Bird |
@twitter |
<table class="table">
<thead class="table-light">
...
</thead>
<tbody>
...
</tbody>
</table>
# |
Первый |
Последний |
Обработчик |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry |
the Bird |
@twitter |
<table class="table">
<thead class="table-dark">
...
</thead>
<tbody>
...
</tbody>
</table>
Нижний колонтитул таблицы
# |
Первый |
Последний |
Обработчик |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry |
the Bird |
@twitter |
Подвал |
Подвал |
Подвал |
Подвал |
<table class="table">
<thead>
...
</thead>
<tbody>
...
</tbody>
<tfoot>
...
</tfoot>
</table>
Заголовки
<caption>
действует как заголовок таблицы. Это помогает пользователям программ чтения с экрана найти таблицу, понять, о чем она, и решить, хотят ли они ее прочитать.
Список пользователей
# |
Имя |
Фамилия |
Обращение |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry the Bird |
@twitter |
<table class="table table-sm">
<caption>Список пользователей</caption>
<thead>
...
</thead>
<tbody>
...
</tbody>
</table>
Вы также можете поместить <caption>
в верхнюю часть таблицы с помощью .caption-top
.
Список пользователей
# |
Первый |
Последний |
Обработчик |
1 |
Mark |
Otto |
@mdo |
2 |
Jacob |
Thornton |
@fat |
3 |
Larry |
the Bird |
@twitter |
<table class="table caption-top">
<caption>Список пользователей</caption>
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Первый</th>
<th scope="col">Последний</th>
<th scope="col">Обработчик</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>
Адаптивные таблицы
Адаптивные таблицы позволяют с легкостью прокручивать таблицы по горизонтали. Сделайте любую таблицу адаптивной во всех окнах просмотра, заключив в .table
с .table-responsive
. Или выберите максимальную контрольную точку, до которой будет реагировать таблица, используя .table-responsive{-sm|-md|-lg|-xl|-xxl}
.
Вертикальная обрезка/усечение
Адаптивные таблицы используют overflow-y: hidden
, который отсекает любое содержимое, выходящее за нижний или верхний края таблицы. В частности, это может вырезать раскрывающиеся меню и другие сторонние виджеты.
Всегда адаптивный
Через каждую контрольную точку используйте .table-responsive
для горизонтальной прокрутки таблиц.
# |
Заголовок |
Заголовок |
Заголовок |
Заголовок |
Заголовок |
Заголовок |
Заголовок |
Заголовок |
Заголовок |
1 |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
2 |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
3 |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
<div class="table-responsive">
<table class="table">
...
</table>
</div>
Специфическая контрольная точка
Используйте .table-responsive{-sm|-md|-lg|-xl|-xxl}
по мере необходимости для создания адаптивных таблиц до определенной контрольной точки. С этой контрольной точки и выше таблица будет вести себя нормально и не будет прокручиваться по горизонтали.
Эти таблицы могут отображаться неработающими до тех пор, пока их адаптивные стили не будут применены к определенной ширине области просмотра.
# |
Заголовок |
Заголовок |
Заголовок |
Заголовок |
Заголовок |
Заголовок |
Заголовок |
Заголовок |
1 |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
2 |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
3 |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
# |
Заголовок |
Заголовок |
Заголовок |
Заголовок |
Заголовок |
Заголовок |
Заголовок |
Заголовок |
1 |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
2 |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
3 |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
# |
Заголовок |
Заголовок |
Заголовок |
Заголовок |
Заголовок |
Заголовок |
Заголовок |
Заголовок |
1 |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
2 |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
3 |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
# |
Заголовок |
Заголовок |
Заголовок |
Заголовок |
Заголовок |
Заголовок |
Заголовок |
Заголовок |
1 |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
2 |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
3 |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
# |
Заголовок |
Заголовок |
Заголовок |
Заголовок |
Заголовок |
Заголовок |
Заголовок |
Заголовок |
1 |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
2 |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
3 |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
# |
Заголовок |
Заголовок |
Заголовок |
Заголовок |
Заголовок |
Заголовок |
Заголовок |
Заголовок |
1 |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
2 |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
3 |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
Ячейка |
<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
Переменные
$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%;
Цикл
$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,
);
Кастомизация
- Факторные переменные (
$table-striped-bg-factor
, $table-active-bg-factor
и $table-hover-bg-factor
) используются для определения контраста в вариантах таблиц.
- Кроме светлого и темного вариантов таблицы, цвета темы осветляются переменной
$table-bg-level
.