Браузеры Webkit не учитывают заполнение при определении ширины ячейки в таблице-макете: исправлено
Я получаю разные результаты при применении table-layout:fixed
к таблице и использовании дополнения к ячейкам. Кажется, что IE и Firefox работают правильно, добавляя ширину ячейки и прокладку вместе. Chrome и Safari используют только ширину ячейки. Я видел, что проблема связана с проблемой, но не может найти никаких обходных решений. Кто-нибудь знает, как обойти это?
WebKit Bugzilla: https://bugs.webkit.org/show_bug.cgi?id=13339
table {
width:200px;
border-collapse:collapse;
}
#table-1 {
table-layout:auto;
}
#table-2 {
table-layout:fixed;
}
td {
padding:5px 10px;
}
td.set-width {
width:15px;
}
.box {
width:15px;
height:15px;
background-color:red;
}
<h2>Table-Layout: Auto</h2>
<table border="1" cellspacing="0" cellpadding="0" id="table-1">
<tr>
<td> </td>
<td class="set-width"><div class="box"></div></td>
</tr>
<tr>
<td> </td>
<td>unbroken</td>
</tr>
</table>
<h2>Table-Layout: Fixed</h2>
<table border="1" cellspacing="0" cellpadding="0" id="table-2">
<tr>
<td> </td>
<td class="set-width"><div class="box"></div></td>
</tr>
<tr>
<td> </td>
<td>unbroken</td>
</tr>
</table>
Ответы
Ответ 1
Есть 3 метода, о которых я могу думать.
Проще всего было бы добавить блоки таблиц стилей, интерпретируемые только браузерами Chrome и Safari, которые корректируют поведение, чтобы принять во внимание проблему рендеринга. Избегайте использования "экрана @media и (-webkit-min-device-pixel-ratio: 0)", поскольку это может повлиять на Opera и некоторые версии FF. Используйте "body: first-of-type":
body:first-of-type td {
padding:5px 10px;
}
Вы также можете иметь отдельные таблицы стилей:
<link rel="stylesheet" type="text/safari" href="webkit-styles.css" />
<link rel="stylesheet" type="text/chrome" href="webkit-styles.css" />
Третий вариант - использовать Javascript. В тегах script вы можете использовать navigator.appName и navigator.appVersion для идентификации браузера и исправления проблем динамически.
Ответ 2
Если у вас есть разница в том, как они вычисляют ширину при заполнении, почему бы не удалить дополнение из td
?
<table style="table-layout: fixed;">
<tr>
<td style="width: 100px;">
<div style="padding: 10px;">
lorem, ipsum.
</div>
</td>
</tr>
</table>
Ответ 3
Вы можете обойти эту ошибку, если используете тег <colgroup>
и укажите ширину в <col>
INSTEAD OF на <td>
.
.secondCol {
width: 15px;
}
<table border="1" cellspacing="0" cellpadding="0" id="table-2">
<colgroup>
<col class="firstCol">
<col class="secondCol">
</colgroup>
<tr>
<td> </td>
<td><div class="box"></div></td>
</tr>
</table>
Ответ 4
Задайте тип позиции (абсолютный/относительный и т.д.) полей, чтобы получить равные результаты, вам нужно будет откорректировать ящики.
Ответ 5
<link rel="stylesheet" type="text/chrome" href="webkit-styles.css">
Chrome планирует исправить эту ошибку (другими словами: отключить этот хак)
в версии 50
http://code.google.com/p/chromium/issues/detail?id=286682
https://groups.google.com/a/chromium.org/forum/m/#!topic/blink-dev/nH1O6WszMgo