出于好奇,考虑下面的例子,为什么#container div上的边距导致垂直滚动条出现在浏览器中?容器的高度远小于设置为100%的身高 .
我已经为除#container之外的所有元素将padding和margin设置为0 . 请注意,我故意在#container div上省略了绝对定位 . 在这种情况下,浏览器如何计算身体的高度以及保证金如何影响身体?
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
* { padding:0; margin:0;}
html, body { height:100%; }
#container
{
padding:10px;
margin:50px;
border:1px solid black;
width: 200px;
height: 100px;
}
</style>
</head>
<body>
<div id='container'>
</div>
</body>
</html>
例子也在JSFiddle
12 回答
If you paint the backgrounds of html and body (giving each its own color),你很快会注意到
body
正在与#container
一起向下移动,#container
本身并没有从body
的顶部偏移 . 这是margin collapse的副作用,我详细介绍了here(尽管该答案描述了略有不同的设置) .它会导致滚动条出现,因为你声明
body
的高度为html
的100% . 请注意,body
的实际高度不受影响,因为高度计算中的边距永远不会包含在内 .有点晚了,但也许有人帮忙 .
将
float: left;
添加到#container
会删除滚动条,正如W3C所说:•浮动框和任何其他框之间的边距不会折叠(甚至浮动及其流入子项之间也不会) .
基于@ BoltClock♦的答案,我通过将边距归零来修复它...
所以
适用于将id“st-full-pg”分配给面板div(其中还包含面板 Headers 和面板主体)
将
overflow: hidden;
添加到html和正文 .我找到了一个解决方案:添加填充:1px 0; to body可防止出现垂直滚动条
如果要删除正文滚动,请添加以下样式:
在将
body
的所有内容放在一个名为wrap的div中之前,我看到了这个问题 . Wrap的样式应设置为position: relative; min-height: 100%;
. 要从顶部和左侧放置#container
div 50px,请将div内部包裹,并将填充设置为50px . 边距不会与wrap和我们刚刚制作的div一起使用,但是它们将在#container
及其中的所有内容中工作 .here's my fix on jsfiddle .
这对我有用
添加
float:left;
很不错,但会使用margin:auto;
干扰中央水平定位如果您知道您的保证金有多大,您可以使用calc计算您的高度百分比:
浏览器支持很好,但只有IE11 https://caniuse.com/#feat=calc
受到@BoltClock的启发,我试过这个并且它有效,即使在缩小和缩小时也是如此 .
Browser: Chrome 51
我猜
body
被降低了20px .我想分享替代方法,我们可以使用填充而不是边距 - 所以页面看起来一样 .
默认的盒子模型是“content-box”,它不包括填充和边距,因此总高度超过视口高度的100% .
因此,我们可以选择“边框”框模型,其中包括高度计算中的填充 .
CSS does the width include the padding?
https://developer.mozilla.org/en-US/docs/Web/CSS/box-sizing
我找到了一个快速解决方案:尝试将高度设置为99.99%而不是100%