position是css中的元素定位属性;
position一共有5个值:
- static (默认)
- relative
- fixed
- absolute
- sticky
影响position位置的属性有5个:
- top
- right
- bottom
- left
- z-index
top、right、bottom、left是定位元素的偏移量;
z-index是定位元素的z轴层级,同一位置上,上方定位元素的z-index大于下方的定位元素;
static 正常文档流
默认值,表示没有使用定位,遵循正常的文档流布局,且影响position的5个属性不生效;
relative 相对定位
相对于定位元素当前的位置进行偏移; 偏移量通过设置top、right、bottom、left实现; 定位元素虽然被移动了,但是其所占的空间保持原样不变;
fixed 绝对定位
相对于浏览器窗口进行偏移; 偏移量通过设置top、right、bottom、left实现; 浏览器窗口出现滚动条,页面滚动,定位元素也不会移动; 定位元素脱离正常文档流,不再占用空间;
absolute 绝对定位
区别于fixed,定位元素根据最近的已经定位的父元素position != static进行偏移; 偏移量通过设置top、right、bottom、left实现; 定位元素脱离正常文档流,不再占用空间;
sticky 粘性定位
定位元素基于滚动的位置来定位; 父元素非body时,其父元素的overflow属性必须为visible; 偏移量通过设置top、right、bottom 或 left ,且必须设定一个才会生效; 其定位效果类似于在relative和fixed之间切换; 当滚动位置超过top、right、bottom 或 left,定位元素会表现的像fixed,否则平时就表现的像relative; 页面中的导航栏吸顶交互通常可以使用sticky实现;
注意点
若定位元素的父元素设置了transform属性,且值不是none
当定位元素使用fixed、absolute绝对定位时,则定位元素相对于父元素进行偏移,而不是按原有的方式进行定位偏移; 定位元素使用sticky粘性定位时,在原有表现的relative、fixed上,再受其父元素的transform值的影响; 所以在使用fixed、absolute、sticky定位时,要考虑业务场景中,父元素是否会使用transform属性,以便避免出现预料之外的情况;