CSS设置height:100%后内容仍溢出的原因及解决方法咨询
这个问题其实挺典型的,我来给你拆解一下背后的原因和可行的解决办法~
当你给html、body和内部div都设置height:100%时,这里的100%是基于父元素的初始计算高度,也就是浏览器视口的初始高度(即viewport height)。
当视口高度缩小,内容总高度超过视口高度后,浏览器会自动出现垂直滚动条,但html和body的高度依然被固定在初始的视口高度上——因为height:100%是静态的尺寸赋值,不会随着内容的增加而自动扩展。这就导致内部的div虽然也设置了height:100%,但它的高度只会匹配body的固定高度,而实际内容长度远超这个高度,自然就会出现溢出父容器的现象。
这里给你几个针对性的方案,你可以根据实际场景选择:
方案一:用
min-height:100%替代height:100%
把html、body和div的height:100%改为min-height:100%。这样元素的最小高度会被限定为视口高度,当内容超过视口高度时,元素会自动拉伸以容纳内容,滚动条出现后也不会有溢出问题。代码示例:html, body { margin: 0; min-height: 100%; } .container { min-height: 100%; background: lightblue; }方案二:使用视口单位
vh
如果希望元素至少占满视口高度,同时能随内容自由扩展,可以直接给内部div设置min-height:100vh,html和body无需额外设置height(因为body默认会自适应内容高度)。这个方案更简洁,不过要注意vh是基于视口的,不会考虑滚动条宽度,但大部分场景下完全够用:html, body { margin: 0; } .container { min-height: 100vh; background: lightblue; }方案三:让
body自适应内容,同时保留html的height:100%
如果你需要保留html的height:100%设置,可以把body的height替换为min-height:100%,这样body就能随着内容变长,内部div再设置min-height:100%就能同步扩展:html { height: 100%; margin: 0; } body { min-height: 100%; margin: 0; } .container { min-height: 100%; background: lightblue; }
内容的提问来源于stack exchange,提问作者Crossfire

