我想让 body
占据整个浏览器高度,是否可以使用 CSS 实现?
我尝试设置 height: 100%
,但没有效果。
我想为页面设置背景颜色,填满整个浏览器窗口,但如果页面内容很少,底部会出现一个丑陋的白色条。
我想让 body
占据整个浏览器高度,是否可以使用 CSS 实现?
我尝试设置 height: 100%
,但没有效果。
我想为页面设置背景颜色,填满整个浏览器窗口,但如果页面内容很少,底部会出现一个丑陋的白色条。
尝试将html元素的高度也设置为100%。
html,
body {
height: 100%;
}
Body会根据其父元素(HTML)来确定如何缩放动态属性,所以HTML元素也需要设置高度。
但是body的内容可能需要动态更改。将min-height设置为100%可以实现此目标。
html {
height: 100%;
}
body {
min-height: 100%;
}
body {min-height}
版本,则无法使用.body-child{height: 100%}
的技巧。 - Salman Abody { height:100vh }
- 在此处检查答案https://dev59.com/CWw15IYBdhLWcg3wYKqo#25829844。 - Adriano Resendehtml
和 body
元素的高度设置为 100%
的替代方案,您还可以使用视口百分比长度单位。5.1.2. 视口百分比长度:'vw'、'vh'、'vmin'、'vmax' 单位。视口百分比长度是相对于初始包含块的大小而言的,当初始包含块的高度或宽度更改时,它们会相应地进行缩放。在此示例中,您可以使用值为 100vh
的单位——它等于视口的高度。在此查看示例。body {
height: 100vh;
padding: 0;
}
body {
min-height: 100vh;
padding: 0;
}
这在大多数现代浏览器中都得到了支持 - 这里可以找到支持情况。
margin: 0;
才能避免右侧出现持续的垂直滚动条。 - Andy Raddatz如果你有一张背景图片,那么你会想要设置它而不是原来的背景颜色:
html{
height: 100%;
}
body {
min-height: 100%;
}
这样可以确保当内容高度超出视口时,body标签可以继续增长,并且在向下滚动时背景图像可以继续重复/滚动/其他。
请记住,如果您需要支持IE6,您需要找到一种方法来插入height:100%
以适应body,因为IE6会将height
视为min-height
。
body{min-height: 100vh}
就可以了。 - Angry Danbody { height: auto; }
来隐藏滚动条。除此之外,一切完美。 - Torxed如果你想保留页面主体的边距并且不想出现滚动条,可以使用以下CSS:
html { height:100%; }
body { position:absolute; top:0; bottom:0; right:0; left:0; }
设置 body {min-height:100%}
将会为你提供滚动条。
body
子句中加入height: auto;
才能让滚动条弹出,以符合接受的答案。 - Torxed经过测试不同的情况,我认为这是最好的解决方案:
html {
width: 100%;
height: 100%;
display: table;
}
body {
width: 100%;
display: table-cell;
}
html, body {
margin: 0;
padding: 0;
}
它是动态的,因为如果它们的内容溢出,html
和body
元素将自动扩展。我在最新版本的Firefox、Chrome和IE 11中测试过。
在这里查看完整的 fiddle(对于那些讨厌表格的人,您可以随时将其更改为使用 div):
https://jsfiddle.net/71yp4rh1/9/
话虽如此,这里发布的答案存在几个问题。
html, body {
height: 100%;
}
使用上述CSS将导致html和body元素在内容溢出时不会自动扩展,如此处所示:https://jsfiddle.net/9vyy620m/4/
当你滚动时,注意到了重复的背景吗?这是因为body元素的高度没有因其子表格溢出而增加。为什么它不像其他块级元素一样扩展呢?我不确定。我认为浏览器处理得不正确。
html {
height: 100%;
}
body {
min-height: 100%;
}
在body上设置min-height为100%会引起其他问题。如果这样做,你就不能像这个示例https://jsfiddle.net/aq74v2v7/4/那样指定子div或表的百分比高度。
希望这可以帮助某些人。我认为浏览器处理这个不正确。我希望body的高度能够自动调整,如果它的子元素溢出的话,它也会变得越来越大。然而,当你使用100%高度和100%宽度时,似乎并没有发生这种情况。
height: 100vh
也不是解决方案。如果将顶部容器设置为100vh
高和100vw
宽,如果容器有滚动条,则可能会导致容器比应该更大(并可能导致滚动条不必要地可见)。在新的Android设备上(例如Android 9的小米Mi 9),height:100vh
也会给我们带来问题,容器会比屏幕本身更大,并且会使文档主体出现不必要的垂直滚动条。 - jtomplhtml, body
{
height: 100%;
margin: 0;
padding: 0;
}
使用现代CSS的更好解决方案
html, body{
min-height: 100vh;
overflow: auto;
}
overflow: auto
就可以实现魔法。顺便说一下,我使用的是Chrome浏览器。 - Lying_cat我在每个CSS文件的开头都使用如下内容:
html, body{
margin: 0;
padding: 0;
min-width: 100%;
width: 100%;
max-width: 100%;
min-height: 100%;
height: 100%;
max-height: 100%;
}
0边距确保浏览器不会自动将HTML和BODY元素定位到它们左侧或右侧留有一些空间。
0填充确保浏览器不会因为默认设置而自动将它们内部的所有内容向下或向右推。
宽度和高度变量设置为100%,以确保浏览器不会因为自动设置边距或填充而调整它们的大小。最小和最大设置只是为了防止出现奇怪的不可解释的问题,但你可能并不需要它们。
这种解决方案还意味着,就像我几年前刚开始学习HTML和CSS时所做的那样,您无需给第一个
发布之前,我查看了我的另一个全屏CSS项目,并发现我在那里使用的仅是body{margin:0;},没有其他任何东西,这已经在我工作了2年的时间里运行良好。
希望这个详细的答案能帮到你,我也理解你的痛苦。在我看来,浏览器应该不会在body/html元素的左侧和有时候是顶部设置不可见的边界是很愚蠢的。
width: 100%
对于 body 和 html 元素的可能目的是什么?是的,我明白从实际角度来看,在大多数情况下 body { margin: 0; }
应该已经足够了。我只是想更深入地了解。 - john c. j.在旧版浏览器中,大多数其他发布的解决方案都不能很好地工作!而且一些人发布的代码会导致在现代浏览器中出现超出100%高度的丑陋文本溢出,这对设计来说是不好的!因此,请尝试使用我的代码解决方案。
以下CSS代码应正确支持所有已知浏览器的灵活网页高度设置:
html {
height: 100%; /* Fallback CSS for IE 4-6 and older browsers. Note: Without this setting, body below cannot achieve 100% height. */
height: 100vh;/* Overrides 100% height in modern HTML5 browsers and uses the viewport's height. Only works in modern HTML5 browsers */
}
body {
height: auto; /* Allows content to grow beyond the page without overflow */
width: auto; /* Allows content to grow beyond the page without overflow */
min-height: 100%; /* Starts web page with 100% height. Fallback for IE 4-6 and older browsers */
min-height: 100vh;/* Starts web page with 100% height. Uses the viewport's height. Only works in modern HTML5 browsers */
overflow-y: scroll;/* Optional: Adds an empty scrollbar to the right margin in case content grows vertically, creating a scrollbar. Allows for better width calculations, as the browser pre-calculates width before scrollbar appears, avoiding page content shifting.*/
margin: 0;
padding: 0;
background:yellow;/* FOR TESTING: Next add a large block of text or content to your page and make sure this background color always fills the screen as your content scrolls off the page. If so, this works. You have 100% height with flexible content! */
}
上述代码注意事项:
在许多旧的及新的浏览器中,如果您不在<html>
选择器上设置100%的高度,body
将永远无法实现100%的高度!因此这非常关键。
新的视口单位(“vh”)对于body
选择器来说是冗余的,只要您已将html
选择器设置为100%
或100vh
。原因是总是从父级html
派生其值。但除了一些非常古老的浏览器之外,最好为body
设置一些高度值。
一些使用body
选择器的现代浏览器将不知道如何直接继承视口高度,所以始终将html
选择器设置为100%高度!您仍然可以在body
中使用"vh"单位,以绕过父级html
值,并直接从大多数现代浏览器的视口获取其属性尺寸,但如果父级或根html
选择器具有100%
高度,则再次是可选的,因为body
始终会正确继承。
请注意,我将body
设置为height:auto
而不是height:100%
。这会使元素最初围绕内容崩溃,以便随着内容的增长而增长。您不想将body
的height
和width
设置为100%
或特定值,因为这将限制内容到当前的可视尺寸,而不是其可滚动尺寸。每当您分配body height:100%
时,只要内容文本超出浏览器的高度,它就会溢出容器,从而创建一个丑陋的视觉效果!height:auto
是CSS中您最好的朋友!
但是,您仍然希望默认为100%的高度,对吗?这就是min-height:100%
的神奇之处!它不仅允许您的元素默认为100%的高度,而且即使在最古老的浏览器中也可以使用!但最重要的是,它允许您的背景填充100%,并随着具有height:auto
的内容在垂直方向上增长而进一步向下拉伸。
body
中设置 height:auto
,则不需要使用 overflow:auto
属性。这会使页面的内容高度可以扩展到任何必要的维度,甚至超过视口的高度,如果内容变得比视口页面显示更长。它不会突破 body
的尺寸限制。并且允许根据需要滚动。默认情况下,overflow-y:scroll
允许您向每个 Web 浏览器的页面内容右侧添加一个空滚动条。仅当内容超出视口 100% 的高度时,滚动条才会出现在滚动条区域内。这样,浏览器可以预先计算您的页面宽度以及任何边距或填充,并防止页面在用户查看滚动和不滚动页面时移动。我经常使用此技巧,因为它可以完美地设置所有场景的页面宽度,并且您的 Web 页面永远不会移动和加载非常快!body
的 height:auto
。min-height:100%
可以为 body
提供所需的默认高度,然后允许页面尺寸填充视口,而无需内容突破 body
。这仅在 html
基于视口的 100% 高度的情况下才有效。%
或 vh
,而是确保根元素或 html
设置为视口高度的 100%。其次,重要的是 body
具有 min-height:100%
或 min-height:100vh
,因此它始终填充视口高度,无论它是什么。除此之外,没有任何额外的必要。height
和 min-height
添加了 “回退” 属性,因为许多早于 2010 年的浏览器不支持 “vh” 视口单位。虽然假装所有 Web 世界中的人都使用最新和最好的设备很有趣,但现实是许多传统浏览器仍然存在于大型企业网络中,并且许多仍在使用不理解这些新单位的过时浏览器。我们忘记的一件事情是,许多非常老的浏览器不知道如何正确填写视口高度。遗憾的是,这些传统浏览器必须在 html
元素和 body
上都使用 height:100%
,因为默认情况下它们都会折叠高度。如果您没有这样做,浏览器的背景颜色和其他奇怪的可视化效果将流动到未填充视口的内容下面。上面的示例应该可以解决所有这些问题,并仍然在更新的浏览器中运行。html
和body
选择器上设置height:100%
或只在body
上设置min-height:100%
来解决这个问题。因此,以上代码可以在20多年的旧版Web浏览器中工作,而不仅仅是过去几年创建的一些浏览器。在旧版Netscape 4系列或IE 4-5中,在body选择器上使用min-height:100%
而不是height:100%
仍然可能导致高度在那些非常老的浏览器中崩溃,并导致文本溢出背景颜色。但我认为这是唯一的问题。如果需要,您也可以使用JavaScript。
var winHeight = window.innerHeight ||
document.documentElement.clientHeight ||
document.body.clientHeight;
var pageHeight = $('body').height();
if (pageHeight < winHeight) {
$('.main-content,').css('min-height',winHeight)
}