W3docs

CSS Таблицы

Как стилизовать таблицы с помощью CSS: цвет, border-collapse, ширина, высота, выравнивание и отступы. Примеры.

Стандартные таблицы HTML, отображаемые браузером, выглядят просто: тонкие двойные рамки, тесные ячейки и отсутствие визуального разделения между строками. CSS превращает их в удобные и наглядные структуры данных. В этой главе рассматриваются свойства, важные для оформления таблиц: рамки, отступы, выравнивание и стилизация строк. В конце приведены типичные паттерны: разделители, подсветка при наведении, зебра-полосатость и горизонтальная прокрутка на небольших экранах.

Каждый пример ниже представляет собой полную, готовую к запуску страницу — откройте её, измените значение и сразу увидите результат.

Свойства для стилизации таблиц

Вот CSS-свойства, используемые для оформления таблицы. Свойства background-color и color задают цвет фона и текста соответственно. Свойство border-collapse объединяет рамки таблицы. Свойство text-align устанавливает горизонтальное выравнивание текста. Кроме того, для управления макетом можно использовать height, width и padding.

Пример стилизации таблицы:

Пример стилизации html-таблицы

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      table {
        width: 100%;
        border-collapse: collapse;
      }
      table,
      th,
      td {
        border: 1px solid black;
      }
      thead {
        background-color: #1c87c9;
        color: #ffffff;
      }
      th {
        text-align: center;
        height: 50px;
      }
      tbody tr:nth-child(odd) {
        background: #ffffff;
      }
      tbody tr:nth-child(even) {
        background: #f4f4f4;
      }
    </style>
  </head>
  <body>
    <table>
      <thead>
        <tr>
          <th>Heading</th>
          <th>Heading</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>Some text</td>
          <td>Some text</td>
        </tr>
        <tr>
          <td>Some text</td>
          <td>Some text</td>
        </tr>
        <tr>
          <td>Some text</td>
          <td>Some text</td>
        </tr>
        <tr>
          <td>Some text</td>
          <td>Some text</td>
        </tr>
      </tbody>
    </table>
  </body>
</html>

Результат

Пример таблицы

Разберём приведённый выше код.

Как видно, наша таблица состоит из двух основных разделов: секции <thead> для заголовков и секции <tbody> для строк данных. В таблице используются чёрные рамки, заданные с помощью свойства border. Вы можете выбрать любой цвет и стиль рамки.

Цвет таблицы

Строка заголовка (<thead>) окрашена в синий цвет с белым текстом. Синий фон задаётся свойством background-color, а белый текст — свойством color. Оба свойства применяются к селектору thead, поэтому все ячейки заголовка наследуют их. В ячейках тела таблицы используются стандартные настройки: чёрный текст на белом (или зебра-полосатом) фоне.

Объединение рамок

По умолчанию таблица отрисовывает две рамки между соседними ячейками — по одной для каждой ячейки — что создаёт видимый зазор и удвоенную линию. Свойство border-collapse управляет этим:

  • border-collapse: separate (по умолчанию) — рамки каждой ячейки остаются отдельными.
  • border-collapse: collapse — объединяет соседние рамки в одну линию, создавая чистый сетчатый вид, использованный во всех примерах на этой странице.

Для таблиц с данными почти всегда стоит использовать collapse.

Ширина и высота таблицы

Используйте width для селектора table, чтобы управлять горизонтальным пространством — width: 100% заставляет таблицу заполнять контейнер, что является наиболее распространённым вариантом. Используйте height для th (или td), чтобы добавить строкам воздуха. Оба свойства принимают пиксели (50px) для фиксированного размера или проценты (100%) для размера относительно родителя. Обратите внимание: процентная height работает только при наличии известной высоты у родителя, поэтому для строк надёжнее использовать фиксированные значения.

Выравнивание текста в таблице

Свойство text-align задаёт горизонтальное выравнивание содержимого ячейки. По умолчанию браузеры выравнивают текст <th> по центру, а <td> — по левому краю. Поэтому text-align задают только для переопределения значений по умолчанию: например, text-align: center для th, чтобы заголовки оставались по центру, или text-align: right для выравнивания числовых столбцов по цифрам. В следующем разделе показан полный пример.

Отступы в таблице

Для управления пространством между рамкой и содержимым ячейки используйте свойство padding для элементов <td> и <th>:

Отступы в html-таблицах

td, th {
  padding: 15px;
}

Горизонтальное выравнивание с помощью text-align

С помощью CSS-свойства text-align можно задать горизонтальное выравнивание содержимого элементов <th> или <td>.

По умолчанию содержимое элементов <td> выравнивается по левому краю, а содержимое элементов <th> — по центру. В примере ниже содержимое элементов <th> и <td> выровнено по правому краю:

Пример выравнивания содержимого элементов <th> и <td> по правому краю:

Пример выравнивания содержимого элементов <th> и <td> по правому краю

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      table,
      td,
      th {
        border: 1px solid black;
      }
      table {
        border-collapse: collapse;
        width: 100%;
      }
      th,
      td {
       text-align: right;
      }
    </style>
  </head>
  <body>
    <h2>Horizontal alignment example</h2>
    <table>
      <thead>
        <tr>
          <th>Firstname</th>
          <th>Lastname</th>
          <th>Money</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>Sherlock</td>
          <td>Holmes</td>
          <td>$200</td>
        </tr>
        <tr>
          <td>John</td>
          <td>Watson</td>
          <td>$250</td>
        </tr>
        <tr>
          <td>Mary</td>
          <td>Whatson</td>
          <td>$500</td>
        </tr>
      </tbody>
    </table>
  </body>
</html>

Вертикальное выравнивание с помощью vertical-align

С помощью CSS-свойства vertical-align можно задать вертикальное выравнивание содержимого элементов <th> или <td>.

По умолчанию содержимое как <th>, так и <td> выравнивается по вертикали по центру.

В примере ниже содержимое элементов <td> выровнено по нижнему краю:

Пример вертикального выравнивания содержимого элементов <td> по нижнему краю:

<!DOCTYPE html>
<html>
  <head>
    <style>
      table,
      td,
      th {
        border: 1px solid black;
      }
      table {
        border-collapse: collapse;
        width: 100%;
      }
      td {
        height: 50px;
        vertical-align: bottom;
        text-align: right;
        padding-right: 10px;
      }
    </style>
  </head>
  <body>
    <h2>Vertical alignment example</h2>
    <table>
      <thead>
        <tr>
          <th>Firstname</th>
          <th>Lastname</th>
          <th>Money</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>Sherlock</td>
          <td>Holmes</td>
          <td>$300</td>
        </tr>
        <tr>
          <td>John</td>
          <td>Watson</td>
          <td>$250</td>
        </tr>
        <tr>
          <td>Mary</td>
          <td>Watson</td>
          <td>$500</td>
        </tr>
      </tbody>
    </table>
  </body>
</html>

Горизонтальные разделители

Добавив CSS-свойство border-bottom к элементам <td> и <th>, можно создать горизонтальные разделители.

Пример создания горизонтальных разделителей:

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      table {
        border-collapse: collapse;
        width: 100%;
      }
      th,
      td {
        padding: 10px;
        text-align: left;
        border-bottom: 1px solid #cccccc;
      }
    </style>
  </head>
  <body>
    <h2>Horizontal dividers example</h2>
    <table>
      <thead>
        <tr>
          <th>Firstname</th>
          <th>Lastname</th>
          <th>Money</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>Sherlock</td>
          <td>Holmes</td>
          <td>$200</td>
        </tr>
        <tr>
          <td>John</td>
          <td>Watson</td>
          <td>$350</td>
        </tr>
        <tr>
          <td>Mary</td>
          <td>Watson</td>
          <td>$500</td>
        </tr>
      </tbody>
    </table>
  </body>
</html>

Таблица с подсветкой при наведении

Использование CSS-псевдокласса :hover для элемента <tr> делает таблицу интерактивной при наведении курсора.

Пример создания таблицы с подсветкой при наведении:

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      table {
        border-collapse: collapse;
        width: 100%;
      }
      tr {
        background-color: #f5f5f5;
      }
      th,
      td {
        padding: 15px;
        text-align: left;
        border-bottom: 1px solid #ccc;
      }
      tr:hover {
        background-color: #cdcdcd;
      }
    </style>
  </head>
  <body>
    <h2>Hoverable table example</h2>
    <table>
      <thead>
        <tr>
          <th>First Name</th>
          <th>Last Name</th>
          <th>Money</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>Sherlock</td>
          <td>Holmes</td>
          <td>$200</td>
        </tr>
        <tr>
          <td>John</td>
          <td>Watson</td>
          <td>$350</td>
        </tr>
        <tr>
          <td>Mary</td>
          <td>Watson</td>
          <td>$500</td>
        </tr>
      </tbody>
    </table>
  </body>
</html>

Таблица с зебра-полосатостью

С помощью селектора nth-child() и свойства CSS background-color, применённого к нечётным (чётным) строкам таблицы, можно создать таблицу с чередующейся раскраской строк.

Пример создания таблицы с зебра-полосатостью:

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      table {
        border-collapse: collapse;
        width: 100%;
      }
      th,
      td {
        text-align: left;
        padding: 10px;
      }
      tr:nth-child(even) {
        background-color: #6eeccf;
      }
      tr:nth-child(odd) {
        background-color: #2d7f88;
      }
    </style>
  </head>
  <body>
    <h2>Striped table example</h2>
    <table>
      <thead>
        <tr>
          <th>First name</th>
          <th>Last name</th>
          <th>Points</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>Sherlock</td>
          <td>Holmes</td>
          <td>$250</td>
        </tr>
        <tr>
          <td>John</td>
          <td>Watson</td>
          <td>$350</td>
        </tr>
        <tr>
          <td>Mary</td>
          <td>Watson</td>
          <td>$500</td>
        </tr>
      </tbody>
    </table>
  </body>
</html>

Адаптивные таблицы

Широкая таблица может выходить за пределы узких экранов и нарушать макет страницы. Чтобы сделать таблицу адаптивной, оберните её в контейнер (здесь — <div>) и примените к этому контейнеру overflow-x: auto. Когда таблица шире viewport, контейнер показывает горизонтальную полосу прокрутки вместо растягивания страницы — строки остаются нетронутыми, а пользователь просто прокручивает вбок.

Пример создания адаптивной таблицы:

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      div {
        overflow-x: auto;
      }
      table {
        border-collapse: collapse;
        width: 100%;
      }
      th,
      td {
        text-align: left;
        padding: 8px 5px;
      }
      tr:nth-child(even) {
        background-color: #6eeccf;
      }
      tr:nth-child(odd) {
        background-color: #2d7f88;
      }
    </style>
  </head>
  <body>
    <h2>Responsive table example</h2>
    <div>
      <table>
        <thead>
          <tr>
            <th>First Name</th>
            <th>Last Name</th>
            <th>Money</th>
            <th>Money</th>
            <th>Money</th>
            <th>Money</th>
            <th>Money</th>
            <th>Money</th>
            <th>Money</th>
            <th>Money</th>
            <th>Money</th>
            <th>Money</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td>Sherlock</td>
            <td>Holmes</td>
            <td>$150</td>
            <td>$150</td>
            <td>$150</td>
            <td>$150</td>
            <td>$150</td>
            <td>$150</td>
            <td>$150</td>
            <td>$150</td>
            <td>$150</td>
            <td>$150</td>
          </tr>
          <tr>
            <td>John</td>
            <td>Watson</td>
            <td>$350</td>
            <td>$350</td>
            <td>$350</td>
            <td>$350</td>
            <td>$350</td>
            <td>$350</td>
            <td>$350</td>
            <td>$350</td>
            <td>$350</td>
            <td>$350</td>
          </tr>
          <tr>
            <td>Mary</td>
            <td>Watson</td>
            <td>$500</td>
            <td>$500</td>
            <td>$500</td>
            <td>$500</td>
            <td>$500</td>
            <td>$500</td>
            <td>$500</td>
            <td>$500</td>
            <td>$500</td>
            <td>$500</td>
          </tr>
        </tbody>
      </table>
    </div>
  </body>
</html>

Связанные темы

  • CSS border-collapse — объединение или разделение рамок ячеек.
  • CSS nth-child() — выбор нечётных/чётных строк для зебра-полосатости.
  • CSS :hover — подсветка строки под курсором.
  • CSS vertical-align — выравнивание содержимого ячейки по верху, середине или низу.
  • HTML Tables — разметка, к которой применяются эти стили.

Практика

Практика
Какие CSS-свойства можно применять к таблицам?
Какие CSS-свойства можно применять к таблицам?
Was this page helpful?