В table-layout
определяет свойство , какой алгоритм браузер должен использовать , чтобы выложить строки таблицы, ячейки и столбцы.
table ( table-layout: fixed; )
Как объясняется в спецификации CSS2.1, макет таблицы обычно является делом вкуса и может варьироваться в зависимости от выбора дизайна. Однако браузеры автоматически применяют определенные ограничения, которые определяют порядок расположения таблиц. Это происходит, когда для table-layout
свойства установлено значение auto
(по умолчанию). Но эти ограничения можно снять, если для table-layout
него установлено значение fixed
.
Значения
auto
: по умолчанию. Автоматический алгоритм браузера используется для определения расположения строк, ячеек и столбцов таблицы. Результирующий макет таблицы обычно зависит от содержимого таблицы.fixed
: С этим значением макет таблицы игнорирует содержимое и вместо этого использует ширину таблицы, любую заданную ширину столбцов, а также значения границ и интервалов между ячейками. Используемые значения столбцов основаны на ширине, определенной для столбцов или ячеек для первой строки таблицы.inherit
: указывает, что значение наследуется отtable-layout
значения своего родителя
Чтобы значение fixed
имело какой-либо эффект, ширина таблицы должна быть установлена не на auto
(значение по умолчанию для width
свойства). В демонстрациях ниже вся ширина таблицы установлена на 100%, что предполагает, что мы хотим, чтобы таблица заполняла свой родительский контейнер по горизонтали.
Лучший способ увидеть эффект от алгоритма фиксированного макета таблицы - использовать демонстрацию.
См. Демонстрацию Pen Demo для свойства table-layout CSS Луи Лазариса (@impressivewebs) на CodePen.
Когда вы впервые просмотрите приведенную выше демонстрацию, вы заметите, что расположение столбцов таблицы несбалансированное и неудобное. В этот момент таблица использует алгоритм браузера по умолчанию, чтобы определить, как расположить таблицу, а это означает, что содержимое будет определять макет. Демонстрация преувеличивает этот факт, включая длинную строку текста внутри одной ячейки таблицы, в то время как все остальные ячейки таблицы используют только два слова каждая. Как видите, браузер расширяет первый столбец, чтобы разместить больший объем содержимого.
Если вы нажмете кнопку «Toggle table-layout: fixed», вы увидите, как выглядит раскладка таблицы при использовании «фиксированного» алгоритма. Когда table-layout: fixed
применяется, содержимое больше не определяет макет, а вместо этого браузер использует любую заданную ширину из первой строки таблицы для определения ширины столбцов. Если в первой строке нет значений ширины, ширина столбца делится поровну по таблице, независимо от содержимого ячеек.
Дальнейшие примеры могут помочь прояснить это. В следующей демонстрации таблица имеет элемент, первый
элемент которого имеет ширину
400px
. Обратите внимание: в этом случае переключение table-layout: fixed
не действует.
См. Демонстрацию Pen Demo для свойства table-layout CSS Луи Лазариса (@impressivewebs) на CodePen.
Это происходит потому, что алгоритм макета по умолчанию, по сути, говорит: «Сделайте первый столбец шириной 400 пикселей и распределите остальные столбцы в зависимости от их содержимого». Поскольку остальные три столбца имеют то же содержимое, что и друг друга, изменений не будет. Но теперь давайте добавим дополнительный текст в один из других столбцов:
См. Демонстрацию Pen Demo для свойства CSS table-layout с шириной столбца и переменным содержимым Луи Лазариса (@impressivewebs) на CodePen.
Теперь, если вы нажмете кнопку-переключатель, вы увидите, что столбцы настраиваются в соответствии с фиксированным макетом независимо от содержимого. И снова происходит то же самое; размер первого столбца составляет 400 пикселей, затем остальные столбцы делятся поровну. Но на этот раз разница заметна, поскольку в одном из столбцов есть лишнее содержимое.
Как алгоритм фиксированного макета определяет ширину столбцов
Следующие две демонстрации должны помочь понять, что первая строка таблицы - это то, что помогает определить ширину столбцов таблицы, установленной на table-layout: fixed
.
См. Демонстрацию пера для макета таблицы CSS с ячейкой в строке 1, заданной шириной, заданной Луи Лазарисом (@impressivewebs) на CodePen.
В приведенной выше демонстрации первая ячейка в первой строке таблицы имеет ширину 350 пикселей. При переключении table-layout: fixed
настраиваются другие столбцы, но первый остается прежним. Теперь попробуйте следующую демонстрацию:
См. Демонстрацию пера для макета таблицы CSS с ячейкой в строке 2, заданной шириной, заданной Луи Лазарисом (@impressivewebs) на CodePen.
В данном случае это вторая строка, ширина которой привязана к ее первой ячейке таблицы. Теперь, когда нажата кнопка переключения, ширина всех столбцов настраивается. Опять же, это связано с тем, что алгоритм фиксированной компоновки использует первую строку для определения ширины столбцов, и в конечном итоге ширина распределяется равномерно.
Преимущества алгоритма фиксированного макета
Эстетические преимущества использования table-layout: fixed
должны быть очевидны из демонстрации выше. Но еще одно важное преимущество - производительность. В спецификации фиксированный алгоритм называется «быстрым», и на это есть веские причины. Браузеру не нужно анализировать все содержимое таблицы перед определением размера столбцов; ему нужно проанализировать только первую строку. В результате макет таблицы обрабатывается быстрее.
Дополнительная информация
- Фиксированные макеты таблиц
- Фиксированный макет таблицы в спецификации CSS2.1
table-layout
Свойство в CSS таблице модуля Уровень 3
Поддержка браузера
Хром | Сафари | Fire Fox | Опера | IE | Android | iOS |
---|---|---|---|---|---|---|
1+ | 1+ | 1+ | 7+ | 5+ | 2.1+ | 3+ |