技术交流QQ群:1027579432,欢迎你的加入!
1.为什么需要浮动(float)?
- 反问1:如何让多个块级盒子div水平排列成一行?
目标效果.png - 标准流比较难以实现,虽然将块级元素转换为行内块元素可以实现一行显示,但是它们之间会产生大的空白间隙,间隙的宽度很难人为控制。
- 反问2:如何实现下面两个盒子的左右对齐?
目标效果.png - 总结:有很多的布局效果,标准流没有办法完成,此时就可以利用浮动完成布局。因为浮动可以改变元素标签默认的排列方式。
- 浮动最典型的应用:可以让多个块级元素在一行内排列显示。
- 网页布局第一准则:多个块级元素纵向排列找标签流,多个块级元素横向排列找浮动。
2.什么是浮动?
- float属性用于创建浮动框,将其移动到一边,直到左边缘或右边缘触及包含块或另一个浮动框的边缘。
- 语法规范:
选择器 { float: 属性值; }
浮动属性值.png
3.浮动特性[重难点]
- 加了浮动后的元素,会具有很多新的特性,需要我们掌握。
- 3.1浮动元素会脱离标准流(脱标);
- 3.2浮动的元素会在一行内显示并且元素顶部对齐;
- 3.3浮动的元素会具有行内块元素的特性;
3.1浮动元素会脱离标准流(脱标)
- 设置了浮动float的元素最重要的特性:
- a.脱离标准普通流的控制(浮)移动到指定位置(动),简称脱标;
- b.浮动的盒子不再保留原先的位置;
-
浮动特性的形象化解释:
形象化解释1.png
形象化解释2.png
具体解释.png
3.2浮动的元素会在一行内显示并且元素顶部对齐
- 如果多个盒子都设置了浮动,则它们会按照属性值一行内显示并且顶端对齐显示。
浮动的元素会在一行内显示并且元素顶部对齐.png - 注意:浮动的元素是互相贴在一起的(不会有间隙的),如果父级宽度装不下这些浮动的盒子,多出来的盒子会另起一行对齐。
3.3浮动的元素会具有行内块元素的特性
- 浮动元素具有行内块元素特性;
- 任何元素都可以浮动,不管原先是什么模式的元素,添加完浮动之后具有行内块元素相似的特性。
- 如果块级盒子没有设置宽度,默认宽度和父级宽度一样宽,但是加了浮动后,它的大小根据具体内容来决定;
- 浮动的盒子中间是没有空隙的,是紧挨在一起的;
- 行内元素同理;
4.浮动元素经常搭配标准流的父级元素搭配使用
- 为了约束浮动元素位置,网页布局一般采取的策略是:先用标准流的父元素排列上下位置,之后内部子元素采取浮动排列左右位置。符合网页布局第一准则。
浮动元素经常搭配标准流的父级元素搭配使用.png - 网页布局的第二准则:先设置盒子的大小,之后再设置盒子的位置。
5.常见网页布局
-
常见的网页布局如下:
网页布局1和2.png
网页布局3.png
6.浮点的两个注意点
6.1 浮动和标准流的父盒子搭配使用
- 先用标准流的父元素排列上下位置,之后内部子元素采用浮动排列左右位置。
6.2 一个元素浮动了,理论上其余的兄弟元素也要浮动
- 一个盒子里面包含多个子盒子,如果其中一个盒子浮动了,那么其他兄弟盒子也应该浮动,从而防止引起问题。
- 浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流。
7.前面浮动元素有一个标准流的父元素,它们有一个共同的特点都是有高度的。但是,所有的父盒子都必须有高度吗?
-
答:不是。例如下面的网页:
示例1.png
示例2.png - 解决方法:理想中的状态,让子盒子撑开父盒子,有多少孩子,我的父盒子就有多高。
8.为什么需要清除浮动?
- 由于父级盒子在很多情况下,不方便设置高度。但是,子盒子浮动又不占有位置,导致父级盒子高度为0时,最终会影响下面区域的标准流盒子。由于浮动元素不再占用原文档流的位置,所以它会对后面的元素排版产生影响。
原因分析.png
9.清除浮动的本质
- 清除浮动的本质就是清除浮动元素造成的影响。
- 如果父盒子本身有高度,则不需要清除浮动。
- 清除完浮动后,父级盒子就会根据浮动的子盒子自动检测出高度。父级盒子有了高度,就不会影响下面区域中的标准流了。
- 语法格式:
选择器 { clear: 属性值; }
常见的属性值.png
- 在实际开发中,常用到的是clear: both;
- 清除浮动的策略是:闭合浮动。
10.清除浮动方法
- 常用方法如下:
- 额外标签法也称为隔墙法,是W3C推荐的做法;
- 父级盒子添加overflow属性;
- 父级盒子添加after伪元素;
- 父级盒子添加双伪元素;
10.1 清除浮动之额外标签法
- 额外标签法也称为隔墙法,是W3C推荐的做法。
- 额外标签法会在浮动元素末尾添加一个空的标签。例如<div style="clear:both;"></div>,或者其他标签(如<br/>等)。
- 优点:通俗易懂,书写方便;
- 缺点:添加许多无意义的标签,结构化较差;
- 注意:要求这个新的空标签必须是块级元素!
10.2 清除浮动之父元素添加overflow
- 可以给父级元素添加overflow属性,将其属性值设置为hidden、auto、scroll。
- 子不教父之过,注意是给父级元素添加代码!
- 优点:代码简洁;
- 缺点:无法显示溢出的部分;
10.3 清除浮动之:after伪元素法
- :after方式是额外标签法的升级版本,也是给父级元素添加。
- 语法格式:
.clearfix:after { content: ""; display: block; height: 0; clear: both; visibility: hidden; } .clearfix { /* IE6、7专有 */ *zoom: 1; }
- 优点:没有增加标签,结构更简单;
- 缺点:照顾低版本浏览器;
- 代表网站:百度、淘宝、网易等常用的清除浮动方法;
10.4 清除浮动之双伪元素法
- 给父元素添加!
- 语法格式:
.clearfix:before, .clearfix:after { content: ""; display:table; } .clearfix:after { clear: both; } .clearfix { /* IE6、7专有 */ *zoom: 1; }
- 优点:代码更简洁;
- 缺点:照顾低版本浏览器;
- 代表网站:小米、腾讯等常用的清除浮动方法;
11.清除浮动总结
- 为什么需要清除浮动?
- 父级盒子没有设置高度;
- 子盒子浮动了;
- 影响下面的布局,此时就需要清除浮动了;
- 清除浮动的常用方法
清除浮动的常用方法总结.png