对于没有系统学习过css
的程序员来说,在编写css
样式的时候,div
的height
属性值确实是个玄学的东西,我也感觉css
确实挺玄学的,本文将介绍我对div
标签height
属性的个人理解,如有问题请指正。
在html
中,div
标签属于行级标签,最明显的特点是占一行,也就是width
的值默认是100%
,而height
的值默认是inherit
,并不是100%
当父div
高度指定时
- 若子
div
高度不指定,则父div
高度是根据子div
中内容所需要的高度动态改变的。比如以下代码,在谷歌浏览器中渲染之后,父div
高度指定为600px
,子div
高度动态赋值为21px
<div style="height: 600px;background-color: antiquewhite;">
<div style="background-color: gray;">
123
</div>
</div>
-
若子
div
高度指定,且高度小于等于父div
高度,则正常渲染,内容超出高度时会出现滚动条 -
若子
div
高度指定,且高度大于父div
高度,子div
高度超过父div
的部分内容会溢出渲染,父div
的高度也不会被撑开变大。如果想让子标签超出父div
高度的内容隐藏,可以给父div
添加overflow-y: hidden;
样式
<div style="height: 50px;background-color: antiquewhite;">
<div style="height: 100px;width: 50%;background-color: gray;"></div>
</div>
- 若想给父
div
增加内间距之后,剩余高度由子div
继承,可以给子div
的height
值设置成100%
,注意:父实际渲染的 height = padding-top + padding-bottom + border-top + border-bottom + 父指定height,并且从dom
中获取父div
的height
,结果是父指定height
,而不是实际渲染的height
<div id="demo" style="height: 200px;background-color: antiquewhite;
padding: 10px 0 10px 0 ;">
<div style="height: 100%;background: #7bed9f;">
123
</div>
</div>
- 若子
div
存在两个,其中一个div
高度指定,剩余的高度全部交给另一个div
,可以使用calc()
函数计算剩余子div
的高度。注意:另一个div
的height
不能设置成100%
,100%
的height
继承父div
的height(200px)
,此时这两个div
的总height
就会超过父height
,然后内容溢出
<div id="demo" style="height: 200px;background-color: antiquewhite;padding: 10px 0 10px 0 ;">
<div style="height: 30px;background: #7bed9f;">
123
</div>
<div style="height: calc(100% - 30px);background: #dfe4ea;">
456
</div>
</div>
若父
div
高度想设置成屏幕高度,可以使用vh
单位,vh
相对于视口的高度,视口被均分为100单位,设置成height:100vh
后,div
的高度就是屏幕高度,又因为div
的宽度默认时100%
,所以此时该div
盒子铺满整个屏幕。
当父div
高度不指定时
- 若子
div
高度也不指定,则父div
的高度取决于子标签的高度
<div id="demo" style="background-color: antiquewhite;padding: 10px 0 10px 0 ;">
<div style="background: #7bed9f;">
123
</div>
<div style="background: #7bed9f;">
123
</div>
</div>
- 若子
div
高度指定(非指定百分比),则父div
的高度取决于子标签的高度
<div id="demo" style="background-color: antiquewhite;padding: 10px 0 10px 0 ;">
<div style="height: 40px;background: #7bed9f;">
123
</div>
<div style="height: 40px;background: #7bed9f;">
123
</div>
</div>
- 若子
div
的高度指定为百分比,则height
设置无效,因为父div
的height
没有具体值。
<div id="demo" style="background-color: antiquewhite;padding: 10px 0 10px 0 ;">
<div style="height: 30%;background: #7bed9f;">
123
</div>
<div style="height: 30%;background: #7bed9f;">
123
</div>
</div>
在多级
div
中,比如一级div
设置了具体的height
,二级div
未设置height
,三级div
的height
的值设置成百分比,该百分比的height
也是失效的,符合以上的情况。因为二级div
未设置height
的具体值,则二级div
的高度取决于子标签中的内容所需要的高度,然后三级div
在指定百分百高度之后,因为(父)二级div
的height
没有指定,则百分百height
失效。<div id="demo" style="height: 200px;background-color: antiquewhite;padding: 10px 0 10px 0 ;"> <div style="background: #7bed9f;"> <div style="height: 50%;background-color: #dfe4ea;"> 123 </div> </div> </div>