IE不尊重td宽度

问题描述:

我有一个基于表格的布局,它被分成四列,其中两个用于填充目的。在大多数浏览器中,它工作正常,但在正常和兼容模式下,至少在IE9上,单元格的大小并不是它们应有的大小。IE不尊重td宽度

我试着定义宽度作为属性和CSS样式,但都似乎没有帮助。 See fiddle进行演示。

我想:

+------------------------------------------+ 
| 320   | 20 | 39 | 320   | 
|    | |  |    | 
+------------------------------------------+ 

我得到:(四舍五入,值是小数)

+------------------------------------------+ 
| 324   | 19 | 34 | 321   | 
|    | |  |    | 
+------------------------------------------+ 

随着实际内容而不是占位符的东西不同的是更夸张的是,最左边的列是和最右边的像素宽度的。

我最初只有两列填充边缘,但切换到当前版本作为尝试修复。它没有效果。

这是HTML通讯,所以使用无表格布局不是一种选择。

+0

我没有看到问题,但我也在运行IE9。 - 另外,表格实际上并不是用于此类内容的理想标签。你真的应该造型div,也许使用浮动风格。 – 2011-05-25 13:56:02

+0

是的,事实上,由于表格的工作方式,使用表格是一件坏事。不过,你可以保证使用div的好结果。 – FreeSnow 2011-05-25 13:58:50

+1

谢谢,但你有没有尝试过在HTML电子邮件中使用浮动的div?它们不适用于大多数电子邮件客户端。 – Kaivosukeltaja 2011-05-25 14:00:14

我终于找到了解决问题的办法。四个单元本身是好的,但包含通讯标题和进入这个代码把它弄坏了:

<tr><td colspan="4">Some long text here</td></tr> 

我改成了这一点,它开始工作:

<tr><td colspan="4" width="700">Some long text here</td></tr> 

宽列的宽度为700像素是否或者我不强迫它,但如果我不这样做,单列单元格的宽度会变得混乱。我认为这是IE中的一个明确的错误。

有助于查看您的CSS和HTML。但是在测量表格的总宽度时不要忘记边框数量。

margin + border + padding + width = real width。

此外,请确保您没有任何元素在其中一个比单元格宽度大的单元格中。

+0

小提琴包含HTML,CSS不相关,因为没有它可以复制问题。在20px宽的列​​中只有一个1px边框,并且没有边距或填充或其中任何一个。 – Kaivosukeltaja 2011-05-25 14:45:24

+0

呵呵,没有任何单元格内的元素超过320px。 – Kaivosukeltaja 2011-05-25 14:47:31

<table width="699" border="0" cellpadding="0" cellspacing="0"> 
    <tr> 
    <td width="320" height="50" valign="top"><!--test-->&nbsp;</td> 
    <td width="20" valign="top"><!--test-->&nbsp;</td> 
    <td width="39" valign="top"><!--test-->&nbsp;</td> 
    <td width="320" valign="top"><!--test-->&nbsp;</td> 
    </tr> 
</table> 

这应该工作

+1

是的,清空所有的内容将使单元格尺寸合适,但它有点挫败了整个时事通讯的目的...... :) – Kaivosukeltaja 2011-05-25 14:57:02

在过去,我发现这是解决几乎是不可能的问题,除非你离开你的表元素的一个无固定宽度。

如果你这样做,那么我发现该列将是调整大小,而其余的应该是你要求的大小。

这并不理想,但至少它是合理可预测和可控的。