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 },这样子就清除了浮动元素的影响,父元素高度就不会塌陷了

总结

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

相关文章
|
1月前
|
前端开发 算法 Java
(CSS)使用Flex布局,帮助你快速了解各种基本的Flex布局属性以及帮你让元素快速达到布局中的指定位置!
(CSS)使用Flex布局,帮助你快速了解各种基本的Flex布局属性以及帮你让元素快速达到布局中的指定位置!
110 1
|
1月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
Flex 布局 布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性。它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现。 2009年,W3C 提出了一种新的方案----Flex 布局,可以简便、完整、响应式地实现各种页面布局。目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能。 一、Flex 布局是什么? Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。
227 1
|
1月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
盒模型 盒模型: 所谓盒模型,就是浏览器为页面中的每个HTML元素生成的矩形盒子。 这些盒子们都要按照可见板式模型在页面上排布。 可见的板式模型主要由三个属性控制:position 属性、display 属性和 float属性。 position属性控制页面上元素间的位置关系。 display属性控制元素是堆叠、并排或者不在页面上显示。 float属性提供控制的方法,以便于把元素组成成多栏布局。 盒模型讲解: 在默认的情况下,每个盒子的边框是不可见的,背景也是透明的。 所以我们 不能直接的看到页面中的盒
147 1
|
1月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
伪类:伪类这个叫法源自于它们跟类相似,但实际上并没有类会附加到标记中的标签上。 伪类分为两种(以及新增的伪类选择器): UI伪类:会在HTML元素处于某种状态时(例如:鼠标指针位于连接上),为该元素应用CSS样式。 :hover 结构化伪类:会在标记中存在某种结构上的关系时 例如: 某元素是一组元素中的第一个或最后一个,为该元素应用CSS样式。 :not和:target(CSS3新增的两个特殊的伪类选择器)
144 1
|
1月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
position定位(核心) 我们讲盒模型的时候,提到了3个属性可以用来控制页面排版。 三大属性:position属性,display属性,float属性。 position 属性控制页面上元素间的位置关系。 display 属性控制页面元素是否显示或者是堆叠还是并排显示。 float 属性提供控制方法。 通过float这种控制方法,可以实现多栏布局,导航菜单等等。 position属性是干嘛用的?怎么用?有哪些属性值? position属性控制页面上元素间的位置关系,也就是排版。 怎么用?要知道怎么用
312 0
|
1月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
继承 我们的CSS中很多的属性也是可以继承的,其中相当一部分是跟文字的相关的,比如说颜色、字体、字号。 当然还有一部分是不能继承的。 例如边框、内外边距。 层叠 层叠是CSS的核心机制。 层叠的工作机制: 当元素的同一个样式属性有多种样式值的时候,CSS就是靠层叠机制来决定最终应用哪种样式。 层叠规则: 层叠规则一:找到应用给每个元素和属性的声明。 说明:浏览器在加载每个页面时,都会据此查找到每条CSS规则, 并标识出所有受到影响的HTML元素。
78 1
|
9月前
|
前端开发 JavaScript
如何使用CSS过渡实现页面元素的淡入淡出效果?
如何使用CSS过渡实现页面元素的淡入淡出效果?
426 79
|
前端开发 JavaScript
如何利用 CSS3 动画实现元素的淡入淡出效果?
在上述代码中,定义了一个名为 `fade-in` 的CSS类,其初始透明度为0,并设置了淡入的过渡效果。当通过JavaScript为元素添加 `active` 类时,元素的透明度变为1,实现淡入效果;当再次点击按钮移除 `active` 类时,元素又会逐渐淡出。通过这种方式,可以根据用户的操作灵活地控制元素的淡入淡出效果。
1507 60
|
数据采集 前端开发 JavaScript
捕捉页面的关键元素:用CSS选择器与Puppeteer自动抓取
本文介绍了如何使用 Puppeteer 结合 CSS 选择器抓取动态网页中的关键元素,以亚航网站的特价机票信息为例,通过设置代理 IP、User-Agent 和 Cookie 等技术手段,有效提升爬虫策略,实现高效、稳定的爬取。
342 5
捕捉页面的关键元素:用CSS选择器与Puppeteer自动抓取
|
12月前
|
前端开发 JavaScript UED
CSS滚动效果和视差滚动的原理、应用及其对用户体验的影响。从平滑滚动到元素跟随,再到滚动触发动画
本文探讨了CSS滚动效果和视差滚动的原理、应用及其对用户体验的影响。从平滑滚动到元素跟随,再到滚动触发动画,这些效果增强了页面的吸引力和互动性。视差滚动通过不同层次元素的差异化移动,增加了页面的深度感和沉浸感。文章还讨论了实现方法、性能优化及案例分析,旨在为设计师和开发者提供实用指导。
295 7