在this example ...
<body>
<div>
<div>foo bar</div>
</div>
</body>
body, html, div {
height: 100%;
margin: 0;
}
div div {
display: inline-block;
overflow: hidden;
}
为什么overflow: hidden
会导致垂直滚动条?另外,为什么这个高度不归因于页面上的任何内容?这就像一个无形的边缘。
所有元素的100%高度是有意的。理论上,这应该导致最内部的div扩展以满足视口。它确实如此! ......只要overflow: hidden
不存在,为什么?
答案 0 :(得分:19)
额外高度与vertical-align: baseline
和vertical-align: bottom
之间的高度差相同。 “下行线”。这就是看似随机的“5个额外像素”的来源。如果字体大小是10倍,那么这个间隙也将是10倍。
此外,似乎当overflow: hidden
不时,inline-block
元素的基线与其最后一行文本的基线相同。
这让我相信overflow: hidden
强制整个inline-block
元素的基线位于元素的底部。即使那里没有文本,inline-block
元素的父级也为下行线保留空间。在问题中给出的示例中,由于inline-block
元素的父级具有height: 100%
,因此不容易看到。因此,为下行线保留的额外空间溢出了该父div。
为什么这个空间仍然存在,即使没有文字?我认为这是因为inline-block
创建了一个内联格式化上下文,这是导致这个空间的原因。如果此元素为block
,则只有在遇到内联元素或文本时才会创建此内联格式设置上下文。
这只是一个理论,但似乎可以解释它。它还解释了为什么@Jonny Synthetic的答案有效:添加溢出:隐藏到父级隐藏了额外的下行线。
感谢@Hashem Qolami jsbins给了我这个理论。
答案 1 :(得分:8)
将overflow: hidden
添加到父div不是我的选项,也是因为我的HTML结构不起作用。
但是,我注意到感谢@Tony Gustafsson在OP中的评论,这确实解决了问题:
div div {
vertical-align: bottom;
}
答案 2 :(得分:1)
高度为100%的项目也需要溢出:隐藏。第一个css规则仅针对外部div,隐藏的溢出应用于内部div。
Jsfiddle与这个CSS,它运作良好:
body, html, div {
height: 100%;
margin: 0px;
padding:0px;
overflow: hidden;
}
div div {
display: inline-block;
overflow: hidden;
}