html中解决父元素高度问题,css中父元素高度塌陷是什么意思,如何解决?

首先得回答什么是父元素高度塌陷:

在文档流中,父元素的高度默认是被子元素撑开的,也就是子元素多高,父元素就多高。但是当子元素设置浮动之后,子元素会完全脱离文档流,此时将会导致子元素无法撑起父元素的高度,导致父元素的高度塌陷。

一下是举例说明:

.box1{

border:10pxredsolid;

}

.box2{

background-color:yellow;

width:100px;

height:100px;

float:left;

}

清除浮动详解

清除浮动主要是为了解决由于浮动元素脱离文流导致的元素重叠或者父元素高度坍塌的问题,而这两个问题分别对应了需要清除浮动的两种种情况:清除前面兄弟元素浮动和闭合子元素浮动(解决父元素高度坍塌)。

清除前面兄弟元素浮动

清除前面兄弟元素浮动很简单,只需要在不想受到浮动元素影响的元素上使用clear:both即可,HTML&CSS代码如下:

我是左浮动元素

我是右浮动元素

我不受浮动元素的影响

.fl{

float:left;

}

.fr{

float:right;

}

.cb{

clear:both;

}

在CSS2以前,clear的原理为自动增加元素的上外边距(margin-top)值,使之最后落在浮动元素的下面。在CSS2.1中引入了一个清除区域(clearance)——在元素上外边距之上增加的额外间距,使之最后落在浮动元素的下面。所以如果需要设置浮动元素与clear元素的间距,得设置浮动的元素的margin-bottom,而不是clear元素的margin-top。

demo可见:clear清除浮动

闭合子元素浮动

我们知道,在计算页面排版的时候,如果没有设置父元素的高度,那么该父元素的高度是由他的子元素高度撑开的。但是如果子元素是设置了浮动,脱离了文档流,那么父元素计算高度的时候就会忽略该子元素,甚至当所有子元素都是浮动的时候,就会出现父元素高度为0的情况,这就是所谓的父元素高度坍塌问题。为了能让父元素正确包裹子元素的高度,不发生坍塌,我们需要闭合子元素的浮动。

一般我们有两种办法可以用来闭合子元素浮动:

给最后一个元素设置clear:both

给父元素新建一个BFC(块格式化上下文)

clear:both

由于我们最后一个元素使用clear:both,所以该元素就能不受浮动元素影响出现在父元素的最底部,而父元素计算高度的时候需要考虑到这个正常元素的位置,所以高度自然包裹到了最底部,也就没有了坍塌。

对于这个方法,以前我们是利用新增一个空元素(或或

等)来实现的,如下:

.box{

float:left;

}

.clear-box{

clear:both;

}

虽然这种办法比较直观,但是不是很优雅,因为增加了一个无用的空白标签,比较冗余而且不方便后期维护(一般不太建议使用该办法)。所以后期有了通过父元素的伪元素(::after)实现的著名clearfix方法,代码如下:

.clearfix::after{

content:"";

display:table;

clear:both;

}

上面方法给父元素增加一个专门用于处理闭合子元素浮动的clearfix类名,该类使用::after伪元素类选择器增加一个内容为空的结构来清除浮动,可能你们比较疑惑的是为什么要设置display:table属性,这其实涉及到一个比较复杂的进化过程,具体可以参考资料——clearfix浮动进化史

新建BFC

该方法的原理是:父元素在新建一个BFC时,其高度计算时会把浮动子元素的包进来。

9k=

uy8AAAAYdEVYdFRodW1iOjpJbWFnZTo6SGVpZ2h0ADIzOFghzpgAAAAXdEVYdFRodW1iOjpJbWFnZTo6V2lkdGgANDE2GtOt8gAAABl0RVh0VGh1bWI6Ok1pbWV0eXBlAGltYWdlL3BuZz+yVk4AAAAPdEVYdFRodW1iOjpTaXplADBCQpSiPuwAAAASdEVYdFRodW1iOjpVUkkAZmlsZTovL8F3i88AAAAASUVORK5CYII=

本文转载自中文网

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值