Таблица
Table оформляет обычную <table>, которую вы пишете сами, и даёт прокрутить её с клавиатуры, если она не помещается по ширине.
| Region | Q1 | Q2 |
|---|---|---|
| North | 1,204 | 1,310 |
| South | 987 | 1,045 |
| Total | 2,191 | 2,355 |
<tk-table>
<table>
<caption>Quarterly revenue by region</caption>
<thead><tr><th scope="col">Region</th><th scope="col" data-numeric>Q1</th><th scope="col" data-numeric>Q2</th></tr></thead>
<tbody>
<tr><th scope="row">North</th><td data-numeric>1,204</td><td data-numeric>1,310</td></tr>
<tr><th scope="row">South</th><td data-numeric>987</td><td data-numeric>1,045</td></tr>
</tbody>
<tfoot><tr><th scope="row">Total</th><td data-numeric>2,191</td><td data-numeric>2,355</td></tr></tfoot>
</table>
</tk-table>Анатомия
| Часть | Что это |
|---|---|
tk-table |
контейнер с рамкой и скруглёнными углами |
| слот по умолчанию | ваша <table> с <caption>, <thead>, <tbody> и <tfoot> |
<caption> |
полоса заголовка; называет таблицу |
<thead> |
строка шапки, средним начертанием второстепенного цвета |
<th scope="row"> |
заголовок строки, средним начертанием |
<tfoot> |
строка итогов, полужирным |
part scroll |
контейнер прокрутки вокруг таблицы |
Плотность
| Service | Status |
|---|---|
| Payments | Investigating |
| Search | Resolved |
<tk-table density="compact">
<table>
<caption>Open incidents</caption>
<thead><tr><th scope="col">Service</th><th scope="col">Status</th></tr></thead>
<tbody><tr><td>Payments</td><td>Investigating</td></tr><tr><td>Search</td><td>Resolved</td></tr></tbody>
</table>
</tk-table>density |
Отступы ячейки |
|---|---|
comfortable (по умолчанию) |
space-12 × space-16 |
compact |
space-8 × space-12 |
Настройки
| Name | Role |
|---|---|
| Alice Chen | Design |
| Bo Nguyen | Engineering |
| Carla Diaz | Research |
<tk-table zebra hover header-fill>
<table>
<caption>Team members</caption>
<thead><tr><th scope="col">Name</th><th scope="col">Role</th></tr></thead>
<tbody><tr><td>Alice Chen</td><td>Design</td></tr><tr><td>Bo Nguyen</td><td>Engineering</td></tr><tr><td>Carla Diaz</td><td>Research</td></tr></tbody>
</table>
</tk-table>zebra: закрашивает каждую вторую строку. Полезно в широких плотных таблицах.hover: подсвечивает строку под курсором. Это может намекать, что строка кликабельна, поэтому включайте его, только когда он помогает не потерять строку.header-fill: заливает шапку спокойным фоном. По умолчанию шапка без заливки.
Полосы и подсветка — украшение. Смысл несут заголовки и текст ячеек.
Закреплённая шапка
sticky оставляет шапку на виду при прокрутке таблицы. Для этого у part scroll должна
быть максимальная высота.
<style>
tk-table::part(scroll) { max-height: 320px; }
</style>
<tk-table sticky>
<table>…</table>
</tk-table>Класс
Класс tk-table оформляет таблицу без элемента. Он принимает те же настройки в виде
атрибутов data-*, но области прокрутки у него нет: таблица шире контейнера обрезается.
Если таблица может не поместиться, используйте <tk-table>.
| Action | Keys |
|---|---|
| Search | Ctrl K |
| Save | Ctrl S |
<div class="tk-table" data-density="compact" data-zebra>
<table>
<caption>Shortcuts</caption>
<thead><tr><th scope="col">Action</th><th scope="col">Keys</th></tr></thead>
<tbody><tr><td>Search</td><td>Ctrl K</td></tr><tr><td>Save</td><td>Ctrl S</td></tr></tbody>
</table>
</div>Когда использовать
- Таблица — для данных в строках и столбцах с заголовками.
- Чтобы сортировать, выбирать, листать страницы или раскрывать строки, берите
Data table . Table только оформляет разметку и ничего не строит из данных. Выглядят они одинаково. - Обычной markdown-таблице в
Prose ничего не нужно. Table нужна, когда требуется плотность, полосы, закреплённая шапка или прокрутка с клавиатуры. - Не верстайте таблицей макет.
Как писать таблицу
Table оформляет вашу разметку и никогда не меняет её структуру.
- У каждой таблицы должен быть
<caption>, а если его нет, тоlabel. Он называет таблицу и её область прокрутки. - Размечайте заголовки через
scope:<th scope="col">для столбцов,<th scope="row">для строк. - Ставьте
data-numericна ячейки с числами и на их заголовок. Они выравниваются по концу, а цифры встают друг под другом. - Другие ячейки выравнивайте через
data-align="center"илиdata-align="end".
Можно / нельзя
| ✅ Можно | ❌ Нельзя |
|---|---|
Разметка <table> с <caption> и scope |
Таблица из div или без подписи |
data-numeric на столбцах с числами |
Числа, выровненные по началу |
<tk-table>, если таблица может быть шире контейнера |
Широкая таблица в классе без элемента: она обрежется |
max-height у ::part(scroll) для sticky |
Ждать, что sticky заработает без высоты |
| Дописывать сортировку или выбор к Table вручную |
Связанные
Data table : тот же вид, но строится из данных, с сортировкой, выбором и страницами.Prose : оформляет обычные markdown-таблицы.Scroll area : прокручиваемая область для другого содержимого.
API
Атрибуты
| Атрибут | Тип | По умолчанию | Что делает |
|---|---|---|---|
density |
comfortable | compact |
comfortable |
отступы ячеек |
zebra |
boolean | false |
закрашивает каждую вторую строку |
hover |
boolean | false |
подсвечивает строку под курсором |
header-fill |
boolean | false |
заливает шапку |
sticky |
boolean | false |
оставляет шапку на виду; нужна высота у ::part(scroll) |
label |
string | называет область прокрутки; если не задан, берётся <caption> |
Слоты
| Слот | Содержимое |
|---|---|
| по умолчанию | одна <table> |
Атрибуты ячеек
| Атрибут | Где | Что делает |
|---|---|---|
data-numeric |
th, td |
выравнивает по концу, цифры одной ширины |
data-align |
th, td |
center или end |
События
Нет.
CSS
::part(scroll): контейнер прокрутки. Для закреплённой шапки задайте емуmax-height.
Токены
| Элемент | Токены |
|---|---|
| контейнер | border/subtle, radius-12 |
| подпись | text/default, среднее начертание |
| шапка | text/secondary, среднее начертание; с header-fill — surface/subtle |
| заголовок строки | text/default, среднее начертание |
| ячейки | text/default, Body Small (14/20) |
| линии строк и итогов | border/subtle |
| строка итогов | text/default, полужирный |
| строка-полоса | surface/subtle |
| строка под курсором | state/hover |
| закреплённая шапка | surface/default, с header-fill — surface/subtle |
Рамка фокуса — border/accent/focus. Значения по темам:
Доступность
Встроено:
- Ваша разметка остаётся как есть, поэтому
<caption>,<thead>иscopeработают для скринридеров. - Если таблица шире контейнера, контейнер прокрутки становится остановкой Tab и областью с
именем из подписи или
label. Если помещается, ни того ни другого нет. - Рамка фокуса рисуется внутри контейнера: её не обрежет карточка или диалог вокруг и не закроет закреплённая шапка.
- Закреплённая шапка ничего не меняет для скринридеров.
На вашей стороне:
- Пишите
<caption>,<th scope="col">и<th scope="row">. Table их не добавляет. - Таблице без подписи дайте имя через
label. - Не передавайте смысл только полосами или цветом.
| Клавиша | Действие |
|---|---|
Tab |
переводит фокус на контейнер прокрутки, если таблица не помещается |
← → ↑ ↓ |
прокручивают таблицу в фокусе |