css清除浮动常用的四种方法实现

在页面布局中经常会用到浮动和清除浮动的操作,但之前是知其然而不知其所以然,看过多篇文章后,有了一些深入的了解,特整理下来!

浮动的目的:

最初设计浮动的目的是为了实现文字等内容可围绕图像显示,后来发现浮动方便布局,所以支持浮动任何元素,元素设置浮动后,会脱离原先文档的普通流中,让原先各自占据一行的块元素在一行显示,代码展示如下:

<style>
    .content{
        border: 2px solid #afed11;
        margin: 100px 600px;
    }
    .a{
        width: 100px;
        height: 200px;
        background-color: red;
    }
    .b{
        width: 100px;
        height: 100px;
        background-color:blue;
    }
</style>
<div class="content">
    <div class="a"></div>
    <div class="b"></div>
</div>

不设置浮动显示如下
图片描述

如果只设置a块floagt:left:结果如下:
图片描述

a块脱离了原先的文档普通流,不再占据原先的位置,所以b移移动到原先a的位置,因为a是浮动的,所以会遮挡住b,因为父元素没有设置高度,所以父元素的高度由子元素决定,现在为b的高度,a浮动后,超出了父元素的高度。

现在把b块也设置floagt:left,就实现了2个块状元素在一行显示:
图片描述

现在看到虽然实现了2个块状元素在一行显示,但是父元素的高度现在为0,会影响到兄弟元素的排版,所以我们现在要解决这个问题,就用到了清除浮动的操作

清除浮动的方法

清除浮动后正常的显示如下图:
图片描述

1、在父元素高度固定的情况下,可以直接设置父元素的高度height: 200px即可正常显示

2、增加块元素,用clear:both清除

<style>
    .clear{
        clear: both;
    }
</style>
<div class="content">
    <div class="a"></div>
    <div class="b"></div>
    <div class="clear"></div>
</div>

clear:both是清除此元素左右2边的浮动,所以此元素会独占一行,在a、b的下一行,但clear仍然在文档流中,必须包含在父元素内,所以父元素为了包含clear,只能增加高度,最终的效果就达到了高度被撑起来。
用这种方法清除浮动,会为文档中增加不必要的结构,不推荐。

3、 给父元素设置overflow清除浮动

<style>
    .content{
        border: 2px solid #afed11;
        margin: 100px 600px;
        overflow: auto;
    }
</style>

overflow值可以是除visible之外的任何值,都能达到撑起高度的效果,但是scroll是导致滚动条始终存在,hidden会隐藏超出边框的部分,所以在选择的时候要格外注意
为什么overflow会实现这种效果呢?是因为它是一个块级格式化上下文 (Block Fromatting Context),W3C对BFC的定义如下:
浮动元素和绝对定位元素,非块级盒子的块级容器(例如 inline-blocks, table-cells, 和 table-captions),以及overflow值不为“visiable”的块级盒子,都会为他们的内容创建新的BFC(块级格式上下文)。
BCF可以包含浮动元素,所以能实现撑起高度的效果。

4、使用after伪类

<style> 
    .clear{zoom:1} 
    .clear:after{
        content:'';
        height: 0;
        display: block;
        clear:both;
    }
</style>
<div class="content clear">
   <div class="a"></div>
   <div class="b"></div>
</div>

跟第2个方法原理类似,只是区别在于:clear在html中插入一个div.clear标签,而content 利用其伪类clear:after在元素内部增加一个类似于div.clear的效果。
以上是常用的几种方法,可以根据场景的不同选择适合的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值