position:fixed 绝对定位“失效”

博客围绕项目中信息窗口缩小后fixed定位失效问题展开。通过调试发现小窗口相对于信息窗口定位,原因是缩小窗口时添加了transform。总结出在带有transform且不为none的元素层级内,position:fixed会“失效”,还提及不确定其他浏览器内核是否有此问题,并记录拓展情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如图所示,项目中有一个信息窗口,现在需要将其缩小,以展示地图全景,如下图所示(没UI就自己画了),这就是大概的效果吧。

首先想到的就是通过绝对定位fixed,在信息窗口缩小时,通过:class绑定样式,让小窗口滑出。

现象:fixed定位失效了!此时的fixed不再是为窗口(Viewport)而定位。

缩小信息窗口的时候,小窗口没有滑出,通过浏览器调试,将信息窗口调出,发现此时的小窗口是相对于信息窗口定位的

why?

这时突然想起以前曾经听过的一句话,fixed并非100%相对于Viewport窗口定位,绝对定位也需要满足一定的条件。

翻阅了一下资料,发现了一句话

fixed 属性会创建新的层叠上下文。当元素祖先的 transform  属性非 none 时,容器由视口改为该祖先。

这就是fixed不将相对于视口定位的条件之一。

所以原因清楚了,就是在我缩小信息窗口的时候给他添加了一个translateX(180px)的transform。

小窗口和信息窗口来自同一组件,因此容器就变为其祖先:信息窗口。

 

总结:在带有transform且不为none的元素层级内,使用position:fixed会"失效"

 

当然,上述现象都是在谷歌浏览器Chrome版本 72.0.3626.109(正式版本) (64 位)上发现的,不确定其他浏览器内核是否存在此问题。

 

-------------------------------------------分割线---------------------------------------------.

拓展:看了伯乐在线的文章,发现还有如下两种情况也会导致fixed定位出现问题,这里先记录一下。

1.perspective 值不为 none 的元素
2.在 will-change 中指定了任意 CSS 属性

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值