前面寫了一篇文章講解了position經常使用的幾個屬性:《CSS基礎篇-- position屬性講解》
通常都知道下面幾個經常使用的:html
{ position: static; position: relative; position: absolute; position: fixed; }
在https://developer.mozilla.org/zh-CN/docs/Web/CSS/position還說了下面這三個值:web
/* 全局值 */ position: inherit; position: initial; position: unset;
估計大部分都沒有用過position:sticky
吧。這個屬性值還在試驗階段。怎樣描述它呢?segmentfault
sticky
:對象在常態時遵循常規流。它就像是relative
和fixed
的合體,當在屏幕中時按常規流排版,當捲動到屏幕外時則表現如fixed。該屬性的表現是現實中你見到的吸附效果。spa
經常使用場景:當元素距離頁面視口(Viewport,也就是fixed定位的參照)頂部距離大於 0px 時,元素以 relative
定位表現,而當元素距離頁面視口小於 0px 時,元素表現爲 fixed
定位,也就會固定在頂部。code
代碼:htm
{ position: -webkit-sticky; position: sticky; top: 0; }
以下圖表現方式:
距離頁面頂部大於20px
,表現爲 position:relative
;對象
距離頁面頂部小於20p
x,表現爲 position:fixed
;blog
position:sticky
實現頭部導航欄固定html代碼:圖片
<div class="con"> <div class="samecon"> <h2>標題一</h2> <p>這是一段文本</p> <p>這是一段文本</p> <p>這是一段文本</p> </div> <div class="samecon"> <h2>標題二</h2> <p>這是一段文本</p> <p>這是一段文本</p> <p>這是一段文本</p> </div> <div class="samecon"> <h2>標題三</h2> <p>這是一段文本</p> <p>這是一段文本</p> <p>這是一段文本</p> </div> <div class="samecon"> <h2>標題四</h2> <p>這是一段文本</p> <p>這是一段文本</p> <p>這是一段文本</p> </div> <div class="samecon"> <h2>標題五</h2> <p>這是一段文本</p> <p>這是一段文本</p> <p>這是一段文本</p> </div> <div class="samecon"> <h2>標題五六</h2> <p>這是一段文本</p> <p>這是一段文本</p> <p>這是一段文本</p> </div> </div>
CSS代碼:get
.samecon h2{ position: -webkit-sticky; position: sticky; top: 0; background:#ccc; padding:10px 0; }
同理,也能夠實現側邊導航欄的超出固定。
須指定 top, right, bottom 或 left
四個閾值其中之一,纔可以使粘性定位生效。不然其行爲與相對定位相同。
top
和 bottom
同時設置時,top
生效的優先級高,left
和 right
同時設置時,left
的優先級高。設定爲 position:sticky
元素的任意父節點的 overflow
屬性必須是 visible
,不然 position:sticky 不會生效
。這裏須要解釋一下:
position:sticky
元素的任意父節點定位設置爲 overflow:hidden
,則父容器沒法進行滾動,因此 position:sticky
元素也不會有滾動而後固定的狀況。position:sticky
元素的任意父節點定位設置爲 position:relative | absolute | fixed
,則元素相對父元素進行定位,而不會相對 viewprot
定位。 position:sticky
的元素表現爲 relative
仍是 fixed
是根據元素是否達到設定了的閾值決定的。這個屬性的兼容性還不是很好,目前還是一個試驗性的屬性,並非W3C推薦的標準。