Menu

Рамка таблицы в HTML: collapse, линии и скругленные углы

Как добавить рамку таблице HTML через CSS: одинарные линии через border-collapse, border-spacing, только горизонтальные линии, только внутренние рамки, скругленные углы и почему атрибут border устарел.

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

Как добавить рамку таблице

По умолчанию у таблиц нет рамок. Добавьте их через CSS: border у каждой ячейки рисует сетку, а border-collapse: collapse у таблицы сливает каждую пару соседних рамок в одну линию.

Сокращенное свойство border принимает толщину, стиль и цвет в любом порядке: 1px solid #6b7280. Задавайте его th, td, а не только table: рамка у таблицы рисует лишь внешний контур.

border-collapse: separate или collapse

border-collapse решает, будут ли у ячеек общие рамки.

ЗначениеРезультат
separate (по умолчанию)У каждой ячейки своя рамка, а промежуток между ячейками задает border-spacing
collapseУ соседних ячеек одна общая рамка; border-spacing игнорируется

В таблице с separate видны оба слоя: синий контур таблицы и отдельный янтарный прямоугольник вокруг каждой ячейки, с border-spacing между ними. Замените 6px на 0, и ячейки соприкоснутся, но линии все равно останутся двойными. Сливает их только collapse.

Когда встречаются две слитые рамки с разными параметрами, побеждает более широкая. При одинаковой ширине решает стиль (double сильнее solid, а тот сильнее dashed и dotted), а при равенстве рамка ячейки сильнее рамки строки, а та сильнее рамки таблицы. Поэтому внешний край слитой таблицы янтарный, а не синий: и у ячеек, и у таблицы там рамки 2px solid, и побеждают ячейки.

Только горизонтальные или только внутренние линии

Большинство современных таблиц рисуют не все линии. Два частых варианта:

Вторая таблица убирает рамку с внешней стороны у каждой крайней ячейки. border-inline-start и border-inline-end означают начало и конец строки, поэтому тот же CSS остается правильным в языках с письмом справа налево, где первая ячейка находится с другой стороны.

Скругленные углы таблицы

border-radius ничего не делает с таблицей, у которой border-collapse: collapse. Скругленные таблицы используют модель separate без промежутков и рисуют каждую линию один раз, давая ячейкам только нижнюю и конечную рамку:

Двум угловым ячейкам шапки задано собственное скругление, чтобы серый фон повторял изгиб. Без него их квадратные углы выступают за скругленную рамку. Радиус 9px: это 10px таблицы минус ее рамка 1px, так что две кривые совпадают.

Цвет и толщина рамки для разных частей

Рамки могут различаться в разных частях таблицы. Селекторы для thead, tfoot и отдельных строк задают более толстую линию под шапкой или над итогами:

Линии толщиной 3px побеждают серые линии толщиной 1px в местах встречи, по правилам слияния выше. Об остальной структуре таблицы (thead, tfoot, th) читайте на странице таблица в HTML.

Атрибут border

В старых учебниках используют атрибуты тега <table>:

<table border="1" cellspacing="0" cellpadding="6">

Браузеры по-прежнему учитывают border="1": он рисует рамку у таблицы и у каждой ячейки в модели separate, отсюда двойной вид. Все три атрибута в HTML5 устарели. Их CSS-аналоги: border у ячеек, border-spacing (или border-collapse: collapse) у таблицы и padding у ячеек.

Частые ошибки

  • Рамка только у table. Получается контур без линий внутри. Добавьте рамку th, td.
  • Забытый border-collapse: collapse, после чего линии двоятся.
  • border-radius вместе с border-collapse: collapse. Скругление игнорируется.
  • border-spacing вместе с border-collapse: collapse. Промежутки работают только в модели separate.
  • Рамки у <tr> в модели separate. Строки не рисуют рамок, если таблица не слита; оформляйте ячейки.
  • border="1" в новом коде. Он все еще работает, но не позволяет задать цвет и устарел.

Часто задаваемые вопросы

Как добавить рамку таблице в HTML?

Задайте CSS таблице и ее ячейкам: table { border-collapse: collapse; } th, td { border: 1px solid #999; }. Рамка у ячеек рисует сетку, а border-collapse: collapse сливает соседние рамки в одинарные линии.

Почему у таблицы двойные рамки?

По умолчанию каждая ячейка рисует собственную рамку с промежутком между ячейками (border-collapse: separate), поэтому у соседних ячеек видны две линии. Задайте <table> правило border-collapse: collapse, чтобы слить их в одну.

Атрибут border у таблицы еще работает?

<table border="1"> по-прежнему рисует рамки во всех браузерах, но в HTML5 он устарел и не позволяет управлять цветом или стилем. Используйте CSS-свойство border.

Как скруглить углы таблицы?

border-radius не действует на таблицу с border-collapse: collapse. Используйте border-collapse: separate с border-spacing: 0, задайте скругление таблице и дайте угловым ячейкам такое же скругление (border-start-start-radius и аналогичные свойства), чтобы их фон не выступал из углов.

Как убрать рамку у таблицы?

У таблиц нет рамки, пока ее что-то не добавит. Удалите атрибут border из тега <table> или задайте border: none для table, th, td, чтобы перекрыть стили, которые их добавляют.

Coddy programming languages illustration

Учитесь программировать с Coddy

НАЧАТЬ