文章目录
浮动
1. CSS布局的三种机制
- 普通流
- 块级元素
- 行内元素
- 浮动
- 定位
2. 什么是浮动
- 浮动的元素会脱离标准流
- 浮动的元素不会撑开父盒子的高度
- 浮动的元素一行可以摆放多个,摆放不下会换行
3. 浮动排列
- 左浮动的盒子靠上靠左排列
- 右浮动的盒子考上靠右排列
- 浮动盒子在包含块中排列时,会避开常规流块盒(浮动会飞,但是能看见地下的)
- 常规流块盒在排列时,无视浮动盒子(块盒在地下,但是看不见会飞的)
- 行盒在排列时,会避开浮动盒子(文字环绕)
- 外边距合并不会发生
如果文字没有在行盒中,浏览器会自动生成一个行盒包裹文字,该行盒叫做匿名行盒。
4. 高度塌陷
- 给父盒子设置高度
- 使用overflow: hidden;
- 清除浮动
- 在盒子后面放一个div,这个div设置 clear: both;属性
- 给高度塌陷的父盒子添加一个伪元素,设置clear: both;属性,伪元素要设置块盒
5. visibility
CSS属性 visibility
显示或隐藏元素而不更改文档的布局
- visible:默认的
- hidden:隐藏元素,只是隐藏不会删除
- collapse:用于table的话是直接删除,相当于display: none; 其他的不是
6. BFC
块级格式化上下文
-
根元素
<html>
-
浮动元素(元素的
float
不是none
) -
绝对定位元素(元素的
position
为absolute
或fixed
) -
行内块元素(元素的
display
为inline-block
) -
表格单元格
-
表格标题
-
匿名表格单元格元素
-
overflow
不为visible
的块元素 -
display
值为flow-root
的元素 -
contain
值为layout
、content
或 paint 的元素 -
弹性元素
display
为flex
-
网格元素
display
为grid
MDN
BFC
上面很详细
定位
1. 定位的属性及特征
-
静态定位:static
- 默认的没有特征
-
相位定位:relative
- 不会影响页面的布局
- 设备边偏移是根据自己本身的位置来设置,设置之后保留之前的位置,也不会影响其他元素
- 会保留原先的位置
-
绝对定位:absolute
- 脱离常规流,并且在浮动之上(之上指Z轴)
- 子绝父相,根据父元素有没有相对定位(除了静态定位的其他定位元素也可以),一直向上层找看是否有定位元素,如果没有就根据浏览器视口设置边偏移
- 一般绝对定位的父级为相对定位,根据父级设置边偏移(给第二条概括)
- 不会保留原先的位置
-
固定定位:fixed
- 根据浏览器视口进行设置偏移量
- 会固定在视口,不管滚轮怎么滚动我就是不改变位置
- 不会保留原先的位置
- 如果当元素祖先的 transform、perspective、filter 或 backdrop-filter 属性非 none 时,偏移量由视口改为该祖先。
-
粘性定位:sticky
- 和固定定位的特征相似
- 固定定位是固定在浏览器视口,粘性定位是固定在父元素
- top、left、right、bottom,必须要设置一个才有效果
- 但是这四个属性的偏移量还是根据浏览器视口设置的,并且不会溢出父元素
- 测试中只有top和left有效果,具体原因还不知道
- 会保留原先的位置
2. 定位元素水平垂直居中
- 在设置宽高的情况下,top、left、right、bottom都为0,margin为auto,就可以居中
- 如果没有宽高,固定和绝对定位会撑满父级元素
3. 层叠上下文
- 创建层叠上下文的元素的背景和边框
- 层叠级别 z-index 为负值的层叠上下文
- 常规流非定位的块盒
- 非定位的浮动盒子
- 常规流非定位行盒
- 任何 z-index 是 auto 的定位子元素,以及 z-index 是 0 的层叠上下文
- 层叠级别 z-index 为正值的层叠上下文
4. display
浮动和定位默认把元素转换为 display: block