一、浮动
1、网页的布局方式
(1)标准流(文档流)排版
- 块级元素垂直排版;
- 行内和行内块级是水平排版;
(2)浮动流排版
- 是一种 半脱离标准流 的排版方式;
- 浮动流只有水平排版,设置相对于父级元素的左对齐或者右对齐,没有 center,不可以使用 margin:0 auto;
- 浮动流不区分块级和行内元素,更类似于行内块级元素的特点,即可水平排版又可以设置宽高;
(3)定位流排版
2、浮动(float)
(1)浮动元素脱标
- 定义:浮动的元素脱离标准流,像是从标准流里被删除了一样;
- 影响:会造成元素的覆盖问题;
(2)浮动元素排序规则
- 相同方向,先浮动的在前;
- 不同方向,左浮找左,右浮找右;
- 元素浮动后的位置与浮动前的位置相关:浮动前在第几行浮动后就在第几行,这里的浮动前的位置是在前面的元素都浮动之后的位置;
- 浮动是有顺序的浮动;
(3)浮动贴靠和字围现象
- 贴靠:父元素的宽度不够,浮动元素会逐级往上贴靠,都不够放的话,会一直贴到最上级的父元素;
- 字围:浮动元素不会覆盖文字,文字会自动围绕在浮动元素的周围;
(4)浮动在网页排版的应用
- 网页的排版:垂直方向标准流,水平方向浮动流;
- 网页的排版练习
二、清除浮动
--浮动前
--浮动后
1、清除方式一
(1)浮动元素的高度问题
- 标准流中内容可以撑起父元素的高度;
- 浮动流中内容无法撑起父元素的高度;
(2)方式一:给前面的盒子设置高度(少)
2、清除方式二
(1)给后面的盒子设置 clear 属性;
(2)clear 的属性值:
- none 默认:左浮找左,右浮找右;
- left:不找前面的左浮;
- right:不找前面的右浮;
- both:不找前面的浮动;基本都用这个;
(3)clear 导致的 margin-top 失效
- margin-top 如果是相对于父元素的,则必须要为父元素设置边框才有效;
- 前一个盒子的元素都浮动之后,前面的元素就可以看作没了,此时设置的 mt 是相对与 body 的,而不是前一个盒子的,而 body 又没有边框,所以 mt 无效;
3、清除方式三:隔墙法(少)
(1)外墙
- 实质就是在两个盒子的中间加一个块级元素,然后给这个块级元素设置 clear both;
- 带来的问题:后面盒子的 mt 可以用,而前面盒子的 mb 不能用;
- 解决:通常 mt 和 mb 都不用,直接给中间的块级元素设置高度;
(2)内墙
- 实质是在前面一个盒子的最后一个子元素的后面添加一个块级元素,然后 clear both;
- 这种方法 mt、mb和给添加的块级设置 height 都是可行的;
- 内墙可以撑起前一个盒子的高度,而外墙不可以;
4、清除方式四
(1)伪元素选择器:在指定的元素之前或者之后添加一个元素
(2) 伪元素选择器清除浮动
5、清除方式五
(1)overflow:hidden 清除浮动
(2)overflow:hidden的其他作用
- 裁剪掉超出标签的内容;
- 父子元素,子元素设置 mt 无效的问题,可以在父元素设置overflow;
6、总结
- clear(后一个盒子加)、overflow(前一个盒子加)和 伪元素选择器用来清除浮动比较多
7、练习:网易注册界面的实战*
三、定位
1、相对定位
(1)position:relative;
(2)定义:相对于自己以前在标准流中的位置来移动,不会脱标;
(3)使用:结合 top bottom left right 来使用;
(4)注意:
- 相对定位水平和垂直的方向上只能选择一个,如:有 left 就没有 right;
- 区分块级和行内元素;
- 给相对定位的元素设置margin 和 padding 都是对原来的位置起作用,而不是移动后的位置;
- 相对定位中原来的位置极其重要;
(5)应用:位置的微调;结合绝对定位来使用;
2、绝对定位
(1)position:absolute;
(2)概念:相对于 body 来定位
(3)注意:
- 绝对定位是脱标的,且不区分行内和块级;
- 结合 top 等来使用;
- 绝对定位的参考点默认是body,如果祖先元素中有定位流元素,则以该元素为参考点,如果祖先中存在多个定位流则就近原则,这里的静态流不含 static;
- body 作为参考点是以当前的显示页面作为参考,而不是以整个页面作为参考;
- 绝对定位会忽略祖先元素的padding;
(4)和相对定位的配合使用:
- 单用相对定位的局限:会占用标准流的空间;
- 单用绝对定位的局限:受浏览器宽高的影响;
- 配合使用解决以上的局限:使用方法:子绝父相;
(5)绝对定位的水平居中:left:50%;margin-left:-元素宽度的一半(用 margin:0 auto 是无效的);
3、固定定位
(1)position:fixed;
(2)作用:让元素不随滚动条的滚动而滚动;相对与网页的可视部分固定;
(3)特点:脱标;不区分行内和块级;
4、静态定位
(1)元素默认就是静态定位;
(2)元素都有一个 z-index属性,默认值为 0;
(3)z-index 属性是用来控制定位流的覆盖关系的,谁大谁在上面;
(4)默认情况,定位流会覆盖标准流;后面的定位流会覆盖前面的定位流;
(5)在设置了z-index 属性的条件下,谁大谁在上;
(6)z-index 的从父现象:在父元素没有设置 z-index 的前提下,谁的 z-index 大谁在上,在父元素设置了 z-index 的前提下, 父级的 z-index 大,谁就在上;
5、补充text-align、line-height和vertical-align
(1)text-align:只对文字图片和 a 标签有效;
(2)line-height:居中效果只对文字和图片有效(包含标签中的文字和图片);
(3)vertical-align:针对 inline 元素有效,将 display 设置为 table-cell 也是有效的;