【发布时间】:2011-07-08 06:43:13
【问题描述】:
您好,感谢您的收听。这对我来说不是一个紧迫的问题,我只是好奇为什么下面的代码会这样做。我想在可见页面周围有一个边框(或边距),以及一个嵌套的 DIV,其中“100% 高度和宽度”指的是该边框的内部(用于进一步嵌套)。
<html>
<body style='height:100%; width:100%; margin:0;'>
<div style='border:5px solid green'>
<div style='height:100%; width:100%;'>
</div>
</div>
</body>
</html>
显然我(想)知道盒子模型和 100% 的含义(这里:第一个 DIV 的内容框),并且我知道如何使用绝对定位来解决问题。
但我不明白的是:在 Chromium 和 Firefox 中,为什么我得到一个 vertical 滚动条但没有 horizontal 滚动条?看起来第二个 DIV 中的 100% 高度没有考虑第一个 DIV 的内容框(尊重 5px 边框),而是整个 BODY 内容框。然而,对于 100% 的宽度,事情就像我想象的那样工作 - 没有出现水平滚动条。
有人可以启发我吗?这是历史性的浏览器行为吗?
EDIT 在 FredWilson 的回答之后:如果你给 BODY 绝对尺寸 'height:100px; width:100px' 结果保持不变:垂直边框扩展了 100px 高度,但包含了水平边框。我尝试重新阅读the CSS spec 的小字,但到目前为止,我没有看到高度和宽度处理之间的任何区别。
左:Firebug 中的 BODY 标记;右:Firebug 中的第一个 DIV 标记。
【问题讨论】:
-
不能给body元素设置border属性吗?我不知道,因为我从来没有那样用过。
-
不,这会将高度和宽度都推到大于当前窗口大小。我知道有解决方法,我只是想了解为什么上面的 sn-p 会像这样被解释:-)
-
就像我在下面所说的,在你的第一张图片中,你的身体渲染@100px。在第二张图片中,您让内部 div 将外部 div 高度推到 100%(身体的)。浏览器仍然计算边界并将外部 div 渲染到 body 之外 10px。可能没有多大意义,但 DOM 就是那样有趣。
-
我完全同意你的看法,只是想补充一点,“小”DIV 和 BODY 也会发生这种情况。 (如果你用额外的 DIV 替换 BODY 尺寸,也会发生同样的事情。)现在我只是想知道高度和宽度处理之间的这种差异是否只是不同渲染引擎暴露的“常见行为”,或者它是否在规范中的某个地方定义?
-
我从未在规格中找到它,相信我,我已经看过了!按照我阅读规范的方式,在这种情况下我们也应该得到水平滚动条。有趣的是,我们如何让 div 溢出 BODY 元素,但并不令人惊讶。