浮动概念

浮动元素会脱离文档的普通流,根据float的值向左或向右移动,直到它的外边界碰到父元素的内边界或另一个浮动元素的外边界为止。由于浮动框不在文档的普通流中,所以文档的普通流中的块级元素表现得就像浮动元素不存在一样。

浮动影响

浮动元素会造成父元素塌陷

当给元素设置float之后,元素脱离文档流,父元素没有设置height,造成塌陷。

<div class="super"><div class="sub"></div>
</div>.super{border:1px solid blue;
}.sub{float: left;background: pink;border: 1px solid red;width: 100px;height: 100px;
}

浮动元素的左(右)外边界不能超出其父元素的左(右)内边界。

在不设置margin为负值和父元素还有剩余空间的情况下,浮动元素的外边界(margin)不会超出父元素的内边界(padding)

<div class="super"><div class="sub1"></div><div class="sub2"></div>
</div> .super{margin: 0 auto;padding: 10px;border:1px solid blue;width: 300px;
}.super:after{clear: both;content: '';display: block;
}.sub1{float: left;background: pink;border: 1px solid red;width: 100px;height: 100px;
}.sub2{float: right;background: pink;border: 1px solid red;width: 100px;height: 100px;
}

浮动元素不会重叠。

这个也是在margin不会为负值和父元素还有剩余空间的条件下适用的。
这个是我对《CSS权威指南》中浮动这一章节中规则二和规则三的理解,以下是原文。

2.The left (or right) outer edge of a floated element must be to the right (or left) of the right (left) outer edge of a left-floating (or right-floating) element that occurs earlier in the document’s source, unless the top of the later element is below the bottom of the former.

3.The right outer edge of a left-floating element may not be to the right of the left outer edge of any right-floating element to its right. The left outer edge of a right- floating element may not be to the left of the right outer edge of any left-floating element to its left.

这两个规则是保证两个浮动元素不重叠的基础。

表现为当一个浮动元素往左(右)靠的时候,在这个元素左(右)边已经存在一个浮动元素,他们不会重叠,后来者紧挨着先来者排列。如果浮动元素们的总宽度已经超过父元素的宽度,浮动元素之间也不会重叠,依照HTML结构的顺序,从在一行排列不下的浮动元素开始会移动到下一行。

例子戳这里!

浮动元素的顶端不能比其父元素的内顶端更高,不能比之前出现的浮动元素顶端高。

这个规则也是在margin-top不为负值的情况下成立。

父元素的顶端会限制浮动元素,防止一直浮动到页面顶端。
对于下图右边的例子,sub2sub1下面,sub1右边的空间已经不足以容纳sub2,但是足够容纳sub3,而sub3没有上浮,那是因为他的的顶端就不能超过sub2的顶端,这个例子足以印证浮动元素的顶端不能比之前出现的浮动元素顶端高

例子戳这里!

清除浮动

清除浮动的目的是为了解决高度塌陷的问题,撑开浮动父元素。常用的一般有几种方法:

增加一个样式为clear:both的空标签

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

把上面这句标签放到浮动元素的父元素的最后。

原理:clear会在元素的margin-top之上增加一个清除区域(clearance),这个区域会在元素的margin-top上增加额外间隔,并且不允许浮动元素进入这个区域。

  • 优点:方便,兼容性强。

  • 缺点:多出许多无意义的标签,增加维护成本,而且稍不注意中间多了个空格会产生一段空白高度。

父元素设置浮动

优点:简单,代码少,浏览器支持好。
缺点:父级使用浮动之后,浮动造成的影响仍旧存在,并且不可能父级往上一级级都使用浮动。

使用overflowzoom属性

.fix{overflow:hidden(auto、scroll); zoom:1;
}
  • 优点:代码简洁,兼容性好,不产生多余标签。

  • 缺点:设置该fix类的标签的内容超出该标签的时候会被隐藏(或产生滚动条)。

父元素设置浮动

优点:简单,代码少,浏览器支持好。
缺点:父级使用浮动之后,浮动造成的影响仍旧存在,并且不可能父级往上一级级都使用浮动。

父元素设置position

原理:在position的值不为relativestatic的情况下,会形成BFC。

这种方式在父元素原本就需要设置positionfixed或者absolute的时候可以优先采用。

优点:简单,代码少,浏览器支持好。
缺点:改变父元素布局,影响整体布局。

使用:after

.fix:after{display:block; content:''; clear:both;
}

原理类似添加新的标签然后设置clear:both;,但使用伪类的方法没有多余标签。

  • 优点:代码简洁,兼容性好,不产生多余标签。

以上方法中,第一种增加一个样式为clear:both的空标签的方法不建议使用,会增加无意义标签,其他设置父元素浮动,改变父元素positionoverflow的方法依情况而定,如果父元素本身就有这方面的样式需求,那很合适,如果没有的话还是采用最后一种伪元素的:after的方式最为常见。

总结

关于浮动的学问还有更可深入的空间,这篇博客也只是对自己学习的成果起到梳理作用,对于浮动在各场景产生的影响,需要大量的实践去累积去体会,才能深刻掌握float,在日后有新的认识的时候会再回来更新,如有不同见解也欢迎大家前来指正。

参考

  • 《CSS权威指南》

  • CSS float浮动的深入研究、详解及拓展(一) by 张鑫旭

  • CSS float浮动的深入研究、详解及拓展(二) by 张鑫旭

浮动(Floats)原理与清除浮动相关推荐

  1. Web前端入门学习(5)——浮动原理及清除浮动

    浮动原理及清除浮动 上节回顾 在上节的<Web前端入门学习(4)-- 块级元素和行内元素之特征与转换>中(http://cherry360.blog.51cto.com/12176744/ ...

  2. 0基础快速入门CSS技术栈(6)—图解详细阐述说透CSS的浮动及应用、浮动的扩展及清除浮动和详解快速·1photoshop切图(附详细案例源码解析过程)2021-01-07更新

    文章目录 1. 浮动(float)重点提炼 2. CSS 布局的三种机制 3. 为什么需要浮动? 3.1 example01 4. 什么是浮动(float) 4.1 作用 4.1.1 example0 ...

  3. 清除浮动-双伪元素清除浮动(HTML、CSS)

    清除浮动-双伪元素清除浮动(HTML.CSS) <!DOCTYPE html> <html lang="en"><head><meta c ...

  4. CSS浮动/常见网页布局/清除浮动/学成在线案例

    CSS 04 1. 浮动(float) 1.1 传统网页布局的三种方式 网页布局的本质--用 CSS 来摆放盒子. 把盒子摆放到相应位置. CSS 提供了三种传统布局方式(简单说,就是盒子如何进行排列 ...

  5. css为什么要用浮动_3种CSS清除浮动的方法

    点击上方 "前端技术精选" 关注,星标或者置顶 12点00分准时推送,第一时间送达 作者:html中文网 | 编辑:前端妹 来源:html.cn/web/css/19613.htm ...

  6. 浮动的概念作用特点产生浮动的原因和清除浮动的方法

    一.浮动的概念: 什么是浮动(float)? 概念:元素的浮动是指设置了浮动属性的元素会脱离标准普通流的控制移动到指定位置. 浮动float,CSS 提供了 3 种机制来设置盒子的摆放位置,分别是普通 ...

  7. 什么是浮动、为什么要清除浮动

    什么是浮动 在了解什么是浮动之前我们先了解一下html元素在普通流排列方式.在普通流中,元素是按照它在 HTML 中的出现的先后顺序自上而下依次排列布局的,在排列过程中所有的行内元素水平排列,直到当行 ...

  8. css 《浮动原理和清除浮动》

    上代码: /*浮动带来的一下几种影响:浮动元素排版超出了其父级元素(.topDiv), 父元素的高度塌缩:若没有文字高度的支撑,不考虑边框,父级元素高度会塌缩成零.(下面元素窜上去) 浮动元素甚至影响 ...

  9. CSS基础必备盒模型及清除浮动

    盒模型 盒模型是有两种标准的,一个是标准模型,一个是IE模型. css如何设置两种模型 这里用到了CSS3 的属性 box-sizing /* 标准模型 */ box-sizing:content-b ...

最新文章

  1. evt参数是干啥用的_http连接池中非常关键的两个参数,到底是干啥用的?
  2. ELK(+Redis)+LogAnalyzer解决企业日志问题
  3. php smtp验证,php通过smtp验证登陆
  4. ios 在UIView上画图,线条
  5. 双极结型三极管的结构、特性、参数
  6. CVPR 2020 论文大盘点-目标检测篇
  7. python递归查找值返回_python – 从树递归中返回值列表
  8. Markdown语法(一)标题段落分割线
  9. font-spider(字蛛) 让页面引入中文web字体
  10. Python-os.mkdir() 方法
  11. soapui生成java客户端_用soapUI生成客户端代码
  12. BMP、GIF、TIFF、PNG、JPG和SVG格式图像的特点
  13. Android Studio配置ADB环境变量
  14. 2020-05-28
  15. 批量修正字幕乱码(powershell)
  16. 用中文日淘:“日亚”的近85万件商品进驻亚马逊中国
  17. 蓝桥杯 算法训练 无聊的逗
  18. python输入三角形三条边长_python问题:输入三角形的三条边a,b,c,判断此三边是否可以构成三角形。等边、等腰、直角三角形?...
  19. 远程访问MySql数据库的方法
  20. kettle(4.1 TSV文件的抽取)

热门文章

  1. pdf阅读器(福昕pdf阅读器电脑版)免安装pjb
  2. VAPS XT航空仪表开发第一节
  3. 单片机系统:使用lodepng解码png图片
  4. uniapp商城前端源码下载/uniapp多店铺PHP商城源码下载
  5. E.03.22 Learning Apps Have Boomed in the Pandemic. Now Comes the Real Test.
  6. unity 之 Particle 一
  7. 物联网操作系统HelloX V1.85发布公告
  8. 激光打印机的原理、碳粉分类
  9. Python 计算 瑞幸和星巴克 谁的门店最多
  10. 粒子炫酷黑个人页源码