Html 体高 100% 显示垂直滚动条

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/12989931/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-29 03:29:37  来源:igfitidea点击:

Body height 100% displaying vertical scrollbar

htmlcss

提问by neodymium

Out of curiosity, considering the example below, why does having the margin on the #container div cause a vertical scrollbar to appear in the browser? The container is much smaller in height than the body height which is set to 100%.

出于好奇,考虑下面的示例,为什么 #container div 上的边距会导致浏览器中出现垂直滚动条?容器的高度比设置为 100% 的主体高度小得多。

I have set the padding and margins to 0 for all elements except the #container. Note that I have deliberately omitted absolute positioning on the #container div. In this case how is the browser calculating the height of the body and how is the margin affecting it?

我已将除#container 之外的所有元素的内边距和边距设置为 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>

Example also on JSFiddle

JSFiddle上的例子

采纳答案by BoltClock

If you paint the backgrounds of htmland body(giving each its own color), you'll quickly notice that bodyis being shifted down along with #container, and #containeritself isn't offset from the top of bodyat all. This is a side effect of margin collapse, which I cover in detail here(although that answer describes a slightly different setup).

如果你画的背景htmlbody(给每一个自己的颜色),你会很快通知,body正在沿向下移动#container,而#container本身不是从顶部偏移body的。这是margin collapse的副作用,我在这里详细介绍(尽管该答案描述的设置略有不同)。

It's this behavior that's causing the scrollbar to appear, since you've declared bodyto have 100% the height of html. Note that the actual height of bodyis unaffected, as margins are never included in height calculations.

它的这种行为是造成滚动条出现,因为你已经宣布body有100%的高度html。请注意,实际高度body不受影响,因为边距永远不会包含在高度计算中。

回答by Michel

A bit late, but maybe it helps someone.

有点晚了,但也许它可以帮助某人。

Adding float: left;to #containerremoves the scrollbar, as W3C says:

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

?Margins between a floated box and any other box do not collapse (not even between a float and its in-flow children).

?浮动框和任何其他框之间的边距不会折叠(甚至在浮动框和它的流入子框之间也不折叠)。

回答by harshvchawla

Based upon @BoltClock?'s answer, I fixed it by zeroing the margin...
so

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

html,body, #st-full-pg {
   height: 100%;
   margin: 0;
}

works where id "st-full-pg" is assigned to a panel div (which further contained panel-heading and panel-body)

在将 id "st-full-pg" 分配给面板 div(进一步包含面板标题和面板正文)的情况下工作

回答by ben.tiberius.avery

adding float:left;is nice, but will interfere with central horizontal positioning using margin:auto;

添加float:left;很好,但会干扰中央水平定位使用margin:auto;

if you know how big your margin is, you can account for that in your height percentage using calc:

如果您知道您的利润有多大,您可以使用 calc 在您的身高百分比中说明这一点:

height: calc(100% - 50px);

browser support is good, but only IE11+ https://caniuse.com/#feat=calc

浏览器支持不错,但只有 IE11+ https://caniuse.com/#feat=calc

回答by Vikash Pal

I have found a solution: add padding: 1px 0; to body prevents vertical scrollbars to appear

我找到了一个解决方案:添加 padding: 1px 0; to body 防止出现垂直滚动条

回答by Evan Hu

Inspired by @BoltClock, I tried this and it worked, even when zoom out and in.

受到@BoltClock 的启发,我尝试了这个并且它有效,即使在放大和缩小时也是如此。

Browser: Chrome 51

Browser: Chrome 51

html{
  height: 100%;
}
body{
  height: 100%;
  margin: 0px;
  position: relative;
  top: -20px;
}

I guess bodywas shifted down 20px.

我猜body是向下移动了 20px。

回答by NexusRex

Add overflow: hidden;to html and body.

添加overflow: hidden;到 html 和正文。

html, body {
  height: 100%;
  overflow: hidden;
}

回答by fjkjava

html,body {
   height: 100%;
   margin: 0;
   overflow: hidden;
}

This worked for me

这对我有用

回答by lalit bhakuni

html, body {
    height: 100%;
    overflow: hidden;
}

If you want to remove the body scrolling add the following style:

如果要删除正文滚动,请添加以下样式:

body {
    height: 100%;
    overflow: hidden;
}

回答by TheZacher5645

I saw this problem fixed before where you put all the contents of bodyin a div called wrap. Wrap's style should be set to position: relative; min-height: 100%;. To position #containerdiv 50px from the top and left put a div inside wrap with a padding set to 50px. Margins will not work with wrap and the div we just made, but they will work in #containerand everything inside it.

在将 的所有内容放在body名为 wrap 的 div 中之前,我看到此问题已解决。Wrap 的样式应设置为position: relative; min-height: 100%;. 要将#containerdiv 放置在距离顶部和左侧 50px 的位置,请将一个 div 放在 wrap 内,并将 padding 设置为 50px。边距不适用于 wrap 和我们刚刚制作的 div,但它们可以在其中#container以及其中的所有内容中使用。

here's my fix on jsfiddle.

这是我对 jsfiddle 的修复