车身高度100%显示垂直滚动条

neo*_*ium 73 html css

出于好奇,考虑下面的例子,为什么#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>
Run Code Online (Sandbox Code Playgroud)

关于JSFiddle的例子

Bol*_*ock 54

如果你画出背景htmlbody(给它自己的颜色),你会很快注意到它body正在向下移动#container,并且#container它本身并没有偏离顶部body.这是副作用保证金崩溃,这是我在详细讨论这里(虽然这个答案描述了一个稍微不同的设置).

正是这种行为导致滚动条出现,因为你声明body了100%的高度html.请注意,实际高度body不受影响,因为边距永远不会包含在高度计算中.

  • 那该怎么办?通过[浮动容器,如米歇尔建议](http://stackoverflow.com/a/22166728/1269037)? (6认同)
  • @TMB:`html`的100%高度使其成为视口的100%(浏览器的查看区域),而`body`的100%高度使其100%的父级,即`html`.随后的任何百分比始终是元素祖先的百分比.如果你没有在`html`或`body`上设置100%的高度,那么它们的行为就像任何其他块元素一样.有关详细信息,请参见http://www.w3.org/TR/CSS21/syndata.html#percentage-units.在渲染过程中,%s和ems最终都必须转换为某个绝对值,以便浏览器确切地知道在屏幕上测量和渲染事物的大小. (4认同)

Mic*_*hel 18

有点晚了,但也许有人帮忙.

添加float: left;#container删除滚动条,如W3C所说:

•浮动框和任何其他框之间的边距不会折叠(甚至浮动及其流入子项之间也不会).


har*_*wla 12

根据@ BoltClock♦的回答,我通过将边距归零来修复它......
所以

html,body, #st-full-pg {
   height: 100%;
   margin: 0;
}
Run Code Online (Sandbox Code Playgroud)

适用于将id"st-full-pg"分配给面板div(其中还包含面板标题和面板主体)


小智 5

html,body {
   height: 100%;
   margin: 0;
   overflow: hidden;
}
Run Code Online (Sandbox Code Playgroud)

这对我有用

  • 如果你有页脚,它会删除它 (2认同)