Рассмотрим эту простую таблицу HTML:
<!doctype html>
<html>
<head>
<title>Test</title>
</head>
<body>
<table style="border-collapse: collapse; table-layout: fixed; width: 280px;">
<tr>
<td style="padding: 5px; width: 50px; border: 0; word-wrap: break-word;">a</td>
<td style="padding: 5px; width: 100px; border: 0; word-wrap: break-word;">b</td>
<td style="padding: 5px; width: 100px; border: 0; word-wrap: break-word;">c</td>
</tr>
</table>
</body>
</html>
Это правильно отображается в каждом главном браузере, за исключением Chrome, в котором ширина столбцов причудливо выдается как 46px, 102px и 102px соответственно.
Если я беру объявление ширины CSS из элемента таблицы, он корректно отображается в Chrome. Но мне это нужно, иначе перенос слов будет работать неправильно.
Любая идея, почему это не работает? Я пробовал разные доктрины, и это ничего не изменило, поэтому я предполагаю, что это не проблема таблицы HTML5.
РЕДАКТИРОВАТЬ: Оказывается, если вы укажете table-layout: fixed
и ширину пикселя в элементе table
и ширину пикселей в каждом столбце, то Chrome предположит, что ваши ширины столбцов включают дополнение. Это противоречит модели коробки W3C и нарушает требуемое поведение CSS2.
Если вы не укажете table-layout: fixed
или вы не укажете ширину пикселя в элементе table
, то Chrome правильно примет ширину столбца, которую вы укажете, чтобы исключить заполнение. Все другие браузеры предполагают, что ширина столбцов исключает заполнение.
В приведенном выше примере указание ширины как 60px, 110px и 110px устранит проблему в Chrome, но затем сломает ее в любом другом браузере. Значения 46px, 102px и 102px поступают из Chrome, равномерно распределяя столбцы с соотношением 40:90:90 вместо 50: 100: 100.