文章

CSS属性sticky, scroll-snap, overscroll-behavior

粘性定位 sticky

1
2
3
element {
  position: sticky;
}
  • 粘性定位是fixed和relative的合体版本
  • 当元素处于视窗可视区内时:粘性定位呈现和relative一样的效果
  • 当元素要离开可视区时:粘性定位会呈现出fixed的效果
  • 给粘性定位添加top,bottom改变属性切换的临界值
    • 默认为0,即元素离开可视区时会变为fixed
    • 如果添加了比如top: 100px,则元素在距离视窗100px时切换状态
  • 与fixed不同的是,sticky可以依据父元素的范围进行定位,不总是依照整个屏幕定位

⭐️tips: 粘性定位时,父元素不可以有除了overflow:auto之外的设置,不然会破坏文档流的滚动,导致sticky失效。

滑动吸附 scroll-snap

scroll-snap类的css属性可以实现滑动时的吸附效果,让滚动区域内的元素总是停在开始、中间或结束的位置,可以拿这个属性用css做轮播图的效果

scroll-snap-type: decoration mode

  • decoration: 第一个属性,决定了滚动定位的方向
    • none:无效果
    • x:水平防线
    • y:垂直方向
    • block:和block元素排列方向一致,默认文档流下是垂直方向
    • inline:和inline元素排列方向一致,默认文档流是水平方向
  • mode: 第二个属性,可选属性,决定了定位的准确度
    • mandatory:强制定位,无论视窗大小和元素的增删,强制将元素定位到合适位置
    • proximity:大约,不咋用

scroll-snap-align

它设置在滚动区域的子元素上,决定了定位时是哪一边和容器对齐(或者在容器中居中)

  • none::无效果
  • start:起始位置
  • end:结束为止
  • center:居中

⭐tips:它还支持同时设置两个元素 scroll-snap-align: start end; 此时,第一个属性表示block方向,第二个属性表示inline方向

🚫scroll-snap-stop(目前没有浏览器支持,不能用)

它决定了是否可以忽略捕获位置

  • normal:默认值,可以忽略,即可以一次滑动多个元素,到最后一个元素再根据scroll-snap-align做吸附
  • always:不能忽略,即一次只能滑动一个元素,滑动过程中不会忽略任何一个捕获位置,只要遇到一个捕获位置就会直接吸附

滚动链 overscroll-behavior

它可以禁止滚动链。 比如:滑动一个列表,总是不小心触发下拉刷新时,可以用overscroll-behavior: contain

滚动链:默认情况下,当触及页面顶部或者底部时(或者是其他可滚动区域),移动端浏览器倾向于提供一种“触底”效果,甚至进行页面刷新。你可能也发现了,当对话框中含有可滚动内容时,一旦滚动至对话框的边界,对话框下方的页面内容也开始滚动了——这被称为“滚动链”。

  • auto:默认效果
  • contain:禁止滚动链
  • none:禁止滚动边界的特效,比如惯性回弹效果
本文由作者按照 CC BY 4.0 进行授权