CSS定位和层叠上下文
补充代码
1. :hover 鼠标经过时的效果,开发者工具选择:hover后才能看到效果
2. white-space:nowrap 文字内容不准换行
定位
布局和定位的区别
- 布局是屏幕平面上的一维上下左右
- 定位是垂直于屏幕的
盒模型层叠关系
- border在文字的下面
- 背景在border下面
浮动脱离文档流
- 相较于文档流让元素浮动起来
- Z轴上浮了一点,但盒内容依旧在最上层
position
- 属性
- static 默认值 待在文档流内
- relative 相对定位,升起来,但不脱离文档流
- absolute 绝对定位,定位基准是祖先里的非static,不是只有relative才能做基准
- fixed 固定定位,定位基准是viewport(可视窗口)
- sticky 粘滞定位,黏在屏幕可视窗口边缘
position:relative
-
场景
- 位移(很少)
- 给absolute做父亲
-
配合z-index 默认是auto,不创建层叠上下文
-
学习到的经验
- 写z-index:9999的都不太理解这个代码
- 学会管理z-index
position:absolute
-
场景
- 脱离原来的位置,另起一层,比如关闭按钮以及对话框的某个按键
- 鼠标提示 (PS::hover 鼠标经过时的效果,开发者工具选择:hover后才能看到效果)
-
配合z-index
-
学习到的经验
- absolute是相对于祖先元素中最近的一个定位元素定位的(除默认static)
- 某些浏览器如果不写top/left会出现位置错乱的bug,建议写上
- 善用left:100%
- 善用left:50%,加负margin (居中)
position fixed 相对于视口定位
-
场景
- 页面能一直保持在一个位置的广告
- 回到顶部按钮
-
配合z-index
-
学习到的经验
- 手机端尽量不要用这个定位,坑很多
- 问题详情搜索移动端fixed
- 父盒子最好不要有transform属性,会出问题
position sticky 粘滞定位
-
场景
- 页面导航栏,希望一直显示在上方的栏
-
学习到的经验
- 有一定的兼容问题,用之前查一查浏览器兼容性的问题
层叠上下文
z-index
-
z-index=正数 则该盒子在层叠上下文的上层
-
z-index=负数 在层叠上下文的下面(背景之下)且没有逃逸出层叠上下文
层叠上下文
- 每一个层叠上下文就是一个新的小世界(作用域)
- 这个世界的z-index跟外界无关
- 只有处在同一个小世界的z-index才能相比较
哪些属性可以创建层叠上下文世界
- MDN 查询
- 需要记住常用的有 z-index/flex/opacity(透明度)/transform
- 如果忘记了就搜层叠上下文 MDN
负z-index
- 负的z-index 逃不出小世界