CSS基础:浮动(float)的3种方式,清除浮动3种方式的详解

你好,我是云桃桃。

一个希望帮助更多朋友快速入门 WEB 前端的程序媛。

云桃桃-大专生,一枚程序媛,感谢关注。回复 “前端基础题”,可免费获得前端基础 100 题汇总,回复 “前端工具”,可获取 Web 开发工具合集

281篇原创内容-更多前端系列内容可以go公众.h:云桃桃

后台回复“前端工具”可获取开发工具,持续更新中

后台回复“前端基础题”可得到前端基础100题汇总,持续更新中

后台回复“前端电子书”可获取20+本精选电子书

前言

CSS 中常见的传统布局方式,包括普通流(标准流)、定位和浮动。这三种方式是网页布局中常用的基本手段,可以实现不同的排列和定位效果。

所谓普通流,也称为标准流或文档流,是指在没有进行特殊定位或浮动的情况下,元素按照其在 HTML 文档中的顺序从上到下依次排列的布局方式。

在普通流中,块级元素会垂直排列,各元素占据自己的一行,内联元素则水平排列在各自所在的行内。这种布局方式是 HTML 元素默认的排列方式,也是最常见的网页布局方式之一。

所谓定位,就是咱们之前文所说的CSS基础:position定位的5个类型详解!,指的是使用 CSS 中的定位属性(如 position: relative;position: absolute;position: fixed; 等)对元素进行定位,从而脱离文档流的布局方式。在定位流中,元素的位置不再受到普通流中其他元素的影响,可以根据指定的定位属性相对于父元素或视口进行定位。

而今天聊就是浮动了。浮动的主要作用是实现页面布局的多列设计,例如实现2~多栏布局。通过浮动,可以将多个元素水平排列。比如,淘宝的这个 3 栏布局,多行多栏的产品布局,都可以通过浮动实现。

图片

图片

浮动元素的特点和表现方式包括:

  1. 脱离文档流:浮动元素不再占据文档流中的位置,其他元素会围绕浮动元素进行排列。

  2. 元素块化:浮动元素表现为块级元素,会独占一行或一块空间。

  3. 水平移动:浮动元素默认是水平移动的,可以通过设置float: left;float: right;来控制移动方向。

了解并实践了浮动以后,基本就可以完成大多数非动态元素过多的网站了,比如,网易云音乐,淘宝,腾讯新闻,公众号等。

好,我们开始吧。

float 的 3 个属性值

CSS 中的 float 属性有三个属性值,分别是:

  1. left:元素向容器左侧浮动。

代码如下:

* {margin: 0;padding: 0;
}
.item {height: 200px;float: left;margin-right: 10px;line-height: 200px;text-align: center;color: #fff;
}
.item1 {width: 100px;background-color: #f00;
}
.item2 {background-color: #0f0;width: 400px;
}
.item3 {width: 200px;background-color: #00f;
}
<div class="parent-box"><div class="item item1">块1</div><div class="item item2">块2</div><div class="item item3">块3</div>
</div>

效果如下:

图片

  1. right:元素向右浮动。

代码如下,我们让前 2 个左浮动,最后一个右浮动:

* {margin: 0;padding: 0;
}
.item {width: 200px;height: 200px;margin-right: 20px;line-height: 200px;text-align: center;color: #fff;
}
.item1 {background-color: #f00;float: left;
}
.item2 {width: 800px;background-color: #0f0;float: left;
}
.item3 {float: right;background-color: #00f;
}

html 部分和上个案例一样。

效果如下:

图片

  1. none:默认值,元素不浮动,按照文档流正常排列。

代码就不举例了,默认不设置就是 none。

浮动带来的问题:

我们看一下第一个浮动的案例,当我们用 F12 开发者工具检查元素的时候,发现父级 parent-box 的高度,貌似并没有被子元素的 200 像素的高度,撑起来,是吧。而是这样,高度是 0,如图。

图片

这是因为,浮动元素脱离了文档流,可能导致父容器塌陷或者与其他元素重叠,影响页面布局的正常显示。怎么塌陷和重叠了呢?

比如,我们想在案例 1 下面,再写一行,希望它另起一行,代码如下:

<div class="parent-box"><div class="item item1">块1</div><div class="item item2">块2</div><div class="item item3">块3</div>
</div>
<div><h1>我是新行的内容</h1><div class="parent-box"><div class="item item1">块1</div><div class="item item2">块2</div><div class="item item3">块3</div></div>
</div>

结果,发现,它跑到第一行右侧去了,这就是第一个父元素 parent-box 塌陷了,布局重叠了。

图片

那怎么办呢,清除浮动,就派上用场了。

清除浮动是指清除浮动元素对父容器的影响,使得父容器能够包含浮动元素及其后续内容。

清除浮动的 3 个方法

清除浮动的方法有多种,最通用的写法是最后 1 种,来一起看看。

  1. 使用空元素并设置 clear: both;:在浮动元素的后面添加一个空的块级元素,并通过设置 clear 属性为 both 来清除浮动。例如:

    <div style="clear: both;"></div>
    

    这种方法简单直接,但需要在 HTML 中添加额外的元素,不够简约,而且容易忘,对吧。

  2. 使用 overflow: hidden;清除浮动:将父容器设置为 overflow: hidden;,这样可以触发 BFC(块级格式化上下文),从而清除浮动。例如:

    .clearfix {overflow: hidden;
    }
    
    <div class="clearfix"><!-- 浮动元素 --><div style="float: left;"></div><div style="float: right;"></div>
    </div>
    

    这种方法不需要添加额外的元素,但可能会影响其他布局,不够合理。

  3. 使用 clearfix 技巧清除浮动(最常用,最推荐!):通过在父容器上应用 clearfix 类来清除浮动,通常使用伪元素来实现。例如:

    .clearfix::after {content: '';display: table;clear: both;
    }
    
    <div class="clearfix"><!-- 浮动元素 --><div style="float: left;"></div><div style="float: right;"></div>
    </div>
    

    这种方法不需要额外的 HTML 元素,也不会影响其他布局,只需要加上一个 class名 就行了,是一种最最最常用的清除浮动的方法。

    当清除后,那后续的布局也能正常重新开始了。拿我们案例 1 举例子,给父级加上.clearfix 以后,后续再多加几个块元素,高度,排版都没问题了。如图。

图片

图片

需要注意的是:这个 clearfix 呢,也是作为以后的 CSS 基础学习/项目中 重置里面的一个重要内容。项目里都带上就可以了。

下文,我们根据一些热门网站,我们来写几个浮动实例。

OK,本文完。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/640202.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Splashtop Cloud RADIUS 解决方案入围教育技术奖

2024年4月17日 加利福尼亚州库比蒂诺 Splashtop 在简化随处办公的远程解决方案领域处于领先地位&#xff0c;该公司自豪地宣布最近入围了《教育技术文摘》&#xff08;EdTech Digest&#xff09;的“2024年教育技术奖”的“炫酷工具”决赛。教育科技奖成立于2010年&#xff0c…

vue的学习之用vue写一个hello,vue

根据以下步骤下载vue.js 介绍 — Vue.js 创建一个damo.html &#xff0c;引入vue.js即可 <body><div id"app">{{ message }}</div><!-- Vue --><!-- 开发环境版本&#xff0c;包含了有帮助的命令行警告 --><script src"js/vu…

mysql的DDL语言和DML语言

DDL语言&#xff1a; 操作数据库&#xff0c;表等&#xff08;创建&#xff0c;删除&#xff0c;修改&#xff09;&#xff1b; 操作数据库 1&#xff1a;查询 show databases 2:创建 创建数据库 create database 数据库名称 创建数据库&#xff0c;如果不存在就创建 crea…

opencv_5_图像像素的算术操作

方法1&#xff1a;调用库函数 void ColorInvert::mat_operator(Mat& image) { Mat dst; Mat m Mat::zeros(image.size(), image.type()); m Scalar(2, 2, 2); multiply(image, m, dst); m1 Scalar(50,50, 50); //divide(image, m, dst); //add(im…

Hdu1150 Machine Schedule【二分图最大匹配、最小点覆盖】

Machine Schedule 题意 有两台机器&#xff0c;机器 A A A 有 n n n 个模式&#xff0c;机器 B B B 有 m m m 个模式 有 k k k 个任务&#xff0c;第 i i i 个任务只能由机器 A A A 的模式 x x x 或机器 B B B 的模式 y y y 完成 问最少需要多少个模式才能完成所有任…

67条tips实战案例渗透测试大佬的技巧总结

67条tips实战案例渗透测试大佬的技巧总结。 Tips 1. 手动端口探测 nmap的-sV可以探测出服务版本&#xff0c;但有些情况下必须手动探测去验证 使用Wireshark获取响应包未免大材小用&#xff0c;可通过nc简单判断 eg. 对于8001端口&#xff0c;nc连接上去&#xff0c;随便输…

如何判别三角形和求10 个整数中最大值?

分享每日小题&#xff0c;不断进步&#xff0c;今天的你也要加油哦&#xff01;接下来请看题------> 一、已知三条边a&#xff0c;b&#xff0c;c能否构成三角形&#xff0c;如果能构成三角形&#xff0c;判断三角形的类型&#xff08;等边三角形、等腰三角形或普通三角形 …

AB5 点击消除

AB5 点击消除 可以用栈来解决。 当栈为空的时候&#xff0c;直接将字符入栈当栈非空的时候 当前字符与栈顶字符相同 出栈 当前字符与栈顶字符不同 入栈 重复上述2步即可。 栈在输出的时候不能从栈底开始输出&#xff0c;需要先把栈顶元素弹出并保存下来&#xff0c;在进行输…

Windows 的常用命令(不分大小写)

Net user &#xff08;查看当前系统所有的账户&#xff09; net user yourname password /add 添加新用户 net localgroup administrators yourname /add 添加管理员权限 net user yourname /delete 删除用户 net user 命令 [colorred]说明&#xff1a;以下命令仅限持管理员…

PLC_博图系列☞N=:在信号下降沿置位操作数

、 PLC_博图系列☞N&#xff1a;在信号下降沿置位操作数 文章目录 PLC_博图系列☞N&#xff1a;在信号下降沿置位操作数背景介绍N&#xff1a; 在信号下降沿置位操作数说明参数示例 关键字&#xff1a; PLC、 西门子、 博图、 Siemens 、 N 背景介绍 这是一篇关于PLC编程的…

Linux 安装 Docker +Docker Compose + cucker/get_command_4_run_container

TIP&#xff1a;下面演示的 Linux 系统为 CentOS 7.9。 Docker 更新你的系统并安装必要的依赖项&#xff1a; sudo yum update -y sudo yum install -y yum-utils device-mapper-persistent-data lvm2添加 Docker 的官方仓库&#xff1a; sudo yum-config-manager --add-rep…

Codeforces Round 940 (Div. 2) C. How Does the Rook Move?

//dp删除后&#xff0c;可以堆成新的N*N. #include<bits/stdc.h> using namespace std; #define int long long const int mod1e97; const int n1e611; int a,b,c,d[n],l,r; signed main() {ios::sync_with_stdio(false);cin>>a;d[1]1;d[0]1;for(int i2;i<3e…