CSS之我是一个浮动元素(float)

简介: 大家好,我是一个浮动元素,我在CSS王国中是一个很重要的角色,也许你们现在在工作中很少见到我的身影,因为我的flex兄弟和position定位兄弟在大部分情况下可以取代我,但是我还是想详细的介绍一下我自己,毕竟我曾经也是一个在前端开发中随处可见的明星人物。

大家好,我是一个浮动元素,我在CSS王国中是一个很重要的角色,也许你们现在在工作中很少见到我的身影,因为我的flex兄弟和position定位兄弟在大部分情况下可以取代我,但是我还是想详细的介绍一下我自己,毕竟我曾经也是一个在前端开发中随处可见的明星人物。

为啥会有浮动元素的出现?

很久很久以前,网页排版中需要一种文字环绕的效果,于是我就被创造出来了,用来实现下面这样的效果👇,文字环绕着一个浮动的元素

image.png

而且使用我也很简单,只需要设置一个float: left或者right就可以了,代码如下:

image.png

后来很多聪明的前端工程师开始使用我来制作多列布局,比如下面这种

image.png

浮动元素的特点

上面讲了我出现的原因是用来做文字环绕,以及后面被前端工程师拿去做多栏布局,那么我到底有哪些特点呢?接下来我就好好聊聊👇
首先第一点呢,前面说了,我作为一个浮动元素会导致我后面的文字环绕在我周围,示例代码如下:

<div class="float1">
    浮动元素
</div>
<div>
    让浮动效果可视化
    我们可以在浮动元素上应用 margin,将文字推开,但不能在文字上应用 margin 将浮动元素推走。这是因为浮动的元素脱离了正常文档流,紧随其后的元素排布在它的“后方”。你可以将示例代码进行更改,来观察到这个现象。
    在紧随浮动盒子的第一段文字上添加 special 类,然后在你的 CSS 文件中添加如下规则,它会赋予跟随其后的段落一个背景色。
    让浮动效果可视化
    我们可以在浮动元素上应用 margin,将文字推开,但不能在文字上应用 margin 将浮动元素推走。这是因为浮动的元素脱离了正常文档流,紧随其后的元素排布在它的“后方”。你可以将示例代码进行更改,来观察到这个现象。
    在紧随浮动盒子的第一段文字上添加 special 类,然后在你的 CSS 文件中添加如下规则,它会赋予跟随其后的段落一个背景色。
    让浮动效果可视化
    我们可以在浮动元素上应用 margin,将文字推开,但不能在文字上应用 margin 将浮动元素推走。这是因为浮动的元素脱离了正常文档流,紧随其后的元素排布在它的“后方”。你可以将示例代码进行更改,来观察到这个现象。
    在紧随浮动盒子的第一段文字上添加 special 类,然后在你的 CSS 文件中添加如下规则,它会赋予跟随其后的段落一个背景色。
    让浮动效果可视化
    我们可以在浮动元素上应用 margin,将文字推开,但不能在文字上应用 margin 将浮动元素推走。这是因为浮动的元素脱离了正常文档流,紧随其后的元素排布在它的“后方”。你可以将示例代码进行更改,来观察到这个现象。
    在紧随浮动盒子的第一段文字上添加 special 类,然后在你的 CSS 文件中添加如下规则,它会赋予跟随其后的段落一个背景色。
</div>
.float1 {
    height: 100px;
    width: 100px;
    background-color: #69c0ff;
    float: left;
}

然后第二点呢,我作为浮动元素,我会脱离正常的文档流

比如说下面这个效果,蓝色的元素浮动到左边之后脱离了文档流,就导致红色的正常元素从它底下插了上来,这样就会造成一个问题,有时候前端工程师并不希望我浮动之后影响到我后面的元素,后面我会告诉大家如何解决这个问题

示例代码如下:

<div class="float2">
    float2
</div>
<div class="normal">
    正常的元素
</div>
.float2 {
    height: 100px;
    width: 100px;
    background-color: #69c0ff;
    float: left;
    opacity: 0.8;
}
.normal {
    height: 200px;
    background-color: #ff7875;
}

最后第三点呢,我会造成父元素的高度塌陷,比如下面这个例子👇

我浮动之后,我的父容器缩成了一根线,这就是父容器高度塌陷的问题

示例代码如下:

    <div class="wrapper">
        <div class="float3">
            浮动
        </div>
    </div>
    .wrapper {
        border: 1px solid;
    }
    .float3 {
        height: 200px;
        width: 200px;
        background-color: #69c0ff;
        float: left;
        clear: left;
        opacity: 0.8;
    }

解决浮动元素带来的问题

前面说了我作为一个浮动元素,会导致我后面的元素位置发生变化以及父元素高度塌陷的问题,下面我就讲讲如何解决这两个问题👇

首先,解决我后面的元素位置发生变化的问题,解决办法是可以给我后面出现的元素设置 { clear: left; },clear属性的意思是清除某个方向的浮动元素对我的影响,比如{ clear: left; }的意思就是清除左边浮动元素对我的影响,{ clear: both; }的意思就是清除左右两边的浮动元素对我的影响

比如下面这个例子,我后面的元素就没有被我的浮动所影响😸

示例代码:

    <div class="wrapper">
        <div class="float3">
            浮动
        </div>
        <div class="item1">
            正常元素,设置了{ clear: left; }
        </div>
        <div class="item2">
            正常元素
        </div>
    </div>
    .wrapper {
        border: 1px solid;
    }
    .float3 {
        height: 200px;
        width: 200px;
        background-color: #69c0ff;
        float: left;
        clear: left;
        opacity: 0.8;
    }
    .item1 {
        height: 80px;
        background-color: #ff9c6e;
        clear: left;
    }
    .item2 {
        height: 80px;
        background-color: #ffc069;
    }
    .item3 {
        height: 200px;
        background-color: #d3f261;
    }

然后再解决父元素高度塌陷的问题,当父容器元素里面只有1个浮动元素的时候,就无法使用上面这种clear的办法了,所以得想别的办法了

废话不多说,讲两个常见的办法:

  1. 设置父容器元素{ overflow: hidden; }

这个办法其实本质就是触发BFC,触发BFC后父元素的高度就会包含其中的浮动元素,至于什么是BFC我后面会继续写笔记聊到

  1. 给父容器加一个伪元素:after { content:"."; display:block; height:0; visibility:hidden; clear:both; }

这个办法的本质其实就是创造一个父容器内处于最后的子元素,并且让它设置为{ clear: both },这样子就清除了浮动元素的影响,父元素高度就不会塌陷了

总结

我曾经是一种很好用的特性,但是现在却很少看到我,希望大家可以更多的了解我

相关文章
|
2天前
|
前端开发 JavaScript
css之伪类hover改变自身、子元素、其他元素的样式
css之伪类hover改变自身、子元素、其他元素的样式
34 0
|
17小时前
|
前端开发
CSS元素隐藏的多种方式:让你轻松实现页面布局
CSS元素隐藏的多种方式:让你轻松实现页面布局
|
1天前
|
前端开发
css中如何解决绝对定位元素被遮挡的问题
css中如何解决绝对定位元素被遮挡的问题
13 3
|
1天前
|
存储 移动开发 JavaScript
jQuery 根据 css 类筛选 DOM 元素的代码
jQuery 根据 css 类筛选 DOM 元素的代码
16 1
|
2天前
|
前端开发
|
2天前
|
前端开发
【Web前端】CSS基本语法规范和引入方式&&常见选择器用法&&常见元素属性
【Web前端】CSS基本语法规范和引入方式&&常见选择器用法&&常见元素属性
|
2天前
|
前端开发 开发者 容器
【专栏:CSS基础篇】CSS定位与布局:从静态到浮动、定位
【4月更文挑战第30天】本文介绍了CSS定位与布局的基础,包括静态、相对、绝对、固定定位以及浮动。静态定位遵循HTML顺序,相对定位可在正常位置基础上偏移,不占用额外空间。绝对定位基于最近已定位祖先元素定位,脱离文档流。固定定位相对于浏览器窗口定位,无视页面滚动。浮动用于文字环绕图片等,可能导致父元素高度塌陷。Flexbox布局提供更灵活的元素排列和对齐方式,适配各种复杂布局需求。理解并掌握这些布局技术能提升网页设计的灵活性和响应性。
|
2天前
|
前端开发 开发者
【专栏:CSS基础篇】CSS选择器详解:精准定位网页元素
【4月更文挑战第30天】本文介绍了CSS选择器在Web开发中的重要性,详细阐述了基础选择器(元素、类、ID、属性和伪类/伪元素)及复杂选择器(后代、子元素、相邻兄弟和一般兄弟)的用法。通过理解并巧妙运用这些选择器,开发者能更高效地控制页面样式,提高代码的可维护性。CSS预处理器如Sass、LESS进一步增强了选择器的功能,助力创建优雅且强大的样式表,实现精准的网页设计。
|
2天前
|
XML 前端开发 JavaScript
CSS中动画、过渡、定位、浮动的作用
CSS中动画、过渡、定位、浮动的作用
|
2天前
|
前端开发 容器
css样式元素的相对定位,绝对定位,固定定位等元素定位运用技巧详解
css样式元素的相对定位,绝对定位,固定定位等元素定位运用技巧详解