Перейти к содержимому

Таблицы CSS

Некоторые свойства CSS широко используются для оформления HTML-таблиц. Ниже описано каждое из них.

В этой главе мы рассмотрим, как оформлять таблицы, включая изменение цветов заголовков и строк.

Свойства оформления таблиц

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

Пример оформления таблицы:

Пример оформления HTML-таблиц

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>

Результат

Table example

Давайте объясним приведенный выше код.

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

Цвет таблицы

Как видите, часть <thead> нашей таблицы синяя, а весь текст в ней белый. Для синего фона мы используем свойство background-color, а для белого текста — свойство color. Остальной текст написан черным цветом.

Слияние границ

Свойство border-collapse определяет, будут ли границы таблицы объединены в одну границу или разделены.

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

У таблицы также есть свойства width и height. Как видите, мы используем эти свойства в нашем стиле. Свойство width мы используем для всей таблицы, а свойство height — для заголовков. Эти свойства можно задавать в пикселях и процентах.

Горизонтальное выравнивание текста в таблице

Теперь о горизонтальном выравнивании текста в таблице. Как вы уже знаете, ранее мы использовали свойство text-align для задания положения текста. В нашем примере, как видите, мы используем свойство text-align для заголовка. Для этого мы используем "text-align: center". Вы можете прочитать нашу предыдущую главу, чтобы узнать, как его использовать.

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

Чтобы управлять пространством между границей и содержимым в таблице, используйте свойство padding для элементов <td> и <th>:

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

css
td, th {
  padding: 15px;
}

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

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

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

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

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

html
<!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> по нижнему краю:

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

html
<!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>, вы создадите горизонтальные разделители.

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

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

html
<!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> сделает таблицу реагирующей на наведение.

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

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

html
<!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 к нечетным (четным) строкам таблицы, можно создать таблицу с чередующимися полосами.

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

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

html
<!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>

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

Чтобы сделать таблицу адаптивной, оберните ее в контейнер и примените к этому контейнеру overflow-x: auto.

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

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

html
<!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 можно применять к таблицам?

Считаете ли это полезным?

Предпросмотр dual-run — сравните с маршрутами Symfony на продакшене.