浮动到底是什么?

浮动核心就一句话:浮动元素会脱离文档流并向左/向右浮动,直到碰到父元素或者另一个浮动元素。请默念3次!

浮动最初设计的目的并没那么多事儿,就只是用来实现文字环绕效果而已,如下所示:

文字环绕效果

但是早期的前端开发者发现:浮动的元素可以设置宽高并且可以内联排列,是介于inlineblock之间的一个神奇的存在,在inline-block出来之前,浮动大行其道。直到inline-block出来后,浮动也有它自己独特的使用场景。

浮动有哪些特征?

浮动的特征就体现在前文的那句话中,别忘了默念三次!此外,浮动带来的负效果也算是它的特征之一。

浮动会脱离文档

脱离文档,也就是说浮动不会影响普通元素的布局

浮动会脱离文档流

从上图可以看出,默认三个设置了宽高的block元素,本来会格子独占一行;如果框1设置了向左/向右浮动,他会忽略框2和框3,直到碰到父元素;同时也存在盖住普通元素的风险

浮动可以内联排列

浮动会向左/向右浮动,直到碰到另一个浮动元素为止,这是浮动可以内联排列的特征。也就是说,浮动可以设置宽高,并且能够一行多个,是介于blockinline之间的存在。

浮动可以内联排列

从上图可以看出,对多个元素设置浮动,可以实现类似inline-block的效果;但是如果每个元素的高度不一致,会出现“卡住”的情况

浮动会导致父元素高度坍塌

浮动会脱离文档流,这个问题对整个页面布局有很大的影响。

// css
.box-wrapper {border: 5px solid red;
}
.box-wrapper .box {float: left; width: 100px; height: 100px; margin: 20px; background-color: green;
}// html
<div class="box-wrapper"><div class="box"></div> <div class="box"></div> <div class="box"></div> </div> 

结果如下,浮动元素脱离了文档流,并不占据文档流的位置,自然父元素也就不能被撑开,所以没了高度。

父元素高度坍塌

那怎么办呢?那就需要我们清除浮动,来解决高度坍塌问题!
清除浮动主要有两种方式,分别是clear清除浮动和BFC清除浮动,其他的你也不用去了解了。

clear如何清除浮动?

clear属性不允许被清除浮动的元素的左边/右边挨着浮动元素,底层原理是在被清除浮动的元素上边或者下边添加足够的清除空间。这句话,请默念5次!
要注意了,我们是通过在别的元素上清除浮动来实现撑开高度的, 而不是在浮动元素上。

还是接着上面的例子,我们简单修改一下HTML代码,如下

<div class="box-wrapper"><div class="box"></div> <div class="box"></div> <div class="box"></div> <div style="clear:both;"></div> </div> 
clear清除浮动

高度坍塌的问题解决了,至此,好像浮动我们可以随便玩了,真棒!

不要在浮动元素上清除浮动

但是有人问到,如果我们给第三个元素加上clear:both,结果会怎样?

<div class="box-wrapper"><div class="box"></div> <div class="box"></div> <div class="box" style="clear:both;"></div> </div> 
不要在浮动元素上清除浮动

诶?给第三个元素加上clear:both之后,第三个元素的左右都没有挨着浮动元素,但是为什么高度还是坍塌了呢?机智的你可能发现了,由于第三个元素是浮动元素,脱离了文档流,就算给第三个元素上下加了清除空间,也是没有任何意义的。

clear清除浮动最佳实践

那么clear清除浮动的最佳实践是什么呢?请看如下代码:

// 现代浏览器clearfix方案,不支持IE6/7
.clearfix:after {display: table;content: " ";clear: both;
}// 全浏览器通用的clearfix方案
// 引入了zoom以支持IE6/7
.clearfix:after {display: table;content: " ";clear: both;
}
.clearfix{*zoom: 1;
}// 全浏览器通用的clearfix方案【推荐】
// 引入了zoom以支持IE6/7
// 同时加入:before以解决现代浏览器上边距折叠的问题
.clearfix:before,
.clearfix:after {display: table;content: " ";
}
.clearfix:after {clear: both;
}
.clearfix{*zoom: 1;
}

clearfix清除浮动

一句话,强烈推荐clearfix的方式清除浮动!

BFC清除浮动

BFC全称是块状格式化上下文,它是按照块级盒子布局的。我们了解他的特征、触发方式、常见使用场景这些就够了。

BFC的主要特征

✦ BFC容器是一个隔离的容器,和其他元素互不干扰;所以我们可以用触发两个元素的BFC来解决垂直边距折叠问题。
✦ BFC可以包含浮动;通常用来解决浮动父元素高度坍塌的问题。

其中,BFC清除浮动就是用的“包含浮动”这条特性。
那么,怎样才能触发BFC呢?

BFC的触发方式

我们可以给父元素添加以下属性来触发BFC:
floatleft | right
overflowhidden | auto | scorll
displaytable-cell | table-caption | inline-block | flex | inline-flex
positionabsolute | fixed

所以我们可以给父元素设置overflow:auto来简单的实现BFC清除浮动,但是为了兼容IE最好用overflow:hidden。但是这样元素阴影或下拉菜单会被截断,比较局限。

.box-wrapper{overflow: hidden;
}

浮动的适用场景有哪些?

文字环绕效果

这个不用说了,浮动本来就是为文字环绕效果而生,这是最基本的

文字环绕效果

页面布局

浮动可以实现常规的多列布局,但个人推荐使用inline-block。
浮动更适合实现自适应多列布局,比如左侧固定宽度,右侧根据父元素宽度自适应。

页面布局

多个元素内联排列

如果前文提到的,浮动可以实现类似inline-block的排列,比如菜单多个元素内联排列。但个人推荐使用inline-block。

多个元素内联排列

又来点总结?

本来只是想简单说说浮动的背景、浮动的问题,浮动的解决方案,但真整理起来的时候,又发现很多知识点需要扩展,很多东西需要掰扯,一文难以言尽,所以只挑一些我觉得比较主流比较重要的知识写出来,如果有兴趣可以自行展开。

✦ 浮动最初设计只是用来实现文字环绕排版的。
✦ 浮动的三个特点很重要。
1. 脱离文档流。
2. 向左/向右浮动直到遇到父元素或者别的浮动元素。
3. 浮动会导致父元素高度坍塌。
✦ 解决父元素高度坍塌的方式就是清除浮动,常规的方法是clear清除浮动和BFC清除浮动,推荐clearfix的方式。一定要弄清楚clear清除浮动的底层原理以及clearfix的那几行代码的具体作用。
✦ BFC有自己的特征,也有触发BFC的方式,这儿就不展开太多了。
✦ IE6/7不支持BFC,也不支持:after,所以IE6/7清除浮动要靠触发hasLayout,了解下就行,毕竟IE6/7已经是历史的产物了。

作者:齐修_qixiuss
链接:https://www.jianshu.com/p/09bd5873bed4
來源:简书

转载于:https://www.cnblogs.com/gopark/p/10200268.html

关于css浮动的一点思考相关推荐

  1. 扶梯正确使用_乘坐自动扶梯解释CSS浮动

    扶梯正确使用 by Kevin Kononenko 凯文·科诺年科(Kevin Kononenko) 乘坐自动扶梯解释CSS浮动 (CSS Floats Explained By Riding An ...

  2. 进一步理解CSS浮动与清除浮动

    本文主要探讨两个问题: 为什么CSS设置浮动会引起父元素塌陷 为什么设置clear:both能清除浮动,并撑开父元素. 起因 CSS的浮动,算是我在写网页时用的最多的属性之一.但要说我对浮动的了解程度 ...

  3. CSS浮动+背景图片+边框+文字排版+段落设置

    一.CSS浮动 1.简介 默认的框是上下移动,CSS浮动可以控制浮动的框向左或者向右移动float属性属性值 说明 left 元素向左浮动 right 元素向右浮动 none 默认值,元素不浮动浮动意 ...

  4. css浮动以及清除浮动

    css浮动以及清除浮动 CSS的定位机制有3种:普通流(标准流).浮动和定位. 一.什么是浮动? 元素的浮动是指设置了浮动属性的元素会脱离标准普通流的控制,移动到其父元素中指定位置的过程. 选择器{f ...

  5. 前端之CSS篇(四)——CSS浮动详解

    前言:页面布局要学习三大核心,盒子模型,浮动 和定位 . 1.CSS浮动 场景:整个网页的布局 本节需要解决的问题: 为什么需要浮动 浮动的排列特性 3种最常见的布局方式 为什么需要清除浮动 写出至少 ...

  6. 一个人做饭简单食谱_如何通过两个简单的寿司布局食谱来理解CSS浮动

    一个人做饭简单食谱 by Anabella Spinelli 通过安娜贝拉·斯皮内利(Anabella Spinelli) 如何通过两个简单的寿司布局食谱来理解CSS浮动 (How to unders ...

  7. CSS浮动元素特点有什么

    什么是浮动? 元素的浮动是指设置了浮动属性(flot)的元素. CSS浮动有什么作用? 1.让多个盒子水平排列成一行,浮动成为布局的重要手段; 2.可以实现盒子的左右对齐等等; 3.浮动最早是用来控制 ...

  8. mysql 手动写时间_关于数据库中如何存储时间的一点思考

    1.切记不要用字符串存储日期 我记得我在大学的时候就这样干过,而且现在很多对数据库不太了解的新手也会这样干,可见,这种存储日期的方式的优点还是有的,就是简单直白,容易上手. 但是,这是不正确的做法,主 ...

  9. 对于表列数据类型选择的一点思考

    对于表列数据类型选择的一点思考 简介 SQL Server每个表中各列的数据类型的选择通常显得很简单,但是对于具体数据类型的选择的不同对性能的影响还是略有差别.本篇文章对SQL Server表列数据类 ...

最新文章

  1. matlab matlabpool,Matlab matlabpool函数undefined
  2. 设计师之歌 --【死了都要改】
  3. AF_UNIX和AF_INET
  4. android 文本后图标_如何在Android中更改文本,图标等的大小
  5. 关于计算机犯罪的英语作文,关于信息安全的英语作文范文
  6. c语言的时间函数的介绍,c语言中时间函数介绍
  7. 自己动手实现分布式任务调度框架
  8. 第二十一天 认识一维数组part3
  9. 【OpenCV学习笔记】【函数学习】一(MFC+OpenCV2.4.7读取摄像头之cvCaptureFromCAM()的索引问题
  10. 云计算核心技术的基本理解
  11. git代码管理可视化工具 :Sourcetree(mac环境)
  12. JAVA实现生成GIF动态图加文字(完整版无License带锯齿优化处理)
  13. IMU惯性测量单元是什么?
  14. [POJ 3311] Hie with the Pie
  15. 窗口管理工具:HazeOver for Mac
  16. AI自动识别户型图生成数据建模到3DVR场景解决方案
  17. 计算机毕业设计SSM本科培训班学员信息管理系统【附源码数据库】
  18. 常用汉字的UNICODE和对应的繁体字
  19. 使用axios+koa+exceljs下载excel文件完整示例
  20. QtEmbeded移植到达芬奇6441平台

热门文章

  1. spring boot项目配置RestTemplate超时时长
  2. [导入]LAMP架构下安装Drupal
  3. md0 mysql_mysql 数据合并
  4. linux模拟题,Linux操作系统模拟题.doc
  5. python三大流程控制
  6. P3952 时间复杂度(模拟)
  7. 50 亿观众的 “云上奥运”,顶级媒体背后的数智化力量
  8. 2021年中国云原生用户调查问卷
  9. 厉害了!祝贺PolarDB喜提科技进步一等奖
  10. 数跑科技联合阿里云创造基于云原生的无边界数字新体验