你还在用CSS旧时代布局的王者:浮动float 吗?

news2024/11/24 12:30:21

写在前面

随着flex、grid等布局的兼容性越来越好,float几乎已经在大众的视野消失了,曾经默认的小妖精终究成为了时代的眼泪。

作为前端开发者,你经历过float的时代吗?还在用float吗?

一、什么是浮动?

首先浮动是CSS中的一个属性,所有主流浏览器都支持float(包括IE),其次它的作用是让元素脱离文档流,块元素水平排列,为什么特指块元素呢?因为内联元素本来就是水平排列的。

二、浮动的属性值:

  • left : 元素左浮动
  • right :元素右浮动
  • inherit : 继承父类的float属性值
  • none : 不浮动(默认值)

!注意:任何的版本的 Internet Explorer 都不支持属性值 “inherit”。 是不支持噢~~~

三、浮动的用法:

实例准备,我们将在下面这段代码进行浮动的演示:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>浮动</title><style> div{ height: 100px; width: 100px; } .box1{ background: red; } .box2{ background: green; } .box3{ background: blue; } </style> </head><body><div class="box1"></div><div class="box2"></div><div class="box3"></div> </body></html> 

运行效果图:

分析:页面中有三个div,宽高相等,颜色不一样;div为块级元素,所有默认占据一整行,现在我们要通过float使得三个div位于同一行。

1、float:left (左浮动)

div{ height: 100px; width: 100px; float: left; } 

我们给所有的div都添加上了float:left,达到了所有div位于同一行的效果,同理我们可以使用float:right使得元素位于同一行,但是靠右排列

2、float:right (右浮动)

div{ height: 100px; width: 100px; float: right; } 

使用右浮动后我们观察一下div的顺序,可以发现: 根据div的先后顺序,左浮动时,div从左到右排列;右浮动时,div从右到左排列

因为左浮动和右浮动元素排列顺序不一样,所有有时候我们需要特别注意一下:比如网页导航栏

<!DOCTYPE html>
<html lang="en"><head> <meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>导航</title><style> ul li{ float: left; list-style: none; margin: 0 20px; } </style></head><body><ul><li>首页</li><li>资讯</li><li>产品中心</li><li>关于我们</li><li>反馈</li></ul></body>
 </html> 

我们通常使用ul li来制作导航栏,那么想要使得li水平排列,我们为每个li添加了浮动,效果如下:

但是我们发现,一般导航栏都是左边放logo,右边放导航的,但是这里我们不能直接使用右浮动,因为这样导航的顺序就变成不是我们想要的了

像这个我们可以这样来实现:

html,body{ margin: 0 100px; padding: 0; }
.logo{ height: 100px; width: 200px; background: red; float: left; }
ul{ line-height: 100px; float: right; }
ul li{ float: left; list-style: none; margin: 0 20px; } 
<body><div class="logo"></div><ul><li>首页</li><li>资讯</li><li>产品中心</li><li>关于我们</li><li>反馈</li></ul>
</body> 

分析:我们让li在ul中仍然是左浮动,保证导航栏的顺序;然后让ul整体右浮动,而logo左浮动,这样就实现了简单的导航栏(当然,这是简单的实例,真正的导航栏还需要进很多步美化)

运行效果图:

3、float : none

这个是浮动的默认值,即为不浮动,用得比较少,一般在你需要覆盖别人的样式时可能会用到。

4、float:inherit

这个更少用,因为所有IE都不支持这个属性值,基本是不能使用的; 不过我没有测试过,是W3C说的~

四、浮动带来的后果:

浮动除了让块元素水平排列之后,还有造成我们元素的一些变化,我们也要清除:

1、浮动改变了块元素的宽度

在没有添加浮动的时候,每个div都占据一整行,如果没有指定div的宽度,div的宽度将会占满一整行

那在没有指定宽度的情况下,添加浮动会怎么样呢? 结果就是宽度为0了

我们可以在div中填充一些文字,再看效果:

<div class="box1">111</div>
<div class="box2">222</div>
<div class="box3">333</div> 

结论:当元素添加浮动属性后,宽高如果不指定,则为内容撑开的宽高。

2、脱离文档流

这是个很重要的知识点

脱离文档流可以理解为元素进行了z轴的位移,网页是个立体结构,除了横竖方 向的xy轴外,还存在面向我们的z轴,浮动元素在z轴上移一层,那么原来所在的层级就空了出来,所以排列在后面的元素会占据浮动元素的前面,被浮动元素遮挡。

可以简单看一下案例:

div{ height: 100px; width: 100px; color: #fff; }
.box1{ background: red; float: left; }
.box2{ height: 200px; width: 200px; background: green; }
.box3{ background: blue; } 

首先我们只给div1添加浮动,另外两个不添加;为了展示效果,给div2增加了宽高,我们可以看到这个效果:

这个例子可以很清晰的理解脱离文档流的意思,div1脱离了文档流,则不占据HTML中的位置了,div2补充到div1的位置,但是div1仍看得见,所以div1把div2的一部分遮挡住了。

注意:浮动元素只能遮挡元素,而不会遮挡文本,如div2所示

3、内联元素添加浮动后,拥有块级元素的特性

块级元素添加了浮动后,有了display: inline-block;的特性,比如:不占据一行、宽高根据内容变化、可以定义宽高等

而内联元素同理,也有了display: inline-block;的特性,比如可以定义宽高:

<span>111</span>
<span>222</span>
<span>333</span> 
span{ height: 100px; width: 300px; margin: 0 10px; } 

现在页面中有一个内联span便签,在不添加浮动的时候,定义宽高无效,如下:

而添加了浮动之后,span的宽高生效了

span{ height: 100px; width: 300px; margin: 0 10px; float:left; } 

值得一提的是:元素除了浮动外,并没有添加display: inline-block; 也就是说,这种特性是float自带的,而不是通过修改了元素样式得来的。

4、浮动元素换行时只参考前一个元素的位置

浮动元素在父容器宽度不够的时候,进行换行显示,而换行后的Y轴位置,参考换行元素的前一个。

div{ width:30%; float:left; }
.box1{ background: red; height: 500px; }
.box2{ background: green; height: 100px; }
.box3{ background: yellow; height: 200px; }
.box4{ background: blue; height:300px; } 
<div class="box1"></div>
<div class="box2"></div>
<div class="box3"></div>
<div class="box4"></div> 

可以看到,蓝色盒子元素进行了换行显示,它所处在的Y轴方向是参照前一个,也就是div3的高度的,而在X轴上,仍存在浮动元素,所以蓝色盒子在红色盒子的右边出现。

五、清除浮动

清除浮动(clear)也是一个CSS属性,用作清除浮动。

注意:初学者容易认为清除浮动是清除自身的浮动,而错误的使用了clear属性,比如:

.div1{ height: 100px; width: 100px; background: red; float: left; clear: both; } 
.div2{ height: 200px; width: 200px; background: green; } 

这种用法和理解是错误的(给div设置float和clear),得到的结果仍是浮动:

清除浮动应该理解为清除该元素周围的浮动,而不是自身浮动,如果想清除div1浮动不影响div2,那么clear应该添加给div2

.div1{ height: 100px; width: 100px; background: red; float: leftl; }
.div2{ height: 200px; width: 200px; background: green; clear: both; } 

表示div2周围不能存在浮动的元素,所以div2不会和div1并列。

注意:清除浮动只是让该元素不和浮动元素一起排列,但是它不会影响div1浮动,我们可以检查一下页面:

div2不浮动,默认占满一整行,div1浮动了,不再占满整行,尽管div2设置清除浮动,但不会影响div1浮动。

除了清除浮动外,还可以通过下面这种方法来让浮动元素占据高度,不影响后续元素的排列:

.f{ overflow: auto; } 
.box1,.box2{ width: 200px; height: 300px; float:left; } 
.box1{ background: red; } 
.box2{ background: yellow; } 
.box3{ width: 800px; height: 400px; background: green; } 
<div class="f"> <div class="box1"></div><div class="box2"></div>
</div>

<div class="box3"></div> 

给浮动元素添加外部容器,并给外部设置样式overflow:auto即可,父元素会计算浮动元素的高度并赋值给自身。

最后

整理了75个JS高频面试题,并给出了答案和解析,基本上可以保证你能应付面试官关于JS的提问。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ccc-台大林轩田机器学习基石-hw0

文章目录1 Probability and Statistics2 Linear Algebra3.Calculus一览图hw0题目链接1 Probability and Statistics 不妨假设C(n,K)C(n,K)&#xff0c;0≤K≤NC(n, K)C(n, K) &#xff0c;0 \le K\le NC(n,K)C(n,K)&#xff0c;0≤K≤N成立&#xff0c;只需证明C(n1,K)(n1)!K!(…

list类的使用和模拟实现

目录 一、list类的介绍 二、list的使用 1.构造、拷贝构造函数和迭代器 2.数据的增删查改 三、list的部分接口实现 1.节点定义 2.list类的组织 四、list的迭代器 1.迭代器的设计思路 2.const迭代器 3.->操作符的重载 4.反向迭代器 一、list类的介绍 list就是C库…

Elasticsearch基本概念和索引原理

一、Elasticsearch是什么&#xff1f; Elasticsearch是一个基于文档的NoSQL数据库&#xff0c;是一个分布式、RESTful风格的搜索和数据分析引擎&#xff0c;同时也是Elastic Stack的核心&#xff0c;集中存储数据。Elasticsearch、Logstash、Kibana经常被用作日志分析系统&…

[CCS 2022] 皇帝没有衣服:用于网络安全的AI/ML

AI/ML for Network Security: The Emperor has no ClothesCCS 22: Proceedings of the 2022 ACM SIGSAC Conference on Computer and Communications Securityhttps://dl.acm.org/doi/abs/10.1145/3548606.3560609摘要最近的一些研究工作提出了基于机器学习&#xff08;ML&…

工业废水的种类及其处理工艺有哪些?特定目标污染物的深度去除

随着工业的迅速发展&#xff0c;工业废水的种类和数量随之增加&#xff0c;对水体的污染也日趋严重&#xff0c;威胁人类的健康和正常生活。所以工业废水的处理对于环保至关重要。 保护生态环境、更好地做好工业废水的处理&#xff0c;了解工业废水及其种类与处理非常必要。 工…

MySQL 删除数据库

使用普通用户登陆 MySQL 服务器&#xff0c;你可能需要特定的权限来创建或者删除 MySQL 数据库&#xff0c;所以我们这边使用 root 用户登录&#xff0c;root 用户拥有最高权限。 当数据库不再使用时应该将其删除&#xff0c;以确保数据库存储空间中存放的是有效数据。删除数据…

【Hello Linux】 Linux基础命令

作者&#xff1a;小萌新 专栏&#xff1a;Linux 作者简介&#xff1a;大二学生 希望能和大家一起进步&#xff01; 本篇博客简介&#xff1a;介绍Linux的基础命令 Linux基础命令ls指令lsls -als -dls -ils -sls -lls -nls -Fls -rls -tls -Rls -1总结思维导图pwd指令whoami指令…

Python 条件语句

Python条件语句是通过一条或多条语句的执行结果&#xff08;True或者False&#xff09;来决定执行的代码块。可以通过下图来简单了解条件语句的执行过程:Python程序语言指定任何非0和非空&#xff08;null&#xff09;值为true&#xff0c;0 或者 null为false。Python 编程中 i…

【正点原子FPGA连载】第八章UART串口中断实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

1&#xff09;实验平台&#xff1a;正点原子MPSoC开发板 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id692450874670 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第八章UART串口中…

【SSD 代码精读】之 数据增强(Data Augmentation)

SSD 数据增强前言1、Compose2、SSDCropping3、Resize4、ColorJitter5、ToTensor6、RandomHorizontalFlip7、Normalization8、AssignGTtoDefaultBox前言 原论文 根据原论文&#xff0c;我们需要处理的有以下&#xff1a; data_transform {"train": transforms.Com…

vue2.x中使用vuex

Vuex是什么&#xff1f; Vuex是一个专门为Vue.js应用程序开发的状态管理模式。它采用集中式存储来管理应用程序中所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化。Vuex也被集成到了Vue的官方调试工具vue-devtools中&#xff0c;提供了诸如零配置…

Java:使用Java功能确保应用程序安全的方法

与添加新功能一样重要的是&#xff0c;应用程序开发人员需要开始更加重视他们设计的应用程序的安全性。毕竟&#xff0c;更多的应用程序功能意味着更多的数据驻留在应用程序中。如果没有适当的安全控制&#xff0c;这些数据很容易被入侵者窃取。Java是目前世界上最安全、最流行…

如何去阅读源码,我总结了18条心法

在聊如何去阅读源码之前&#xff0c;先来简单说一下为什么要去阅读源码&#xff0c;大致可分为以下几点原因&#xff1a;最直接的原因&#xff0c;就是面试需要&#xff0c;面试喜欢问源码&#xff0c;读完源码才可以跟面试官battle提升自己的编程水平&#xff0c;学习编程思想…

不要慌,我们谈一谈如何用好 ChatGPT

别人贪婪时我恐惧&#xff0c;别人恐惧时我贪婪。 ——巴菲特 ChatGPT 火了&#xff0c;技术领域的社交媒体、自媒体几乎被 ChatGPT 刷屏&#xff0c;这些内容当中最让人惶恐不安的是我们是否会被 AI 取代之类的文章。 比如以下几个文章标题&#xff1a; 《ChatGPT可能马上…

Transformer结构解读

咱们还是照图讨论&#xff0c;transformer结构图如下&#xff0c;本文主要讨论Encoder部分&#xff1a;图一一、首先说一下Encoder的输入部分&#xff1a;在NLP领域&#xff0c;个人理解&#xff0c;这个inputs就是我们的句子分词之后的词语&#xff0c;比如“我&#xff0c;喜…

符号让人疯狂

符号让人疯狂 判断背了个LV符号的包就想可能有钱 趣讲大白话&#xff1a;人是通过符号区分生活的 聪明人想想&#xff1a;能超越或摆脱符号依赖吗&#xff1f; *********** 信息社会加速符号的传递和创造 我们已经被各种信息传递的符号淹没 信息符号的筛选成了人的主要工作 再…

GRB非隔离系列宽电压输入负高电压输出 电压控制型

特点● 效率高达70%以上● 1*2英寸标准封装● 单电压负输出● 价格低● 电压控制,输出电压随控制电压变化线性变化● 工作温度: -40℃~85℃● 阻燃封装&#xff0c;满足UL94-V0 要求● 温度特性好● 可直接焊在PCB 上应用GRB 系列模块电源是一种DC-DC升压变换器。该模块电源的输…

十、Linux文件 - fread函数讲解

目录 1.fread函数讲解 2.fread函数实战 1.fread函数讲解 从文件中读入数据到指定的地址中 函数原型&#xff1a; size_t fread(void*buff , size_t size, size_t count , FILE* stream) /* * description :对已打开的流进行数据读取 * param ‐ ptr &#xff1a;指向 数据块的…

好用的电脑备份软件推荐

现在几乎每个人都有一台电脑&#xff0c;上面存储着大量的数据&#xff0c;比如宝贵的照片、视频、工作文档等等。但电脑也随时存在许多威胁&#xff0c;比如病毒、Windows 更新错误、死机黑屏、驱动程序问题、系统崩溃等。为防止任何数据丢失&#xff0c;你需要一个专业的电脑…

Oracle数据库故障处理-单块读hang存储异常导致hang死,数据库大量的db file seq read等待(p1 p2无反映)

1 故障描述 2023年1月27日下午接到业务反馈数据库存在大量的锁表阻塞信息&#xff0c;并且业务的页面以及数据库的一些查询均处于阻塞状态&#xff0c;简单的查询sql也需要查询很长时间且未返回结果,数据库hang状态。 问题现象2 1 数据库进程无法杀除。 2 操作系统进程使用…