Ячейки таблицы одинакового размера для заполнения всей ширины содержащей таблицу

96

Есть ли способ использовать HTML / CSS (с относительными размерами), чтобы строка ячеек растягивала всю ширину таблицы, в которой она содержится?

Ячейки должны быть одинаковой ширины, а размер внешней таблицы также должен быть динамическим <table width="100%">.

В настоящее время, если я не указываю фиксированный размер; размер ячеек автоматически изменяется в соответствии с их содержимым.

йогибир
источник

Ответы:

144

Вам даже не нужно устанавливать определенную ширину для ячеек, table-layout: fixedдостаточно, чтобы ячейки были распределены равномерно.

ul {
    width: 100%;
    display: table;
    table-layout: fixed;
    border-collapse: collapse;
}
li {
    display: table-cell;
    text-align: center;
    border: 1px solid hotpink;
    vertical-align: middle;
    word-wrap: break-word;
}
<ul>
  <li>foo<br>foo</li>
  <li>barbarbarbarbar</li>
  <li>baz</li>
</ul>

Обратите внимание, что для table-layoutработы элемент в стиле таблицы должен иметь установленную ширину (в моем примере 100%).

Саймон
источник
11
это решение лучше и должно работать даже с динамически генерируемыми столбцами
Имран Омар Бухш
Если строка превышает максимальную ширину td, у вас проблемы,
Стерлинг Арчер
5
Добавление word-wrap:break-wordисправит эту проблему, как я только что обнаружил
Стерлинг Арчер
113

Просто используйте процентную ширину и фиксированный макет таблицы :

<table>
<tr>
  <td>1</td>
  <td>2</td>
  <td>3</td>
</tr>
</table>

с участием

table { table-layout: fixed; }
td { width: 33%; }

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

Очевидно, настройте CSS в соответствии с вашими обстоятельствами, что обычно означает применение стиля только к таблицам с заданным классом или, возможно, с заданным идентификатором.

Cletus
источник
и убедитесь, что ваш селектор td не выбирает других вовлеченных td: D
Гордон Густафсон,
3
вам не нужно устанавливать ширину, tdпотому что у вас может быть динамическое количество столбцов ... и он работает без него.
Даниил Пронин
4

Использование в table-layout: fixedкачестве собственности tableи width: calc(100%/3);для td( предполагается , что в 3 td«s ). Если эти два свойства установлены, ячейки таблицы будут одинакового размера.

Обратитесь к демонстрации .

Шашанк
источник
2
Вам не нужны они оба, достаточно одного решения.
Крис Крашевски