CSS float浮动详解

本文详细解析了CSS中float属性的工作原理,包括元素的定位方式、对文档流的影响及清除浮动的方法。通过具体示例展示了float如何使元素脱离正常文档流,并环绕文本,同时讨论了可能引发的高度塌陷问题及解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

整理一些对于float的理解

一、float的定位方式

当一个元素浮动之后,它会被移出正常的文档流,然后向左或者向右平移,一直平移直到碰到了所处的容器的边框,或者碰到另外一个浮动的元素。

同样是脱离正常的文档流,float和absolute还是有区别的,float定位的元素允许文本和内联元素环绕它。
像下面这个例子:
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div class="all">
        <div class="floatBlock">浮动区域</div>
        <p>123456789123456789123456789123456789123456789123456789123456789123456789</p>
    </div>
</body>
<style>
    .all {
        width: 300px;
        height: 300px;
        background-color: aquamarine;
        word-wrap: break-word;
    }

    .floatBlock {
        width: 100px;
        height: 100px;
        background-color: antiquewhite;
        float: left;
    }
</style>
</html>

二、float的影响

包裹性

float会让元素的display变成inline-block。

比如一个div未设置width时,默认宽度是100%。在设置了float后,宽度会变为起子元素撑开的宽度。
又比如一个span元素,在设置了float后,width、height等属性会开始对其生效。

破坏性

因为float脱离了正常的文档流,所以可能会引发高度塌陷。

三、清除浮动的方法

  1. 使用伪元素:after
.cl:after{
  content: "020"; 
  display: block; 
  height: 0; 
  clear: both; 
  visibility: hidden;  
}
  1. 在浮动元素的后一个元素上添加clear:both;或者在后面加一个空元素,再加上clear:both;
  2. 在浮动元素的父元素上加上overflow属性,原理主要是BFC。
可能遇到的问题

方法一和方法二其实是同理的,大多数情况也都是使用方法一,但特点情况下使用clear:both会出现一问题。
直接举例:
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>test</title>
</head>
<body>
    <div class="div1">
        div1
    </div>
    <div class="div2">
        <div style="float:left">div2浮动文字</div>
        <div style="clear:both"></div>
    </div>
</body>
<style>
    *{
        padding: 0;
        margin:0;
    }
    .div1{
        float: left;
        width: 100px;
        height: 100px;
        background-color: #4CAF50;
    }
    .div2{
        margin-left:100px;
        background-color: aqua;
    }
</style>
</html>

可以看到div2中清除了浮动,预想的结果是div2的高度应该和其浮动的子元素文字一样高,但实际情况是div2的高度随着div1的高度在变化。

查阅clear的文档可以发现:

When applied to floating elements, the margin edge of the bottom element is moved below the margin edge of all relevant floats.

当clear应用于浮动元素时,它将元素的外边界移动到所有相关的浮动元素外边界的下方。

也就是说div2中那个添加了clear:both;的子元素会移至左右浮动元素的下方,也就浮动的div1下方,所以这个空元素撑开了div2的高度。
这种情况的解决方法也很简单,让div2形成一个新的BFC就行了,clear清除浮动对于其他形成BFC的块内部的浮动元素是无效的。

BFC相关之前整理过,可参考BFC(Block Formatting Context)块级格式化上下文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值