美文网首页
03_说一说产生塌陷的原因以及清除浮动的几种方法

03_说一说产生塌陷的原因以及清除浮动的几种方法

作者: 沐向 | 来源:发表于2020-04-16 14:28 被阅读0次

一、什么是高度塌陷

在文档流中,若父元素未设置高度,那么父元素的高度默认是被子元素撑开的,即子元素多高,父元素就有多高。但是当子元素设置浮动之后,子元素就会完全脱离文档流,父元素还在文档流中,此时父元素的高度就没有子元素撑起(子元素无法撑起父元素的高度),从而导致父元素的高度塌陷。简单来说,就是包含含有浮动的元素的上一级元素的高度变为0了,下面的元素会上去,这样会导致页面布局混乱。

<div class="parent">
    <div class="child"></div>
    <div class="child"></div>
</div>

.parent {
    width: 300px;
    border: 5px solid #f00;
}
.child {
    float: left;
    width:100px;
    height: 100px;
    border: 5px solid #00f;
}

二、解决方法

1、父元素结束之前添加一个标签 <div style="clear:both;"></div>

<div class="parent">
    <div class="child"></div>
    <div class="child"></div>
    <div style="clear:both;"></div>
</div>
<div class="bottom"></div>

.parent {
    border: 5px solid #f00;
}
.child {
    float: left;
    width: 100px;
    height: 200px;
    border: 5px solid #00f;
}
.bottom {
    width: 200px;
    height: 100px;
    background: #0f0;
}

缺点:增加了无意义的标签

2、让父元素本身也浮动 float:left;

<div class="parent">
    <div class="child"></div>
    <div class="child"></div>
</div>
<div class="bottom"></div>

.parent {
    float: left;
    border: 5px solid #f00;
}
.child {
    float: left;
    width: 100px;
    height: 100px;
    border: 5px solid #00f;
}
.bottom {
    width: 200px;
    height: 100px;
    background: #0f0;
}

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

3、给父元素一个固定高度,此方法适用于子元素高度已知并且固定的情况

<div class="parent">
    <div class="child"></div>
    <div class="child"></div>
</div>
<div class="bottom"></div>

.parent {
    height: 100px;
    border: 5px solid #f00;
}
.child {
    float: left;
    width: 100px;
    height: 100px;
    border: 5px solid #00f;
}
.bottom {
    width: 200px;
    height: 100px;
    background: #0f0;
}

缺点:父元素与子元素的边框会重叠,无法自适应子元素的高度

4、给父元素设置display: inline-block;

<div class="parent">
    <div class="child"></div>
    <div class="child"></div>
</div>
<div class="bottom"></div>

.parent {
    display: inline-block;
    border: 5px solid #f00;
}
.child {
    float: left;
    width: 100px;
    height: 100px;
    border: 5px solid #00f;
}
.bottom {
    width: 200px;
    height: 100px;
    background: #0f0;
}

缺点:会导致父元素的宽度丢失,与相邻元素会产生额外的间距

5、给父元素设置 overflow : hidden;

<div class="parent">
    <div class="child"></div>
    <div class="child"></div>
</div>
<div class="bottom"></div>

.parent {
    overflow: hidden;
    border: 5px solid #f00;
}
.child {
    float: left;
    width: 100px;
    height: 100px;
    border: 5px solid #00f;
}
.bottom {
    width: 200px;
    height: 100px;
    background: #0f0;
}

缺点:要是子元素要margin负值定位或是负的position定位,溢出部分会被裁掉,如二级菜单的影响

6、通过after伪类,after + zoom方法(推荐)

<div class="parent clearAll">
    <div class="child"></div>
    <div class="child"></div>
</div>
<div class="bottom"></div>

.parent {
    border: 5px solid #f00;
}
.child {
    float: left;
    width: 100px;
    height: 100px;
    border: 5px solid #00f;
}
.bottom {
    width: 200px;
    height: 100px;
    background: #0f0;
}
.clearAll:after {
    content: ''; 
    display: block; 
    height: 0; 
    clear: both; 
    visibility: hidden; 
}
.clearAll {
    zoom : 1; 
}

利用伪类来清除浮动,其效果跟创建一个空的div并设置其为 clear:both 是一样的,只不过这里用伪类代替了空的div元素,不会影响任何其他样式,通用性强,覆盖面广。

相关文章

  • 03_说一说产生塌陷的原因以及清除浮动的几种方法

    一、什么是高度塌陷 在文档流中,若父元素未设置高度,那么父元素的高度默认是被子元素撑开的,即子元素多高,父元素就有...

  • 清除浮动常用的几种解决方法

    关于清除浮动的几种解决方法 一、浮动产生原因 浮动的产生是因为使用了float:left或float:rig...

  • 前端面试(四)

    一、浮动产生原因及清除浮动方法 产生浮动原因:给元素添加 float 属性 浮动元素会脱离文档流,不占据空间。浮动...

  • 清除浮动,定位

    定位 clear 清除左浮动 清除右浮动 both 可以清除对它影响最大的浮动可以解决高度塌陷 谁塌陷就加上cle...

  • CSS清除浮动大全共8种方法

    在各种浏览器兼容问题上,这样让清除浮动更难了,下面总结8种清除浮动的方法: 浮动导致的问题:父级标签高度塌陷---...

  • 清除浮动

    清除浮动的方法(只要触发BFC,就可以清除浮动,预防父元素的高度塌陷) 1.给父元素添加浮动或者定位属性 2.给父...

  • clear 清除浮动

    清除浮动 --> 清除高度塌陷有三种方法//这里讲的父级元素 都是浮动层的父级 哪里有浮动,在其父级元素的内容中...

  • CSS 中的浮动

    浮动的定义: 元素脱离文档流 举栗子: 修改 CSS 代码,清除浮动: 浮动的影响: 父元素高度塌陷 清除浮动: ...

  • 清除浮动的几种方法

    清除浮动的目的: 解决高度塌陷。 方法 clear: both 1.0 clear: both 2.0 注意只能使...

  • 面试题集合-CSS篇

    1.Flex: 概念, 属性, 常用布局 2.解决浮动中高度塌陷: 原因, 解决方案, 方案之间对比 3.清除浮动...

网友评论

      本文标题:03_说一说产生塌陷的原因以及清除浮动的几种方法

      本文链接:https://www.haomeiwen.com/subject/gpmrvhtx.html