[CSS全解]CSS定位
本文章资料主要来自饥人谷2020版前端体系课,本文为课程笔记。
布局 vs 定位
布局是基于平面空间的二维坐标,定位基于垂直于屏幕的三维坐标。
文档流与盒模型
之前我们知道,文档流(Normal Flow)正常从上到下,从左到右根据盒模型依次排列,但是一个盒模型其实有多个图层,从下到上依次为:
- background
- border
- 块级子元素
- 浮动元素
- 内联子元素(文字内容)
通过上面的模型,可知浮动元素脱离文档流,就是从第三层的块级子元素变为了第四层的浮动元素。
position属性
position属性值static默认值,元素在文档流中relative相对定位,元素图层上浮,但不脱离文档流absolute绝对定位,基于父级元素position属性值为非static进行定位fixed固定定位,定位基准为viewportsticky粘滞定位
- 经验
absolute与relative结合使用position值为absolute或fixed时,添加top或left属性sticky兼容性较差,面试时可以提到
position: relative;
- 使用场景
- 用于做位移(很少使用)
- 用于做于
position: absolute;元素的父级元素
- 配合
z-index属性z-index: auto;默认值,不新建层叠上下文z-index: 0/1/2;图层排列顺序,数字越大图层越靠上z-index: -1/-2;图层排列顺序,数字越小图层越靠下
- 经验
- 不推荐
z-index: 9999; - 学会管理
z-index
- 不推荐
position: absolute;
- 使用场景
- 元素脱离原来的位置,另起一层,比如对话框关闭按钮
- 鼠标提示
- 配合
z-index - 经验
- 不是相对于
relative进行定位的,是相对于父类元素最近一个定位元素(position属性值为非static的元素)进行定位的 - 某些浏览器如果没有
top/left属性位置会错乱 - 善用
left: 100%/bottom: 100% - 善用
left: 50%,并添加负外边距
- 不是相对于
position: fixed;
- 使用场景
- 广告
- 回到顶部按钮
- 配合
z-index - 经验
- 移动端最好不要使用,bug较多
- 可以搜索关键字”移动端fixed”
position: sticky;
- 使用场景
- 导航
- 注意
- can i use上一片红。。。
层叠上下文
当内部元素设置
position等属性时,会浮动到外部元素最上方,并且z-index: 0;当内部元素的
z-index为负数时,会位于外部元素background下方但此时的
z-index仍作用在当前层叠上下文中层叠上下文(堆叠上下文)
z-index只作用在当前层叠上下文中- 每一个层叠上下文就是一个新的作用域
- 当前作用域的
z-index与其他作用域无关 - 处在同一作用域的
z-index才能进行比较 - 那些属性可以创建层叠上下文
- MDN
- 重点属性
z-index/flex/opacity/transform