我在div里面有一张桌子。我希望表占据div标签的整个宽度。
在CSS中,我将表格的宽度设置为100%。不幸的是,当div有一些余量时,表格会比它所在的div更宽。
我需要支持IE6和IE7(因为这是一个内部应用程序),尽管如果可能的话我显然想要一个完全跨浏览器的解决方案!
我正在使用以下DOCTYPE ......
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
编辑:不幸的是我无法对宽度进行硬编码,因为我正在动态生成HTML并且它包括将div递归地嵌套在彼此内部(每个div上有左边距,这会创建一个很好的'嵌套'效果)。
答案 0 :(得分:12)
将以下CSS添加到<table>
:
table-layout: fixed;
width: 100%;
答案 1 :(得分:7)
以下适用于Firefox和IE7 ......虽然指导原则是:如果在元素上设置宽度,请不要在同一元素上设置边距或填充。如果你是混合单位,比如混合百分比和像素,这就是特别是。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Test</title>
</head>
<body>
<div style="width: 500px; background-color:#F33;">
This is the outer div
<div style="background-color: #FAA; padding: 10px; margin:10px;">
This is the inner div
<table cellpadding="0" cellspacing="0" style="width: 100%">
<tr>
<td style="border: 1px solid blue; background-color:#FEE;">Here is my td</td>
</tr>
</table>
</div>
</div>
</body>
</html>
有关示例,请参阅here。
答案 2 :(得分:4)
基于百分比的宽度是相对于指定宽度的第一个父元素。如果你的div没有指定宽度,那么表的宽度与它无关。您是否可以发布标记的简化版本,以显示DOM
树的外观?
从另一个角度来看,如果您的父div已经设置了宽度并且边距仍在影响您的表格,那么您可能处于怪癖模式。您已指定DOCTYPE
,但请注意DOCTYPE
元素必须是文件中的第一行。在处理IE6
时需要注意的其他事项,默认情况下,如果您的内容比父母更宽,则会延长父级以适应,您可以通过向overflow: hidden
添加css
来停止此操作对于父元素,但在此过程中,您可能会隐藏某些子元素的内容。
答案 3 :(得分:3)
不确定这里有什么问题 - 这在IE6 / 7和FF3中运行良好。设置.container DIV元素的宽度可设置表的宽度。向.container div添加边距不会影响表格。也许你的标记/ CSS中还有其他东西会影响布局?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Boxes and Tables</title>
<style type="text/css">
div.container {
background-color: yellow;
border: 1px solid #000;
width: 500px;
margin: 5px auto;
}
table.contained {
width: 100%;
border-collapse: collapse;
}
table td {
border: 2px solid #999;
}
</style>
</head>
<body>
<div class="container">
<table class="contained">
<thead>
<tr><th>Column1</th><th>Column2</th><th>Column3</th></tr>
</thead>
<tbody>
<tr><td>Value</td><td>Value</td><td>Value</td></tr>
<tr><td>Value</td><td>Value</td><td>Value</td></tr>
<tr><td>Value</td><td>Value</td><td>Value</td></tr>
<tr><td>Value</td><td>Value</td><td>Value</td></tr>
<tr><td>Value</td><td>Value</td><td>Value</td></tr>
</tbody>
</table>
</div>
</body>
</html>
答案 4 :(得分:2)
我在这里找出了问题的核心。它与border-collapse
有关。我有一段时间同样的问题。由于表格通常具有薄边框,因此对大多数人来说问题并不明显。如果你把一个宽度设置为100%的常规表放在div中,就像Nate一样,你会没事的。
但是,如果在表格中指定border-collapse:collapse
,表格将突破div。这对大多数人来说并不明显,因为它可能只会突破一个像素,或者取决于它所处的上下文和用户代理,可能根本不会。
为了更清楚地了解正在发生的事情,请尝试以下操作:将Nate的示例放在David Heggie的示例旁边的html文件中。
看起来两者都很好。但现在,将Nate的内联TD风格改为border: 40px solid blue
。将David的table td样式更改为border: 40px solid #999;
。在这一点上,大卫的桌子突破了每边50%的边界。 Nate仍然有效。
在Nate的桌子上放一个border-collapse:collapse
样式,现在他也休息了。
导致它的是border-collapse
!
答案 5 :(得分:1)
如果你自动生成可能有边距的代码,添加一个简单的,没有样式的<div>
元素包装你的表就可以了。
答案 6 :(得分:1)
我一直使用<table width="100%">
答案 7 :(得分:0)
这是CSS处理宽度属性的方式的一个大问题,以及微软最初实现盒子模型的原因。微软输了,现在它是一个元素的宽度或边距/填充/边框。
,CSS3中的情况可能会变得更好答案 8 :(得分:0)
也许这篇关于Internet Explorer and the CSS box model的文章会有所帮助吗?
答案 9 :(得分:0)
试试这个:
div {
padding: 0px;
}
table {
width: 100%;
margin: 0px;
}
通过将div的填充设置为零,您将删除div的边框与其内容之间的空间。通过将表格的宽度设置为100%并将其边距设置为零,您将删除表格边框与其容器之间的空间。
答案 10 :(得分:0)
顺便说一下,您是否有充分的理由不使用严格的doctype? strict应该始终是默认值。 transitional仅适用于遗留代码。
答案 11 :(得分:0)
以下代码适用于IE6 / 8,Chrome,Firefox,Safari:
<style type="text/css">
div.container
{
width: 500px;
padding: 10px;
margin: 10px;
border: 1px solid red;
}
table.contained
{
width: 100%;
border: 1px solid blue;
}
</style>
<div class="container">
<table class="contained">
<tr>
<td>Hello</td><td>World</td>
</tr>
</table>
</div>
尝试复制并粘贴并在其上构建(只需将样式部分移动到标题或单独的.css文件中),也许您使用CSS内联(使用样式标记)的方式与问题,还是围绕div表块的其他一些CSS?浮动也会带来麻烦。
P.S。我设置了红色和蓝色边框,以查看区域扩展到哪里以进行更直观的检查。
答案 12 :(得分:0)
溢出:自动;如果你看到奇怪的东西,最外面的div可能会有所帮助 - 比如最外面的div比你想要的要小或者不占用它内部div的整个大小。