天天看点

css高度塌陷及解决方法css高度塌陷及解决方法

css高度塌陷及解决方法

为什么会出现高度塌陷?

1.父元素高度自适应,子元素 float 后,只要子元素脱离了文档流后,造成父元素高度为0,称为高度塌陷问题。

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

解决方法

1.最简单的解决方式就是给父容器设置一个固定的高度

劣处:给父元素设置固定高度后,就不能进行高度自适应

2.给父元素也设置浮动

劣处:

(1)虽然可以撑开父元素,但是会导致父元素的宽度丢失,而且会导致下边的元素上移,使得跟父元素相邻的元素的布局受到影响。

(2)如果也设置浮动,父元素宽度就会随着子元素变化

3.给父元素添加属性 overflow: hidden;zoom:1;

优点:兼容性强。

劣处:

(1)对margin属性有影响,不能设负值,设负值无效。负值绝对定位也不可以。要是子元素要margin负值定位或是负的绝对定位,会被裁掉,所以此方法是有局限性的。

(2)当子元素有定位属性时,设置 overflow: hidden; 容器以外的部分会被裁剪掉。

4.在浮动元素后添加一个div

优点:

(1) 代码量少 容易掌握 简单易懂

(2)所有浏览器都支持,并且容器溢出不会被裁剪;

劣处:

(1)在页面中添加无意义的div,容易造成代码冗余。

(2)添加了无意义标签,不易于后期维护,违背了结构和表现分离的标准

(3)不利于优化

div{
    clear: both;
    height: 0;
    overflow: hidden;
}
           

5.万能清除浮动法

在父元素中内容的最后添加一个伪元素来实现第三种方案的功能

优点: 不会造成代码冗余,不破坏文档结构,剩余代码性能优化,推荐使用。

劣处: 代码量多

父元素:after{
    content: "";
    height: 0;
    clear: both;
    overflow: hidden;
    display: block;
    visibility: hidden;
}