高度塌陷到底是什么如何解决?

Author: 陌小雨Date: 2020-09-06View: 109

在文档流中,父元素高度默认是被子元素撑开的,也就是子元素多高,父元素就多高

但是当为子元素设置浮动后,子元素会完全脱离文档流,此时将导致子元素无法撑起父元素的高度,导致父元素的高度塌陷

解决办法:

1、我们可以将父元素的高度写死,但是会产生一个问题,就是父元素的高度无法自适应子元素的高度,所以不推荐这样处理

根据W3C标准,在页面中元素都有一个隐含的属性,叫做Block Formatting Context ,简称BFC,该属性可以设置打开或者关闭,默认是关闭的

当开启元素的BFC以后,元素将会具有如下的特性

1、父元素的垂直外边距不会和子元素重叠

2、开启BFC的元素不会被浮动元素所覆盖

3、开启BFC的元素可以包含浮动的子元素

开启办法:

1、设置元素浮动

-使用这种方式虽然可以撑开子元素,但是会导致父元素的高度丢失,也会导致下面的元素上移,不能解决问题

2、设置元素绝对定位

3、设置元素为inline-block

-可以解决问题,但是会导致宽度丢失,不推荐使用

4、将元素的overflow设置为非visible的值

-推荐方式 讲overflow设置为hidden,是副作用最小的开启BFC的方式(IE6 不支持BFC,所以使用这种方式不支持IE6,但是IE6也有一个类似BFC的属性 叫haslayout,开启方式为设置zoom:1)

--但是这种处理方式如果子元素中有相对定位的,如果在父元素外面会被隐藏

我们有时候希望清除其他元素浮动对当前元素的影响,这时候可以用clear来完成功能

left 清除左侧浮动元素对当前元素的影响,属性添加到当前元素上

both 清除对他影响最大的那个元素的浮动

清除后当前元素会回到其他元素浮动之前的位置

所以解决高度塌陷

1、将父元素的overflow设置为非visible的值

2、增加一个空白的div子元素 清除浮动 clear, 这种问题虽然可以解决问题,但是会添加多余的结构

可以使用父元素的伪类 .parent:after{content:"hello";display:block;clear:both}

hello本身是内联元素没有width和height,所以需要display:block;转换为块元素