是什麼
粘性定位position sticky
元素採用正常的文件流佈局(static
),當其邊框(border矩形)相對於最近的滾動祖先元素的內邊框(即content矩形)的小於指定閾值時,則position sticky
元素相對於該最近的滾動祖先元素固定位置。
怎麼用
要實現粘性定位除了指定position: sticky;
外還需指定閾值,即水平滾動必須指定left/right
,垂直滾動必須指定top/bottom
。
如:
.some-component{
position: sticky;
top: 0px;
}
粘性定位position sticky
可用於實現一些“吸頂”效果
進階
閾值怎麼計算的
比如:
.sticky-btn{
position: sticky;
top: 10px;
}
則表示.sticky-btn
元素的上border矩形邊框距離滾動容器的上內邊框(即content矩形)邊的距離小於10px
時,則元素固定位置。
多個sticky
元素
- 在一個滾動容器裡可以存在多個有效的
sticky
元素,sticky
元素之間的行為互相獨立; sticky
元素屬於定位元素,當多個sticky
元素髮生重疊時遵循定位元素的重疊原則。
其他
- 失效的
sticky
元素行為同relative
定位。
失效的sticky
元素
初次使用position: sticky;
總是發現沒有達到效果,常見的原因有:
- 水平滾動時檢查是否指定
left/right
; - 垂直滾動是檢查是否指定
top/bottom
; sticky
元素的某個父元素(或者祖先元素)指定了overflow/overflow-x/overflow-y
屬性,且取值是hidden/scroll/auto
;sticky
元素的父元素(不是祖先元素)在滾動元素視口裡還不可見。
可以看看這個Demo
相容性
Can I Use CSS position: sticky
As of 2020, 95% of browsers have some level of support forposition: sticky
Older versions of Safari will require the -webkit vendor-prefix
一般這樣寫:
position: -webkit-sticky;
position: sticky;
降級方案(polyfill)
如果非得要相容各個瀏覽器,則得使用JS實現了。好在已經有很多優秀的庫了:
參考
整理自GitHub筆記: 解析position: sticky;
。