<table> – елемент таблиці

{{HTMLSidebar}}

Елемент HTML <table> представляє табличні дані, тобто інформацію, представлену у двовимірній таблиці, що складається з рядів та колонок комірок, що містять дані.

Спробуйте його в дії

Категорії вмісту Потоковий вміст
Дозволений вміст У такому порядку:
  1. необов'язковий елемент <caption>,
  2. нуль чи більше елементів <colgroup>,
  3. необов'язковий елемент <thead>,
  4. щось одне з наступного:
    • нуль чи більше елементів <tbody>
    • нуль чи більше елементів <tr>
  5. необов'язковий елемент <tfoot>
Упущення тега Немає, обидва: і початковий, і кінцевий теги — обов\'язкові.
Дозволені батьківські елементи Усі елементи, що приймають потоковий вміст
Неявна роль ARIA table
Дозволені ролі ARIA Всі
Інтерфейс DOM HTMLTableElement

Атрибути

Цей елемент включає глобальні атрибути.

Нерекомендовані атрибути

align

Цей перелічуваний атрибут показує, як таблиця повинна шикуватися всередині контейнерного документа. Може мати наступні значення:

  • left: таблиця виводиться з лівого боку документа;
  • center: таблиця виводиться в центрі документа;
  • right: таблиця виводиться з правого боку документа.

Щоб отримати подібний до атрибута align ефект, слід задати margin-left і margin-right:

  • left: margin-right: auto; margin-left: 0;
  • center: margin-right: auto; margin-left: auto;
  • right: margin-right: 0; margin-left: auto;
bgcolor

Колір тла таблиці. Є шестицифровим шістнадцятковим кодом RGB з префіксом '#'. Також може бути використане одне з наперед визначених колірних ключових слів.

Подібного ефекту можна досягнути за допомогою властивості CSS background-color.

border

Цей цілочисловий атрибут визначає у пікселях розмір рамки, що оточує таблицю. Якщо задано 0, то атрибут frame отримує порожнє значення.

Подібного ефекту можна досягнути за допомогою властивості-скорочення CSS border.

cellpadding

Цей атрибут визначає проміжок між вмістом комірки та її межами, показаними чи ні. Якщо розмір cellpadding визначений у пікселях, то цей піксельний простір буде застосований до всіх чотирьох сторін вмісту комірки. Якщо розмір визначений за допомогою відсоткового значення, то вміст буде центрований, і загальний вертикальний простір (згори та внизу) представлятиме це значення. Те саме діє для загального горизонтального простору (зліва та справа).

Подібного ефекту можна досягнути, застосувавши властивість border-collapse зі значенням collapse до елемента <table>, і властивість padding до елементів <td>.

cellspacing

Цей атрибут визначає розмір простору між двома комірками у відсоткових значеннях чи пікселях. Він застосовується і по горизонталі, і по вертикалі, до простору між верхом таблиці та комірками першого ряду, лівого боку таблиці та першої колонки, правого боку таблиці та останньої колонки, і низу таблиці та останнього ряду.

Подібного ефекту можна досягнути, застосувавши властивість border-spacing до елемента <table>. border-spacing ніяк не діє, якщо border-collapse має значення collapse.

frame

Цей атрибут визначає, який бік рамок, що оточують таблицю, повинен бути показаний.

Подібного ефекту можна досягнути за допомогою властивостей border-style і border-width.

rules

Цей атрибут визначає, де напрямні, тобто лінії, повинні з'явитися в таблиці. Може мати наступні значення:

  • none – жодні напрямні не будуть виведені; це усталене значення;
  • groups – призведе до виводу напрямних винятково між групами рядів (визначених елементами <thead>, <tbody> і <tfoot>) та між групами колонок (визначеними елементами <col> і <colgroup>);
  • rows – напрямні будуть виведені між рядами;
  • cols – напрямні будуть виведені між колонками;
  • all – напрямні будуть виведені як між рядами, так і між колонками.

Подібного ефекту можна досягнути, застосувавши властивість border до відповідних елементів <thead>, <tbody>, <tfoot>, <col> чи <colgroup>.

summary

Цей атрибут визначає альтернативний текст, що резюмує вміст таблиці. Замість нього слід використовувати елемент <caption>.

width

Цей атрибут визначає ширину таблиці. Замість нього слід використовувати властивість width.

Примітка: Хоч жодна специфікація HTML не включає height як атрибут <table>, частина браузерів підтримують нестандартне тлумачення height. Значення без одиниць вимірювання задає мінімальну абсолютну висоту в пікселях. Якщо задати його як відсоткове значення, то мінімальна висота таблиці буде відносною щодо висоти батьківського контейнера.

Приклади

Проста таблиця

<table>
  <tr>
    <td>Андрій</td>
    <td>Мельник</td>
  </tr>
  <tr>
    <td>Ганна</td>
    <td>Мельник</td>
  </tr>
</table>

Результат

Іще простих прикладів

<p>Проста таблиця з заголовком</p>
<table>
  <tr>
    <th>Ім'я</th>
    <th>Прізвище</th>
  </tr>
  <tr>
    <td>Андрій</td>
    <td>Мельник</td>
  </tr>
  <tr>
    <td>Ганна</td>
    <td>Мельник</td>
  </tr>
</table>

<p>Таблиця з thead, tfoot і tbody</p>
<table>
  <thead>
    <tr>
      <th>Вміст заголовку 1</th>
      <th>Вміст заголовку 2</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Тіло вмісту 1</td>
      <td>Тіло вмісту 2</td>
    </tr>
  </tbody>
  <tfoot>
    <tr>
      <td>Вміст підвалу 1</td>
      <td>Вміст підвалу 2</td>
    </tr>
  </tfoot>
</table>

<p>Таблиця з colgroup</p>
<table>
  <colgroup span="4"></colgroup>
  <tr>
    <th>Країни</th>
    <th>Столиці</th>
    <th>Населення</th>
    <th>Мова</th>
  </tr>
  <tr>
    <td>США</td>
    <td>Вашингтон</td>
    <td>329,5 мільйона</td>
    <td>Англійська</td>
  </tr>
  <tr>
    <td>Швеція</td>
    <td>Стокгольм</td>
    <td>10,35 мільйона</td>
    <td>Шведська</td>
  </tr>
</table>

<p>Таблиця з colgroup і col</p>
<table>
  <colgroup>
    <col style="background-color: #0f0" />
    <col span="2" />
  </colgroup>
  <tr>
    <th>Лайм</th>
    <th>Лимон</th>
    <th>Помаранч</th>
  </tr>
  <tr>
    <td>Зелений</td>
    <td>Жовтий</td>
    <td>Помаранчевий</td>
  </tr>
</table>

<p>Проста таблиця з caption</p>
<table>
  <caption>
    Чудовий підпис
  </caption>
  <tr>
    <td>Чудові дані</td>
  </tr>
</table>

Сортування таблиці

Сортування рядів таблиці

Немає нативних методів для сортування рядів (елементів <tr>) таблиці HTML. Але за допомогою Array.prototype.slice(), Array.prototype.sort(), Node.removeChild() і Node.appendChild() можна реалізувати власну функцію sort() для сортування HTMLCollection елементів <tr> elements.

У прикладі нижче – саме такий приклад. Ця функція прикріплюється до елемента <tbody>, щоб він сортував комірки таблиці в порядку зростання значення, і оновлював відповідно представлення.

HTML
<table>
  <tbody>
    <tr>
      <td>3</td>
    </tr>
    <tr>
      <td>2</td>
    </tr>
    <tr>
      <td>1</td>
    </tr>
  </tbody>
</table>
JavaScript
HTMLTableSectionElement.prototype.sort = function (cb) {
  Array.from(this.rows)
    .sort(cb)
    .forEach((e) => this.appendChild(this.removeChild(e)));
};

document
  .querySelector("table")
  .tBodies[0].sort((a, b) => a.textContent.localeCompare(b.textContent));
Результат

Сортування рядів за клацанням елемента th

Наступний приклад додає обробник подій до кожного елемента <th> у кожному <table> в document; він сортує всі ряди <tbody> на основі комірок td, що містяться в рядах.

Примітка: Це рішення засноване на припущенні, що всі елементи <td> заповнені простим текстом, без елементів-нащадків.

HTML
<table>
  <thead>
    <tr>
      <th>Числа</th>
      <th>Літери</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>3</td>
      <td>А</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Б</td>
    </tr>
    <tr>
      <td>1</td>
      <td>В</td>
    </tr>
  </tbody>
</table>
JavaScript
const allTables = document.querySelectorAll("table");

for (const table of allTables) {
  const tBody = table.tBodies[0];
  const rows = Array.from(tBody.rows);
  const headerCells = table.tHead.rows[0].cells;

  for (const th of headerCells) {
    const cellIndex = th.cellIndex;

    th.addEventListener("click", () => {
      rows.sort((tr1, tr2) => {
        const tr1Text = tr1.cells[cellIndex].textContent;
        const tr2Text = tr2.cells[cellIndex].textContent;
        return tr1Text.localeCompare(tr2Text);
      });

      tBody.append(...rows);
    });
  }
}
Результат

Виведення великих таблиць у малому просторі

Поширена проблема з таблицями в Інтернеті – те, що вони не працюють нативно достатньо добре на дрібних екранах, коли в них багато вмісту, і спосіб зробити їх прокрутними – неочевидний, особливо коли розмітка надходить з CMS і не можна додати обгортку.

Цей приклад пропонує один зі способів виведення таблиць у малому просторі. HTML приховано, адже він дуже великий, і в ньому немає нічого особливого. У цьому прикладі цікавіше дослідити CSS.

При розгляді цих стилів можна помітити, що властивість таблиці display має значення block. Хоч це дозволяє прокручування, таблиця втрачає частину своєї цілісності, і комірки таблиці намагаються стати якомога меншими. Щоб розв'язати цю проблему, додано white-space зі значенням nowrap на <tbody>. Проте цього не зроблено з <thead>, щоб довгі назви не змушували колонки бути ширшими, ніж насправді потрібно для виведення даних.

Щоб заголовки таблиці залишалися на сторінці при прокручуванні, додано position зі значенням sticky на елементах <th>. Зверніть увагу, що властивість не має border-collapse зі значенням collapse, адже тоді заголовок не міг би бути коректно відділений від решти таблиці.

table,
th,
td {
  border: 1px solid;
}

table {
  width: 100%;
  max-width: 400px;
  height: 240px;
  margin: 0 auto;
  display: block;
  overflow-x: auto;
  border-spacing: 0;
}

tbody {
  white-space: nowrap;
}

th,
td {
  padding: 5px 10px;
  border-top-width: 0;
  border-left-width: 0;
}

th {
  position: sticky;
  top: 0;
  background: #fff;
  vertical-align: bottom;
}

th:last-child,
td:last-child {
  border-right-width: 0;
}

tr:last-child td {
  border-bottom-width: 0;
}

Результат

Занепокоєння щодо доступності

Підписи

Додання елемента <caption>, чиє значення ясно й влучно описує призначення таблиці, допомагає людям вирішити, чи потрібна їм решта вмісту таблиці, чи краще її пропустити.

Це допомагає людям, котрі орієнтуються з допомогою допоміжної технології, як то читача з екрана, людям з вадами зору та людям з когнітивними негараздами.

Рядні й колонкові області

Атрибут scope на елементах заголовків є надлишковим у простих контекстах, бо тоді область застосування виводиться автоматично. Проте частина допоміжних технологій може не справитись з коректним виведенням, тому задання області дії заголовка може покращити користувацький досвід. У складних таблицях область дії може бути задана, щоб надати необхідну інформацію про комірки, пов'язані з заголовком.

Приклади

<table>
  <caption>
    Імена та значення кольорів
  </caption>
  <tbody>
    <tr>
      <th scope="col">Ім'я</th>
      <th scope="col">HEX</th>
      <th scope="col">HSLa</th>
      <th scope="col">RGBa</th>
    </tr>
    <tr>
      <th scope="row">Синій</th>
      <td><code>#0057b8</code></td>
      <td><code>hsl(212 100% 36.1% / 100%)</code></td>
      <td><code>rgb(0 87 184 / 100%)</code></td>
    </tr>
    <tr>
      <th scope="row">Жовтий</th>
      <td><code>#ffd700</code></td>
      <td><code>hsl(51 100% 50% / 100%)</code></td>
      <td><code>rgb(255 215 0 / 100%)</code></td>
    </tr>
  </tbody>
</table>

Результат

Додавання scope="col" до елемента <th> допомагає в описі того, що комірка знаходиться нагорі колонки. Додавання scope="row" до елемента <th> допомагає в описі того, що колонка стоїть першою в ряду.

Мудровані таблиці

Допоміжним технологіям, як то читачам з екрана, може виявитись складно розбирати таблиці, котрі настільки складні, що заголовкові комірки не можуть пов'язані зі своїми даними строго по горизонталі чи по вертикалі. Ознакою такої таблиці зазвичай є присутність атрибутів colspan і rowspan.

В ідеалі добре було б помізкувати над кращим способом представлення вмісту таблиці, в тому числі поділом її на набір менших таблиць, пов'язаних між собою, котрим не доведеться покладатися на використання атрибутів colspan і rowspan. На додачу до допомоги людям, котрі використовують для вмісту таблиці допоміжні технології, це може бути корисним для людей з когнітивними негараздами, котрим може бути складно зрозуміти зв'язки, описані табличним компонуванням.

Якщо таблиця не може бути поділена на частини, слід використовувати атрибути id і headers, аби програмно пов'язати кожну комірку таблиці з заголовками, з котрими вона пов'язана.

Специфікації

Сумісність із браузерами

desktop mobile
Chrome Edge Firefox Internet Explorer Opera Safari WebView Android Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet
table
Chrome Full support 1
Edge Full support 12
Firefox Full support 1
Internet Explorer Full support Yes
Opera Full support Yes
Safari Full support Yes
WebView Android Full support 1
Chrome Android Full support 18
Firefox for Android Full support 4
Opera Android Full support Yes
Safari on iOS Full support Yes
Samsung Internet Full support 1.0
align
Deprecated
Chrome Full support 1
Edge Full support 12
Firefox Full support 1
Internet Explorer Full support Yes
Opera Full support Yes
Safari Full support Yes
WebView Android Full support 1
Chrome Android Full support 18
Firefox for Android Full support 4
Opera Android Full support Yes
Safari on iOS Full support Yes
Samsung Internet Full support 1.0
bgcolor
Deprecated
Chrome Full support 1
Edge Full support 12
Firefox Full support 1
Internet Explorer Full support Yes
Opera Full support Yes
Safari Full support Yes
WebView Android Full support 1
Chrome Android Full support 18
Firefox for Android Full support 4
Opera Android Full support Yes
Safari on iOS Full support Yes
Samsung Internet Full support 1.0
border
Deprecated
Chrome Full support 1
Edge Full support 12
Firefox Full support 1
Internet Explorer Full support Yes
Opera Full support Yes
Safari Full support Yes
WebView Android Full support 1
Chrome Android Full support 18
Firefox for Android Full support 4
Opera Android Full support Yes
Safari on iOS Full support Yes
Samsung Internet Full support 1.0
cellpadding
Deprecated
Chrome Full support 1
Edge Full support 12
Firefox Full support 1
Internet Explorer Full support Yes
Opera Full support Yes
Safari Full support Yes
WebView Android Full support 1
Chrome Android Full support 18
Firefox for Android Full support 4
Opera Android Full support Yes
Safari on iOS Full support Yes
Samsung Internet Full support 1.0
cellspacing
Deprecated
Chrome Full support 1
Edge Full support 12
Firefox Full support 1
Internet Explorer Full support Yes
Opera Full support Yes
Safari Full support Yes
WebView Android Full support 1
Chrome Android Full support 18
Firefox for Android Full support 4
Opera Android Full support Yes
Safari on iOS Full support Yes
Samsung Internet Full support 1.0
frame
Deprecated
Chrome Full support 1
Edge Full support 12
Firefox Full support 1
Internet Explorer Full support Yes
Opera Full support Yes
Safari Full support Yes
WebView Android Full support 1
Chrome Android Full support 18
Firefox for Android Full support 4
Opera Android Full support Yes
Safari on iOS Full support Yes
Samsung Internet Full support 1.0
rules
Deprecated
Chrome Full support 1
Edge Full support 12
Firefox Full support 1
Internet Explorer Full support Yes
Opera Full support Yes
Safari Full support Yes
WebView Android Full support 1
Chrome Android Full support 18
Firefox for Android Full support 4
Opera Android Full support Yes
Safari on iOS Full support Yes
Samsung Internet Full support 1.0
summary
Deprecated
Chrome Full support 1
Edge Full support 12
Firefox Full support 1
Internet Explorer Full support Yes
Opera Full support Yes
Safari Full support Yes
WebView Android Full support 1
Chrome Android Full support 18
Firefox for Android Full support 4
Opera Android Full support Yes
Safari on iOS Full support Yes
Samsung Internet Full support 1.0
width
Deprecated
Chrome Full support 1
Edge Full support 12
Firefox Full support 1
Internet Explorer Full support Yes
Opera Full support Yes
Safari Full support Yes
WebView Android Full support 1
Chrome Android Full support 18
Firefox for Android Full support 4
Opera Android Full support Yes
Safari on iOS Full support Yes
Samsung Internet Full support 1.0

Дивіться також