CSS中高度塌陷问题是什么原因,怎么样解决?
Admin 2022-02-22 群英技术资讯 1665 次浏览
这篇文章给大家分享的是CSS中高度塌陷问题的原因及解决方法。小编觉得挺实用的,因此分享给大家做个参考,文中的示例代码介绍得很详细,有需要的朋友可以参考,接下来就跟随小编一起了解看看吧。
1. 高度塌陷
在文档流中,父元素的高度默认被子元素撑开,也就是说子元素多高,父元素就多高。但是, 当为子元素设置浮动后,子元素会完全脱离文档流。此时,将会导致子元素无法撑起父元素的高度,导致父元素的高度塌陷。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style type="text/css">
.box1{
border: 10px solid red;
}
</style>
</head>
<body>
<div class="box1">
<div class="box2">a</div>
</div>
</body>
</html>
结果:父元素box1的高度被子元素box2的a内容撑开。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style type="text/css">
.box1{
border: 10px solid red;
}
.box2{
width: 100px;
height: 100px;
background-color: greenyellow;
}
</style>
</head>
<body>
<div class="box1">
<div class="box2">a</div>
</div>
</body>
</html>
结果:父元素的高度被子元素的高度100撑开。

若为子元素设置浮动:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style type="text/css">
.box1{
border: 10px solid red;
}
.box2{
width: 100px;
height: 100px;
background-color: greenyellow;
float: left;
}
.footer{
height: 50px;
background-color: pink;
}
</style>
</head>
<body>
<div class="box1">
<div class="box2"></div>
</div>
<div class="footer"></div>
</body>
</html>
结果:子元素浮动,父元素没有了高度。footer向上移动。

为父元素设置高度,避免塌陷:
.box1{
border: 10px solid red;
height: 100px;/* 设置父元素的高度*/
}
结果:

但是当子元素的高度较高时,又会产生溢出的问题。父元素的高度一旦固定,父元素的高度将不能自动适应子元素的高度,所以这种方案不推荐使用:
.box2{
width: 100px;
height: 200px;
background-color: greenyellow;
float: left;
}
结果:

2. 解决塌陷问题
根据w3c的标准,在页面中的元素都有一个隐含的属性叫做Block Formatting Context, 简称BFC。该属性可以设置打开或者关闭,默认是关闭的。
当开启元素的BFC以后,元素将会具有如下的特征:
(1) 父元素的垂直外边距不会和子元素重叠
(2) 开启BFC的元素不会被浮动元素所覆盖
(3) 开启BFC的元素可以包含浮动的子元素
如何开启元素的BFC:
设置元素浮动
使用这种方式,虽然可以撑开父元素,但是会导致父元素的宽度丢失,而且使用这种方式也会导致下边的元素上移,不能解决问题
设置元素绝对定位。也有上面的问题
设置元素为inline-block,可以解决问题,但是会导致宽度丢失,不推荐使用这种方式
将元素的overflow 设置为一个非visible的值
推荐方式: 将父元素overflow设置为hidden,是副作用最小的开启BFC的方式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style type="text/css">
.box1{
border: 10px solid red;
overflow: hidden;
}
.box2{
width: 100px;
height: 100px;
background-color: greenyellow;
float: left;
}
.footer{
height: 50px;
background-color: pink;
}
</style>
</head>
<body>
<div class="box1">
<div class="box2"></div>
</div>
<div class="footer"></div>
</body>
</html>
结果:

注意: 但是在IE6中是不支持BFC的。所以引入hasLayout。
在IE6中有另一个隐含的属性叫做hasLayout,该属性的作用和BFC类似,所以IE6浏览器可以通过开hasLayout来解决问题。开启方式有很多,但是副作用最小的方式是: 直接将元素的zoom设置为1即可。
zoom表示放大的意思,后边跟一个数值,写几就是将元素放大几倍。
zoom:1 表示不放大元素,但是通过该样式可以开启hasLayout。
zoom这个样式,只在IE中支持,其他浏览器都不支持。
zoom: 1;/* 兼容ie6*/ overflow: hidden;/* 兼容非ie6*/
关于CSS中高度塌陷问题及解决方法就介绍到这,上述方法和示例具有一定的借鉴价值,感兴趣的朋友可以参考,希望能对大家有帮助,想要了解更多,大家可以关注群英网络其它的相关文章。
文本转载自脚本之家
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
HTML表格标记入门知识之单元格间距属性你知道是怎样的吗?带着这个问题,接下来的时间不妨看看小编所整理的资料,一定会让你收获满满。
时钟效果的实现有很多种方法,我们之前也介绍了很多种,这篇文章给大家分享用CSS3实现走动的时钟效果,那么这样的动画时钟效果效果具体怎样做呢?接下来我们详细的了解看看。
在css3中可以实现缩放效果的属性在css3中,可以利用transform属性配合scale()函数实现元素缩放效果。transform 属性向元素应用 2D 或 3D 转换。该属性允许我们对元素进行旋转
这篇文章我们来了解CSS中的两个属性,vw与vh属性,有一些新手对vw与vh属性是什么意思,以及它们的区别不是很清楚,因此本文就给大家来介绍一下,下文有详细的介绍,有需要的朋友可以参考,接下来就跟随小编来一起学习一下吧!
我们在HTML中设置frameset的高度时会出现界面变形的情况,那么设置frameset的高度界面变形怎么办呢?接下来我们就一起去看看设置frameset的高度界面变形的解决方法。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008