CSS使用position:sticky 實現粘性布局


簡介

前面寫了一篇文章講解了position常用的幾個屬性:《CSS 屬性之 position講解》
一般都知道下面幾個常用的:

{ position: static; position: relative; position: absolute; position: fixed;
}

在https://developer.mozilla.org/zh-CN/docs/Web/CSS/position還說了下面這三個值:

/* 全局值 */ position: inherit; position: initial; position: unset;

 

估計大部分都沒有用過position:sticky吧。這個屬性值還在試驗階段。怎樣描述它呢?

sticky:對象在常態時遵循常規流。它就像是relativefixed的合體,當在屏幕中時按常規流排版,當卷動到屏幕外時則表現如fixed。該屬性的表現是現實中你見到的吸附效果。

 常用場景:當元素距離頁面視口(Viewport,也就是fixed定位的參照)頂部距離大於 0px 時,元素以 relative 定位表現,而當元素距離頁面視口小於 0px 時,元素表現為 fixed 定位,也就會固定在頂部。

代碼:

{ position: -webkit-sticky; position: sticky; top: 0;
}

如下圖表現方式:

距離頁面頂部大於20px,表現為 position:relative;

距離頁面頂部小於20px,表現為 position:fixed;

運用 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代碼:

.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推薦的標准。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM