Фиксированый стиль таблицы или Fixed Table Layouts
Как вы наверняка знаете, CSS свойство table-layout предназначено для управления режимом формирования ширины столбцов в таблице. Оно может принимать следующие значения: авто, фиксировано или наследственно. По умолчанию в браузерах для отображения таблицы используется стандартное поведение: браузер рассчитывает ширину строки как сумму ширины всех ячеек. Следом, по тому же принципу рассчитывает ширину 2-й строки, и если размеры какой-либо ячейки превышают размеры вышестоящей ячейки, перестраивает всю таблицу. Далее определяет ширину 3-й ячейки, 4-й и т.д. В случае если таблица имеет много, очень много рядов, расчет ширины может немного затянуться…
Однако можно (я бы даже сказал нужно) задействовать упрощенный режим который выражается в том, что браузер при определении ширины не берет в расчет содержимое последующих ячеек, а опирается на значение свойств width таблицы, столбцов и ячеек из первой строки.
CSS
В CSS (таблицы каскадных стилей) с помощью свойства table-layout мы можем управлять какой режим формирования таблицы нам нужен. Речь идет собственно об этом:
table

Это свойство очень хорошо поддерживается и очень даже полезно, так как позволяет вам создавать более предсказуемую разметку под вашу таблицу. По умолчанию, это свойство установлено в значение авто, и это, наверно, известно большинству из вас. Но этот режим как по мне так очень ненадежный и непредсказуемый. Приведем пример:
Режим table-layout: fixed
Если теперь задействовать режим table-layout: fixed то можно уверенно получить вполне себе предсказуемый результат по месту.
В случае применения этого режима, расчет ширины столбцов идет по первой строчке и все последующие используют это значение. Может и звучит странновато для понимания, но на самом деле все просто, приведем пример:

Применение
Крис озадачился этим вопросом, так как ему хотелось. что бы его «Pen»ы (в переводе еще смешнея звучит) в лист вью на CodePen отображались в столбиках с унифицированой шириной и не портили ему всю картину, вот что у него получилось:

Он остался очень доволен этим.
Надеюсь, все помнят, что таблицы нужны для табулированных значений и емайлов, а не для задания разметки страниц.
Посмотрите на этот практический пример (предполагаю, что почти всем понравится это):

Для лучшего примера вы можете попробовать использовать элемент , чтобы так же задать ширину столбцов, так как остальное будет рассчитано в зависимости от значений в первой строчке.
Скорость
Что касается скорости, то говорят, что такой стиль формирования таблицы быстрейший, и это очевидно — бо остальные строки не анализируются и следовательно время генерации не зависит от длины таблицы как таковой.
Почтовики
Что касается использования в разных почтовых клиентах, то это свойство, согласно сервису мониторинга поддержки свойств CSS в почтовых клиентах, прекрасно поддерживается.
Заключение
Надеюсь, этот перевод кому-то действительно поможет лучше понять, как работает table-layout: fixed и подбросит идей по его использованию в своих проектах.
Кстати, у кого нибудь есть идеи, почему это свойство не используется по умолчанию?
CSS свойство table-layout
Свойство table-layout указывает алгоритмы, используемые для расположения ячеек таблицы, строк и колонок.
Свойство table-layout указывает два алгоритма — fixed и automatic.
Когда макет таблицы указан как «automatic», ширина таблицы зависит от ширины ее колонок.
Когда макет таблицы указан как «fixed», он использует ширину таблицы, указанную ширину колонок и значения атрибутов border и cellspacing.
| Значение по умолчанию | auto |
| Применяется | К элементам, для которых значение display установлено как table или inline-table. |
| Наследуется | Нет |
| Анимируемое | Нет |
| Версия | CSS2 |
| DOM синтаксис | object.style.tableLayout = «fixed»; |
Синтаксис
table-layout: auto | fixed | initial | inherit;
Пример
html> html> head> title>Заголовок документа title> style> th, td < border: 2px solid #666; > table.t1 < table-layout: fixed; width: 40%; > style> head> body> h2>Пример свойства table-layout h2> h3>Table-layout: fixed; width: 20% h3> table class="t1"> tr> th>Страна th> th>Столица th> th>Город th> tr> tr> td>Россия td> td>Москва td> td>Санкт-Петербург td> tr> tr> td>Англия td> td>Лондон td> td>Манчестер td> tr> tr> td>Нидерланды td> td>Амстердам td> td>Хааге td> tr> table> body> html>
Пример с использованием алгоритмов “auto” и “fixed”:
Пример
html> html> head> title>Заголовок документа title> style> th,td < border: 2px solid #666; > table.t1 < table-layout: fixed; width: 250px; > table.t2 < table-layout: auto; width: 100%; > style> head> body> h2>Пример свойства table-layout h2> h3>Table-layout: fixed; width: 160px h3> table class="t1"> tr> th>Страна th> th>Столица th> th>Город th> tr> tr> td>Россия td> td>Москва td> td>Санкт-Петербург td> tr> tr> td>Англия td> td>Лондон td> td>Манчестер td> tr> tr> td>Нидерланды td> td>Амстердам td> td>Хааге td> tr> table> h3>Table-layout: auto; width: 100% h3> table class="t2"> tr> th>Страна th> th>Столица th> th>Город th> tr> tr> td>Россия td> td>Москва td> td>Санкт-Петербург td> tr> tr> td>Англия td> td>Лондон td> td>Манчестер td> tr> tr> td>Нидерланды td> td>Амстердам td> td>Хааге td> tr> table> body> html>
Значения
| Значение | Описание |
|---|---|
| auto | Использует алгоритм автоматического размещения макета. Значение по умолчанию. |
| fixed | Использует алгоритм фиксированного размещения макета. Ширина таблицы, колонка и первая строка ячеек устанавливают ширину таблицы и колонки. |
| initial | Устанавливает свойство в значение по умолчанию. |
| inherit | Значение элемента наследуется от родительского элемента. |
Поддержка браузера
| 14.0+ | 12.0+ | 1.0+ | 1.0+ | 7.0+ |
table-layout¶
Свойство table-layout определяет, как браузер должен вычислять ширину ячеек таблицы, основываясь на её содержимом.
Демо¶
Колонки и таблицы
- column-count
- column-fill
- column-gap
- column-rule
- column-rule-color
- column-rule-style
- column-rule-width
- column-span
- column-width
- columns
Синтаксис¶
1 2 3 4 5 6 7 8 9 10
/* Keyword values */ table-layout: auto; table-layout: fixed; /* Global values */ table-layout: inherit; table-layout: initial; table-layout: revert; table-layout: revert-layer; table-layout: unset;
Значения¶
Браузер загружает всю таблицу, анализирует её для определения размеров ячеек и только после этого отображает.
Значение по-умолчанию: auto
Применяется к тегу или к элементу, у которого значение display установлено как table или inline-table .
Спецификации¶
- Cascading Style Sheets Level 2 Revision 2 (CSS 2.2) Specification
- CSS Level 2 (Revision 1)
Поддержка браузерами¶
Описание и примеры¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
html> head> meta charset="utf-8" /> title>table-layouttitle> style> table table-layout: fixed; /* Фиксированная ширина ячеек */ width: 100%; /* Ширина таблицы */ > .col1 width: 160px; > .coln width: 60px; > style> head> body> table border="1"> col class="col1" /> col span="9" class="coln" /> tr> td>td> td>2012td> td>2013td> td>2014td> td>2015td> td>2016td> td>2017td> td>2018td> td>2019td> td>2020td> tr> tr> td>Нефтьtd> td>5td> td>7td> td>2td> td>8td> td>3td> td>34td> td>62td> td>74td> td>57td> tr> tr> td>Золотоtd> td>3td> td>6td> td>4td> td>6td> td>4td> td>69td> td>72td> td>56td> td>47td> tr> tr> td>Деревоtd> td>5td> td>8td> td>3td> td>4td> td>7td> td>73td> td>79td> td>34td> td>86td> tr> table> body> html>
CSS стиль table-layout. Определение ширины ячеек с помощью table-layout
CSS стиль table-layout определяет, как браузеру нужно вычислять ширину ячеек таблицы, основываясь на ее содержимом.
Краткая информация по CSS-свойству table-layout
| Значение по умолчанию | auto |
|---|---|
| Наследуется | Нет |
| Применяется | К тегу или к элементу, у которого значение display установлено как table или inline-table. |
Правила написания свойства table-layout
table-layout: auto | fixed
При выбранном значении auto браузер загружает всю таблицу, после чего анализирует ее для определения размеров ячеек и лишь после этого показывает на странице.
Объектная модель
Объект.style.tableLayout
Пример применения стиля table-layout
Проиллюстрируем работу table-layout на примере. Нам нужно, чтобы ширина ячеек не зависела от содержимого.

Пример CSS стиля table-layout table < table-layout: fixed; /* Фиксированная ширина ячеек */ width: 100%; /* Ширина таблицы */ >.col1 < width: 160px; >.coln 2012 2013 2014 Доллар 32 35 37 Евро 40 42 44 Фунт 43 50 55
Популярные статьи

- unity

- слайдер