Подтвердить что ты не робот

Браузеры 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>&nbsp;</td>
<td class="set-width"><div class="box"></div></td>
</tr>
<tr>
<td>&nbsp;</td>
<td>unbroken</td>
</tr>
</table>
<h2>Table-Layout: Fixed</h2>
<table border="1" cellspacing="0" cellpadding="0" id="table-2">
<tr>
<td>&nbsp;</td>
<td class="set-width"><div class="box"></div></td>
</tr>
<tr>
<td>&nbsp;</td>
<td>unbroken</td>
</tr>
</table>
4b9b3361

Ответ 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>&nbsp;</td>
    <td><div class="box"></div></td>
  </tr>
</table>

Ответ 4

Задайте тип позиции (абсолютный/относительный и т.д.) полей, чтобы получить равные результаты, вам нужно будет откорректировать ящики.