1. 程式人生 > 實用技巧 >CSS粘性定位

CSS粘性定位

粘性定位(position:sticky)

  1.定義

    粘性定位可以被認為是相對定位和固定定位的混合。元素在跨越特定閾值前為相對定位,之後為固定定位。(MDN傳送門

    這個特定閾值指的是 top, right, bottom 或 left 之一,換言之,指定 top, right, bottom 或 left 四個閾值其中之一,才可使粘性定位生效。否則其行為與相對定位相同。

  2.流盒概念

    粘性定位中有一個“流盒”(flow box)的概念,指的是粘性定位元素最近的可滾動元素(overflow 屬性值不是 visible 的元素)的尺寸盒子,如果沒有可滾動元素,則表示瀏覽器視窗盒子。

  3.使用時的注意之點

    在css的選擇器裡面直接寫position:sticky就可以了,不再舉例,主要是強調以下幾點:

      (1)粘性元素的位置只相對於第一個有滾動的父級塊元素定位(scrolling mechanism,通過 overflow 設定為 overflow/scroll/auto/overlay 的元素),而不是父級塊元素。codepen示例

      (2)只有當設定對應的方向(top/right/bottom/left),才會有作用,並且可以互相疊加,可以同時設定四個方向。

      (3)即使設定了 position: sticky,也只能顯示在父級塊元素的內容區域,他無法超出這個區域,除非你設定了負數的值。

      (4)position: sticky 並不會觸發 bfc,簡單來講就是計算高度的時候不會計算 float 元素。

      (5)當設定了 positi on: sticky 之後,內部的定位會相對於這個元素(codepen示例

      (6)雖然 position: sticky 表現的像 relative 或者 fixed,所以也是可以通過 z-index 設定他們的層級。當這個元素的後面的兄弟節點會覆蓋這個元素的時候,可以通過 z-index 調節層級。(codepen示例

      (7)粘性佈局元素的父級元素在可視範圍內,該元素的佈局為relative,反之,則為fixed

  4.開發例項

    (1)堆疊效果

      堆疊效果(stacking)指的是頁面滾動時,下方的元素覆蓋上方的元素。下面是一個圖片堆疊的例子,下方的圖片會隨著頁面滾動,覆蓋上方的圖片(檢視 demo)。

    (2)表頭鎖定

      大型表格滾動的時候,表頭始終固定,也可以用sticky實現(檢視 demo)。

      PS:需要注意的是,sticky必須設在<th>元素上面,不能設在<thead>和<tr>元素,因為這兩個元素沒有relative定位,也就無法產生sticky效果。

  5.粘性定位失效的兩種情況

    (1)粘性定位元素的父元素和Ⅶ自身高度計算值一樣的時候

    (2)設定為 position:sticky 元素的任意父節點的 overflow 屬性必須是 visible,否則 position:sticky 不會生效

       如果 position:sticky 元素的任意父節點定位設定為 overflow:hidden,則父容器無法進行滾動,所以 position:sticky 元素也不會有滾動然後固定的情況。

       如果 position:sticky 元素的任意父節點定位設定為 position:relative | absolute | fixed,則元素相對父元素進行定位,而不會相對 viewprot 定位。 

參考檔案:https://juejin.im/post/5bfab13ee51d4568655eb676

     https://juejin.im/post/5ecde4206fb9a047aa65edf0