CSS float浮动详解

整理一些对于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)块级格式化上下文

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CSS中的浮动属性(float)用于控制元素在其父元素中的位置和布局。通过设置浮动属性,我们可以将元素从正常的文档流中脱离出来,使其沿着父元素的左侧或右侧浮动浮动属性有三个可能的取值:left、right和none。默认值为none。 - 当设置为left时,元素会向左浮动,其周围的内容会围绕在右侧。 - 当设置为right时,元素会向右浮动,其周围的内容会围绕在左侧。 - 当设置为none时,元素不进行浮动,恢复正常的文档流。 浮动元素会具有块级元素的特性,即会占据一定的空间,并且会从左到右或从右到左排列。浮动元素不会占据父元素中的空间,所以其他元素会填充浮动元素的位置。 除了浮动属性外,我们通常还需要配合一些其他属性来控制浮动元素的行为: - clear属性用于清除浮动对后续元素的影响。可以设置为left、right、both或none来指定在浮动元素的左侧、右侧或两侧不允许出现浮动元素。 - overflow属性可以用于包含浮动元素,通过设置其值为auto或hidden,可以触发父元素的块级格式化上下文,使其包含浮动元素。 需要注意的是,使用浮动属性可能会导致一些布局上的问题,如高度塌陷(clearfix问题)和重叠等。为了避免这些问题,可以使用一些技巧和清除浮动的方法。 总而言之,浮动属性是CSS中用于实现元素布局的重要属性,可以使元素浮动到指定位置,并影响周围元素的布局。然而,由于其一些潜在的问题,现代CSS布局技术更倾向于使用flexbox和grid布局来代替浮动

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值