元素定位异常主因是position使用不当,需检查父容器是否创建定位上下文、偏移属性生效条件、文档流状态及z-index层叠关系,并慎用fixed定位。
元素没按预期定位,多数情况是 position 属性使用不当或缺少配合项。光设 position: relative/absolute/fixed 不够,关键还得看父容器、偏移值(top/right/bottom/left)、文档流状态和层叠上下文。

当子元素设 position: absolute 时,它会相对于最近的已定位祖先元素(即 position 值为 relative、absolute、fixed 或 sticky 的父级)进行定位。如果所有祖先都是 static(默认值),那它就相对于初始包含块(通常是视口)定位——这常导致“飞走”现象。
position: relative(通常不改变布局,只创建定位上下文)position 和 offsetParent
top、right 等偏移属性只对 position 值为 relative、absolute、fixed、sticky 的元素起作用。对 static 元素设置它们无效。
relative):偏移基于自身原始位置,原占位仍在文档流中absolute):脱离文档流,不占空间,偏移基于定位上下文边界fixed):相对于视口,滚动不跟随有时元素“看不见”,不是没定位,而是被其他元素遮挡。z-index 只对已定位元素(position != static)有效。
position 和合理的 z-index
opacity 、transform、filter 等也会创建新层叠上下文,影响 z-index 作用范围
outline: 2px solid red,确认是否真的渲染在页面上固定定位元素脱离文档流且相对视口,若页面有横向滚动或缩放,可能视觉错位;另外,在移动端某些浏览器中,键盘弹出可能触发视口重算,导致 fixed 元素跳动。
position: sticky(支持现代浏览器),它在滚动中“粘住”指定位置,行为更可控fixed,避免依赖父容器尺寸计算位置;必要时用 JS 监听 resize 或 scroll 微调