高度:100%或最小高度:100%用于html和body元素?


82

在设计布局时,我将html, body元素设置为height100%但是在某些情况下,这失败了,那么应该使用什么?

html, body {
   height: 100%;
}

要么

html, body {
   min-height: 100%;
}

嗯,这不是基于观点的,因为每种方法都有其自身的缺陷,那么推荐的方法是什么?为什么?

Answers:


192

如果你想背景图片适用于htmlbody,填补了整个浏览器窗口,两者都不是。使用此代替:

html {
   height: 100%;
}

body {
   min-height: 100%;
}

我的推理在这里给出(在此我全面解释如何以这种方式应用背景):

顺便说一句,你为什么要注明原因height,并min-heighthtmlbody分别为,因为无论元素有什么内在的高度。两者都是height: auto默认设置。视口具有100%的高度,因此height: 100%是从视口中提取的,然后body最小化以允许滚动内容。

height: 100%在两者上使用的第一种方法是,body一旦内容开始超出视口高度,就可以防止其内容扩展。从技术上讲,这不会阻止内容滚动,但会导致body折叠下面留出空隙,这通常是不希望的。

第二种方法,min-height: 100%在这两种方法上都使用,不会导致body扩展到的最高高度,html因为min-height带有百分比的方法不起作用,body除非html有一个explicit height

为了完整起见,CSS2.1的第10节包含了所有详细信息,但这是一个非常复杂的阅读,因此,如果您对我在这里没有解释的内容不感兴趣,可以跳过它。


4
这就是我最喜欢的:)height: 100% is taken from the viewport, then applied to body as a minimum to allow for scrolling of content简单的解决方案... // //
Alien先生2013年

我不知道,然后滚动条如何神奇地出现?该html元素overflow:visible默认情况下具有,因此我假定滚动条是由于浏览器行为而出现的,以允许显示文档的整个正常流程。
法布里西奥磨砂

@FabrícioMatté:转换为overflow: auto视口,即滚动条的来源。第11节
对此

10
@BoltClock任何想法如何得到身体的孩子100%在这里这个工作虽然
外国人先生

1
框大小:边框不会影响边距。是的,是的,但这取决于个人喜好。
BoltClock

17

您可以使用视口高度(vh)单位:

body {
    min-height: 100vh;
}

它是相对于屏幕的,而不是相对于父级的高度,因此您不需要html高度:100%。


但是,这提供了哪些额外的优势。
xji

没有额外的优势,只是解决问题的另一种方法。
Damjan Pavlica

当心手机如何理解这一点
GWorking

请注意,并非所有浏览器都支持此单元...请先检查浏览器的兼容性:caniuse.com/#feat=viewport-units
dBlaze
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.