跳转到内容

粘性定位

刀刀

1/3/2025

0 字

0 分钟

粘性定位是 CSS 一个好用的属性方法,当为元素设置粘性定位后,该元素即将被滑动出屏幕外时会固定在边缘,使用方法如下:

css
dd {
  position: sticky;
  top: 0;
}

那么,粘性定位的深层次逻辑是什么呢? top: 0 可以不设置么?为什么设置之后就能固定到屏幕顶部了呢?

想要了解粘性定位的底层概念,需要先了解两个概念:

  • 包含块
  • 最近可滚动元素

包含块是 CSS 最重要的知识之一,它的概念很大,这里不做过多赘述,后面考虑开新坑。最近可滚动元素是以自身为起点,一直查找可滚动的父元素。

何为可滚动元素,设置了 overflow: srcoll 等方法都是可滚动元素。因此一直查看父标签是否是可滚动元素,如果都不是,那么最后会找到整个视口。

设置了粘性定位 top: 0 的元素在没接触到最近可滚动的元素(也就是视口)时是正常滚动的;但是当它接触到视口的顶部时,就会吸附到视口的顶部。

即使吸附了,其他元素当它还在原来的位置,因此不会影响其他元素的正常排列。

最后如果该元素触碰到父元素(即包含块)的边缘,继续滚动就不会再吸附,而是被带离视口区域。

往回滑动则会重新保持吸附的状态。

最后如果回滑到它原本的位置,则会恢复成原来的样子,跟随视口滑动而滑动。

最后总结一下,粘性定位的元素实际上参考了很多元素,和做了很多处理,主要参考最近可滑动的元素、包含块以及自身。