CSS基礎篇--使用position:sticky 實現粘性佈局

来源:https://www.cnblogs.com/moqiutao/archive/2018/01/24/7341671.html
-Advertisement-
Play Games

簡介 前面寫了一篇文章講解了position常用的幾個屬性:《CSS 屬性之 position講解》一般都知道下麵幾個常用的: 在https://developer.mozilla.org/zh-CN/docs/Web/CSS/position還說了下麵這三個值: 估計大部分都沒有用過positio ...


簡介

前面寫了一篇文章講解了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推薦的標準。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在mysql5.1以後開始支持事件功能,主要是定期或指定的時間執行一條命令。 mysql預設是關閉事件功能 檢查是否開啟事件功能: show variables llike 'event_scheduler'; 開啟事件: set global event_scheduler = on; 關閉事件: ...
  • SQL的不同版本在Windows環境啟動配置方法不同,此處僅介紹 5.7.20的配置方法; 1、登錄mysql官網下載windows環境下的工具壓縮包 http://dev.mysql.com/downloads/mysql/ 個人電腦是64位的機器,所以此處演示選擇如下的版本 2、解壓到本地電腦的 ...
  • 1.創建函數 delimiter // create function function_name(形參名 數據類型) returns 數據類型 #必須指定返回的數據類型。 begin stmt; end // delimiter ; 2.刪除函數 drop function function_na ...
  • 我錄屏的方式是分別錄製音頻和視頻,最後合併成mp4格式,比較麻煩,因為網上完整的教程比較少,所以我打算寫一個完整版的,照著我的代碼寫完之後,至少是能夠實現功能的,而不是簡單的介紹下用法。 1既然是錄製視頻,我們應該有一個按鈕控制開始和結束。 2在錄製之前,需要先判斷一下Android系統的版本是否大 ...
  • 先上效果圖 灑豆子的效果,突發奇想,覺得這個動畫挺有意思的,就抽空寫了一個玩玩 繪製流程: 定義6個‘’豆子‘’,每個豆子有各自的屬性,大小,拋出的速度等,然後控制每個的方向和狀態,回彈效果使用差值器 BounceInterpolator package com.fragmentapp.view.b ...
  • 本文中我們將講解一下App的長連接實現。一般而言長連接已經是App的標配了,推送功能的實現基礎就是長連接,當然了我們也可以通過輪訓操作實現推送功能,但是輪訓一般及時性比較差,而且網路消耗與電量銷毀比較多,因此一般推送功能都是通過長連接實現的。 那麼如何實現長連接呢?現在一般有這麼幾種實現方式: 使用 ...
  • Genymotion是一款非常好用的虛擬機,利用它可以在window、Liunx或MAC系統上實現Android的模似器。對於開發人員來說,有了Android模似器,就可以在電腦上實時調試安卓app,而不用外接手機設置,非常方便。 現在我們開始安裝一個試下。 1.保證CPU是否支持虛擬化技術。 我們 ...
  • 最近發現css遺忘了很多,原因在於平時很少用到一些樣式,現記錄一些平時工作中使用頻率比較少的屬性以備查看。 1.文本屬性 首行文本縮進,針對於塊級元素,text-indent 可以使用所有長度單位,包括百分比值。百分比是相對於父級元素設置的。 文本對齊屬性值中有個justify是兩端對齊,之前用的比 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...