将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>
答案 0 :(得分:1)
我能想到3种方法。
最简单的方法是添加仅由Chrome和Safari解释的样式表块,以调整行为以考虑渲染问题。避免使用“@media screen and(-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。在脚本标记内,您可以使用navigator.appName和navigator.appVersion来识别浏览器并动态修复问题。
答案 1 :(得分:1)
如果在涉及填充时如何计算宽度的差异,为什么不从td
删除填充?
<table style="table-layout: fixed;">
<tr>
<td style="width: 100px;">
<div style="padding: 10px;">
lorem, ipsum.
</div>
</td>
</tr>
</table>
答案 2 :(得分:1)
如果您使用<colgroup>
代码并在<col>
上的<td>
INSTEAD OF上指定宽度,则可以解决此错误。
.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>
答案 3 :(得分:0)
设置框的位置类型(绝对/相对等)以获得相同的结果,您需要从那里调整框。