龙空技术网

css设置元素height 100%为何不起作用

baby豆豆 128

前言:

此刻咱们对“cssdiv撑满屏幕”大约比较着重,我们都需要知道一些“cssdiv撑满屏幕”的相关文章。那么小编同时在网上收集了一些有关“cssdiv撑满屏幕””的相关文章,希望你们能喜欢,各位老铁们快快来学习一下吧!

设置一个元素的高度为100%时,计划元素能撑满整个浏览器窗口的高度,但大对数情况下,这样做法没有任何效果。

按常理,当我们用CSS的height属性定义一个元素的高度时,这个元素应该按照设定在浏览器的纵向空间里扩展相应的空间距离。例如,如果一个div元素的CSS是height: 100px;,那它应该在页面的竖向空间里占满100px的高度。

而跟W3C的规范,百分比的高度在设定时需要根据这个元素的父元素容器的高度。所以,如果你把一个div的高度设定为height: 50%;,而它的父元素的高度是100px,那么,这个div的高度应该是50px。

那么为什么height:100%不起作用?

当设计一个页面时,你在里面放置了一个div元素,你希望它占满整个窗口高度,最自然的做法,你会给这个div添加height: 100%;的css属性。然而,如果你要是设置宽度为width: 100%;,那这个元素的宽度会立刻扩展到窗口的整个横向宽度。高度也会这样吗? -

---Web浏览器在计算有效宽度时会考虑浏览器窗口的打开宽度。如果你不给宽度设定任何缺省值,那浏览器会自动将页面内容平铺填满整个横向宽度。

但是高度的计算方式完全不一样。事实上,浏览器根本就不计算内容的高度,除非内容超出了视窗范围(导致滚动条出现)。或者你给整个页面设置一个绝对高度。否则,浏览器就会简单的让内容往下堆砌,页面的高度根本就无需考虑。

因为页面并没有缺省的高度值,所以,当你让一个元素的高度设定为百分比高度时,无法根据获取父元素的高度,也就无法计算自己的高度。换句话说,父元素的高度只是一个缺省值:height: auto;。当你要求浏览器根据这样一个缺省值来计算百分比高度时,只能得到undefined的结果。也就是一个null值,浏览器不会对这个值有任何的反应。

如果想让一个元素的百分比高度height: 100%;起作用,你需要给这个元素的所有父元素的高度设定一个有效值。

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>Title</title>

<style>

html,body{

height:100%;

}

.container{

height:100%;

background-color: #669900;

}

.bar{

height:50%;

background-color: #eb7350;

}

</style>

</head>

<body>

<div class="container">

<div class="bar"></div>

</div>

</body>

</html>

现在你给了这个div的高度为100%,它有两个父元素<body>和<html>。为了让你的div的百分比高度能起作用,你必须设定<body>和<html>的高度。

上面的例子会出现滚动条,在设置body有默认的margin 和padding值

body{

margin:0;

padding:0;

}

也可以参考以下思路:

核心原理;

height:100%这个概念是子节点相对于父容器而言;所以要让此属性生效,必要的一点就是:父容器必须具有具体的高度信息

方法一

给从根的父容器到子容器的所有容器都设置好百分比高度信息

比如:

<!DOCTYPE html>

<html lang="zh-cn" style="height:100%;width:100%;overflow:hidden;">

<head>

<meta charset="utf-8" />

<meta http-equiv="X-UA-Compatible" content="IE=9;IE=8;chrome=1" />

<title>132</title>

</head>

<body style="height:100%;width:100%;padding:0;margin: 0;">

<div style="height:100%;width:100%;background-color:#787878" >

</div>

</body>

</html>

这样从根的Html开始,到字的div结束,全部都具有百分比高度,这样,就都能够获取到高度信息;

方法二

给父容器设置具体的高度信息;

比如直接写死在样式中,或者用javascript来设置;

示例,用js使<body>得到高度,从而使其中的div全屏:

<!DOCTYPE html>

<html lang="zh-cn">

<head>

<meta charset="utf-8" />

<meta http-equiv="X-UA-Compatible" content="IE=9;IE=8;chrome=1" />

<title>132</title>

</head>

<body id="body" style="padding:0;margin: 0;">

<div style="height:100%;width:100%;background-color:#787878" >

</div>

</body>

<script type="text/javascript">

var screenHeight=document.documentElement.clientHeight;

var screenWidth=document.documentElement.clientWidth;

var body=document.getElementById('body');

body.style.width=screenWidth+"px";

body.style.height=screenHeight+"px";

</script>

</html>

方法三

给父容器设置位置信息,让其得到高度信息;

示例,用css使body得到高度,从而使其中的div全屏:

<!DOCTYPE html>

<html lang="zh-cn">

<head>

<meta charset="utf-8" />

<meta http-equiv="X-UA-Compatible" content="IE=9;IE=8;chrome=1" />

<title>132</title>

</head>

<body style="position:absolute;top:0px;left:0px;right:0px;bottom:0px;padding:0;margin: 0;">

<div style="height:100%;width:100%;background-color:#787878" >

</div>

</body>

</html>

标签: #cssdiv撑满屏幕