fixed失效,sticky来拯救

场景

在文章浏览页面需要实现一个贴在视口右侧的标签,点击标签,出现右侧的抽屉,显示文章的目录(toc)。如下图

fixed2sticky.gif

fixed失效

起初,对于目录标签的元素,直接使用fixed定位即可解决问题。
但是,当在layout组件中使用了framer-motion后,由于包裹组件的元素应用了transform属性,fixed失效了😭😭😂

fixed失效原因

在许多情况下,position:fixed 将会失效。MDN 用一句话概括了这种情况:

当元素祖先的 transform 属性非 none 时,容器由视口改为该祖先
具体可以查看fixed 定位失效 | 不受控制的 position:fixed
实际测试中,不仅仅由于transform属性,还有其他属性也会导致堆叠上下文出现,子孙元素的fixed定位失效。

sticky来救场

由于场景是在滚动时,保持目录标签一直在视口不消失,而sticky正好是滚动场景下适用的属性,所以可以使用sticky来替代fixed。

sticky效果

sticky就像是position:relative和position:fixed的结合体,在为滚动出视口时,sticky元素乖乖不动,而滚动出视口后,sticky元素粘滞在了视口的某个位置(应该是滚动容器的某个位置,该位置也即未滚动出视口的位置)。

sticky如何设置

sticky元素的设置有一些限制条件:

因此,设置如下:

  • 在滚动容器的元素和sticky元素的祖先元素上检查overflow属性的设置;
  • 设置目录标签的元素position:sticky和top值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值