height:100%; 为什么不起作用

2019-05-22 admin

当你设置一个页面元素的高度(height)为100%时,期望这样元素能撑满整个浏览器窗口的高度,但大多数情况下,这样的做法没有任何效果。你知道为什么height: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% 也不会起作用。你可以根据父元素的背景色来判断子元素的高度不是100%。

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

<html>
  <body>
    <div style="height: 100%;">
      <p>
        想让这个div高度为 100% 。
      </p>
    </div>
  </body>
</html>

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

<html style="height: 100%;">
  <body style="height: 100%;">
    <div style="height: 100%;">
      <p>
        这样这个div的高度就会100%了
      </p>
    </div>
  </body>
</html>

从这个演示中你可以看出,height: 100%;起作用了。

在使用height: 100%;时需要注意的一些事项 1、Margins 和 padding 会让你的页面出现滚动条,也许这是你不希望的。

2、如果你的元素实际高度大于你设定的百分比高度,那元素的高度会自动扩展。

[转载]原文链接:https://segmentfault.com/a/1190000019261657

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处。

转载请注明:文章转载自 JavaScript中文网 [https://www.javascriptcn.com]

本文地址:https://www.javascriptcn.com/read-65487.html

文章标题: height:100%; 为什么不起作用

相关文章
Zepto height
height() ⇒ number height(value) ⇒ self height(function(index, oldHeight){ … }) ⇒ self 获取对象集合中第一个元素的高度;或者设置对象集合中所有元...
2017-04-25
圣杯布局中对left盒子设置负内边距-100%的一点解释
圣杯布局算是一个“古老”的话题了,关于其来源网上资料众多,在此不多做表述。 但在前几天偶然看到一篇讲解圣杯布局的博客中,有同学对左侧定宽盒子设置 margin-left: -100% 存在疑惑,大致是不清楚为什么这样设置就会使left盒子“...
2018-04-23
vue中设置height:100%无效的问题
在vue.js中写新的components的时候,如果在新页面中的模板中设置height:100%的时候一直无效。 App.vue文件 &lt;template&gt; &lt;div id=&quot;app&quot;&gt;...
2018-07-27
[英] 为什么整个前端开发行业如此不稳定?
We all know the meme: by the time you’ve learned one front-end technology, another three have just been released. Also, ...
2018-05-30
前端工程师为什么要学习编译原理?
本文首发于 CSDN.NET《程序员》杂志 2017 年 12 月刊 前言 普遍的观点认为,前端就是打好 HTML、CSS、JS 三大基础,深刻理解语义化标签,了解 N 种不同的布局方式,掌握语言的语法、特性、内置 API。再学习一些主...
2018-04-09
深入理解-CSS内联元素之line-height
上一篇文章我们讨论了font-size,这一篇来说另一个与文字关系密切的属性line-height。这里涉及到了内联盒模型相关的东西,这里保持了与上一篇类似的结构,先来说说概念,然后是度量单位,最后来聊一个常见的内联元素的现象。 内联盒模...
2018-04-21
img标签设置display:block,宽度无法100%
一些个人总结,第一次发文章,有什么不足的地方,还请各位多提意见 现象 如下代码,img标签设置了display:block,尺寸宽度无法设定为100% &lt;!DOCTYPE html&gt; &lt;html lang=&quo...
2018-08-15
什么是CSS Modules ?我们为什么需要他们
原文地址:https://css-tricks.com/css-mo… 最近我对CSS Modules比较好奇。如果你曾经听说过他们,那么这篇博客正适合你。我们将去探索它的目的和主旨。如果你同样很好奇,敬请关注,在下一篇博文中我们将介绍如何...
2018-05-02
line-height在安卓上不居中的解决方案
问题形成原因 导致这个问题的原因可能是Android在排版计算的时候参考了primyfont字体的相关属性(即HHead Ascent、HHead Descent等),而primyfont的查找是看font-family里哪个字体在font...
2018-07-23
微信小程序为什么又对授权登录开刀,为什么不让你轻易获取UnionID,真是为了用户体验?
规范原稿 2019-07-19 原文: 小程序内用户帐号登录规范调整和优化建议 解读: 小程序方: 最近发现好多小程序需要登录才能使用哦!这样不好,影响用户体验啊!以后一进来就需要登录的小程序序需要整改哦!么么哒!一切为了用户体验哦! 调侃...
2019-07-24
回到顶部