鉴于此html:
<body>
<div id="a"></div>
<div id="b"></div>
</body>
我希望#b
填充其容器块的所有剩余垂直空间,我从这开始:
body {
height: 500px;
width: 500px;
overflow: hidden;
}
#a {
height: 100px;
width: 100px;
}
#b {
height: 100%;
width: 100%;
}
所以#b
是100%高度,这意味着它正在取其父容器块的高度,即500px
,问题是overflow: hidden;
似乎不起作用,#b
未被剪裁。
另一方面,如果我将#a
和#b
与另一个具有与上面body
相同属性的div包裹起来,我会得到所需的结果:
#wrap {
height: 500px;
width: 500px;
overflow: hidden;
}
#a {
height: 100px;
width: 100px;
}
#b {
height: 100%;
width: 100%;
}
当然使用这个HTML:
<body>
<div id="wrap">
<div id="a"></div>
<div id="b"></div>
</div>
</body>
我的问题是为什么div
和body
似乎具有相同属性的不同行为?如果没有包装器,有没有办法获得相同的效果?
为了说明我创建了两个jsFiddles的问题:
js使用body标签作为包装器:http://jsfiddle.net/3AMtG/
jsFile with div tag as wrapper:http://jsfiddle.net/2QWn3/
具有相同属性的两个jsFiddles会产生不同的结果。那是为什么?
答案 0 :(得分:7)
overflow
属性具有特定于HTML的html
和body
元素的特定行为,这些行为在CSS2.1 spec中有所描述。这些特殊情况适用于在正常情况下适应整个页面上的更改溢出设置,因此作者只需在html
或body
上设置,但不能同时设置。
在这种情况下,当您将overflow: hidden
应用于body
时,它实际上会影响视口而不是body
(您可以通过调整预览窗格来缩短视图,使其更短 - 不滚动条将出现在预览窗格本身上)。这会导致#b
正常溢出身体,即使您给它的固定高度小于#a
和#b
的总和。换句话说,就好像你从来没有把它放在身体上一样。
如果您将overflow
设置为visible
上html
以外的其他内容,则会导致视口使用html
而不是body
的值因此,body
上的声明不受影响,并允许它的行为与包装器相同:
html {
overflow: auto;
}
body {
height: 500px;
width: 500px;
overflow: hidden;
}
答案 1 :(得分:0)
<div class='xxx-ctn'>
<div class='xxx-inner'>
<div class='data-wrapper'>
[p|ul|ol|h1-h6|article|section].....
</div>
</div>
</div>
好吧,我错过了你的创始人,但我认为这是一个很好的编码习惯。
答案 2 :(得分:0)
Body元素被视为主要的父元素,因此浏览器窗口中显示的其他元素都位于其中,因此width和height属性不适用于它。根据最佳实践,最好在第二个示例中创建一个像#wrapper这样的div容器。