清除浮动的方式和其基本原理

为什么要清浮动

浮动会使当前元素脱离当前文档流,造成父元素高度塌陷,父元素不会被撑开,计算父元素高度时不会加上子元素高度

举个栗子:

<body>
    <div class="box1 clearfix">
        <div class="float">float left</div>
        <div class="text">文本内容</div>
    </div>
    <div class="box2">另一个div</div>
</body>

css样式为

/* 清除浮动 */
.box1 {
    width: 500px;
    border: 2px solid blue;
}
/* 浮动元素 */
.float {
    width: 100px;
    height: 100px;
    border: 2px solid red;
    color: red;
    margin: 4px;
    /*设置元素左浮动*/
    float: left;
}
.box2 {
    width: 500px;
    height: 100px;
    margin: 5px 0;
    border: 2px dotted black;
}
/* 文本内容 */
.text {
    color: green;
    margin: 10px;
    border: 2px solid green;
}

效果如下:
在这里插入图片描述
这个显然不是我们要的效果,父元素高度未撑开,同时绿色框中的内容应该排列在浮动元素下方。
解决这些问题就需要清除浮动,下面就来介绍清楚浮动的方法

清除浮动的方法

1.利用clear属性

clear 属性的值可以是 left、right、both 或 none,它表示框的哪些边不应该挨着浮动框。
如果声明为左边或右边清除,会使元素的上外边框边界刚好在该边上浮动元素的下外边距边界之下。
给要清除浮动的元素加上如下样式:

.text {
    color: green;
    margin: 10px;
    border: 2px solid green;
    clear: both;
}

在这里插入图片描述

2.父元素结束标签之前插入清除浮动的块级元素

<body>
    <div class="box1 clearfix">     
        <div class="text">文本元素</div>
        <div class="float">float left</div>
    </div>
    <div class="box2">另一个div</div>
</body>

如果将浮动元素放在文本元素的下方,上述的方法就不再适用了,因为文本元素的位置已经确定了,无法清除周围的浮动
就需要在父元素结束标签之前插入清除浮动的块级元素,这样也可以达到清除浮动的效果
注意:必须是块级元素

<body>
    <div class="box1 clearfix">     
        <div class="text">文本元素</div>
        <div class="float">float left</div>
         <div class="another"></div>
    </div>
    <div class="box2">另一个div</div>
</body>

css样式

.another {
    clear: both;
}

3.利用伪元素

在父元素上添加一个clearfix
html结构

<body>
    <div class="box1 clearfix">
        <div class="float">float left</div>
        <div class="text">文本元素</div>
    </div>
    <div class="box2">另一个div</div>
</body>

css样式

.clearfix:after {
    content: '';
    height: 0;
    display: block;
    clear: both;
}

因为伪元素其实就是添加一个虚拟的元素,所以其实本质上和第二种方法是一样的

4.利用overflow清除浮动

给父元素添加 overflow:auto
html结构

<body>
    <div class="box1 clearfix">
        <div class="float">float left</div>
        <div class="text">文本元素</div>
    </div>
    <div class="box2">另一个div</div>
</body>

css样式

.box1 {
    width: 500px;
    border: 2px solid blue;
    overflow: auto;
}

使用overflow清除浮动的原理是创建了一个BFC,BFC的高度是要包含浮动元素的,所以高度被撑起来了,达到了清除浮动的目的,
创建BFC的方法不止一种,所以创建BFC的方法都可以清除浮动

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值