position属性是CSS控制元素位置的核心机制,决定元素是否脱离文档流及参照系:static不脱离且无效偏移;relative保留占位并相对自身原位偏移;absolute脱离流并相对最近非static祖先定位;fixed脱离流并相对视口固定;sticky介于relative与fixed之间,滚动触发粘性效果。
position 属性是 CSS 中控制元素位置的核心机制,它决定元素如何脱离或保持在文档流中,以及以谁为参照点来摆放自己。理解它,就掌握了页面布局的主动权。
默认情况下,元素按 HTML 顺序从上到下、从左到右自然排列(即“文档流”)。position 的作用不是简单地“移动”,而是改变元素的定位上下文和空间占用行为:
static(静态定位)
所有元素的默认状态。不脱离文档流,top/right/bottom/left 和 z-index 完全无效。无需写,写了也等于没写。
relative(相对定位)
元素仍在文档流中,保留原始占位;偏移量(如 top:20px)是相对于它本来该在的位置。常用于微调、或作为 absolute 子元素的定位容器。
absolute(绝对定位)
完全脱离文档流,不占空间;定位起点是最近的非 static 父元素(即设置了 relative/absolute/fixed/sticky 的祖先)。若没有这样的父级,则以 body 为基准。
fixed(固定定位)
脱离文档流;定位始终以浏览器视口(viewport)为基准,滚动页面时位置不变。适合返回顶部按钮、悬浮客服等。
sticky(粘性定位)
行为介于 relative 和 fixed 之间:初始按 normal 流排布,当滚动到指定阈值(如 top:0)时,“粘住”在视口某处,直到其父容器离开视口才解除。常用于表格表头、侧边导航锚点。
这四个属性只有在 position 值为 relative / absolute / fixed / sticky 时才起作用。它们不是“往某个方向走多少”,而是定义元素边界到参照系对应边的距离:
只有定位元素(即 position 不为 static)才能使用 z-index。数值越大,越靠近用户(压在其他元素上面)。注意:
z-index 只在同一个定位上下文中比较才有意义——不同父容器里的 absolute 元素,即使子元素 z-index 很高,也可能被父容器层级压制。