滾動監聽 after選擇器

来源:https://www.cnblogs.com/SSs1995/archive/2018/04/16/8850651.html
-Advertisement-
Play Games

一、如何實現滾動到一定位置將內容固定在頁面頂部 window.onscroll=function(){ //滾動的距離,距離頂部的距離 var topScroll =document.body.scrollTop||document.documentElement.scrollTop; //獲取到導 ...


一、如何實現滾動到一定位置將內容固定在頁面頂部

 window.onscroll=function(){
     //滾動的距離,距離頂部的距離
     var topScroll =document.body.scrollTop||document.documentElement.scrollTop;
     //獲取到導航欄id
     var bignav  = document.getElementById("pop_title");
     //當滾動距離大於150px時執行 固定位置 距離
     if(topScroll > 150){  
         bignav.style.position = 'fixed';
         bignav.style.top = -120+ 'px';
         bignav.style.left = 0 + 'px';
     }else{
         //當滾動距離小於150讓導航欄恢複原狀
         bignav.style.position = 'static';
     }
}
滾動監聽

window.onscroll為滾輪監聽,

document.body.scrollTop||document.documentElement.scrollTop 寫兩個是為了相容不同瀏覽器。

固定位置的top要設為負值,原因不明,若為0則會跟上方有空隙。

左右位置雖然是0也要設,不然若為不是100%寬度的內容會出現左右跳動。

上面這種方法高度是自己定死的。

下麵介紹獲取元素高度的方法。

window.onload = function(){
    //獲取導航框架
    var navContainer = document.getElementById("introductFra"); 
    //獲取導航ul
    var navBox = document.getElementById("introBox");  
    //獲取導航下內容大框架
    var text = document.getElementById("contantFra"); 
    //獲取li
    var navBoxChild = navBox.children;  
    //獲取內容里每個大塊的框架
    var textChild = text.children;  
    //獲取導航距頂端距離
    var num = navContainer.offsetTop;  
    //獲取導航高度
    var a = navContainer.offsetHeight;  
    window.onscroll = function(){  
        var scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;  
        //滾動告訴超過導航位置
        if(scrollTop >= num){  
            //導航增加fixed屬性
            navContainer.className = "introductFra fixed";  
            //下麵板塊內容向下空出一個導航的距離
            text.style.paddingTop = a +"px";  
            navContainer.style.zIndex = "999";
        }else{  
            //恢複原屬性
            navContainer.className = "introductFra";  
            text.style.paddingTop = "";  
        }  
        //當導航與相應文檔接觸的時候自動切換   
        for(var i=0;i<navBoxChild.length;i++){  
            if( scrollTop +100 >= textChild[i].offsetTop){  
                //迴圈給每個li樣式設為空
                for(var j=0;j<navBoxChild.length;j++){  
                    navBoxChild[j].className = "";  
                }  
                //選中的設為帶標誌的
                navBoxChild[i].className = "introCur";  
           }  
        }  
    }; 
}
        //當導航與相應文檔接觸的時候自動切換   
        for(var i=0;i<navBoxChild.length;i++){  
            if( scrollTop +100 >= textChild[i].offsetTop){  
                for(var j=0;j<navBoxChild.length;j++){  
                    navBoxChild[j].className = "";  
                }  
                navBoxChild[i].className = "introCur";  
           }  
        }  
    }; 
}
View Code

效果如下

offsetTop 為元素距離頁面最開始的距離。

offsetHeight為元素高度

這樣省去了調整位置的麻煩。

並且設置fixed的屬性為一個class,直接更改li的class名,增加這個屬性。

這個代碼下麵展示了導航如何自動選中為哪個版塊

先迴圈給每個li都設為不帶選中的class

當滾動的高度加導航的高度大於版塊內容距離上面的高度時,

也就是導航移動到版塊上方時,這個版塊對應的li的class名改為帶選中的。

其中選中的class  Css代碼如下,用到了after選擇器。

.introCur::after{
    content: '';
    display: block;
    width: 66px;
    height: 3px;
    position: absolute;
    bottom: 0;
    left: 50%;
    margin-left: -33px;
    background: #333;
}
選中的樣式

二、after 和 before 偽類元素

必須跟content屬性

::before和::after下特有的content,用於在css渲染中向元素邏輯上的頭部或尾部添加內容。

這些添加不會出現在DOM中,不會改變文檔內容,不可複製,僅僅是在css渲染層加入。

所以不要用:before或:after展示有實際意義的內容,儘量使用它們顯示修飾性內容,例如圖標,書名號。

 

三、介紹偽類和偽元素

css3為了區分偽類和偽元素,偽元素採用雙冒號寫法。

常見偽類——:hover,:link,:active,:target,:not(),:focus。

常見偽元素——::first-letter,::first-line,::before,::after,::selection。

偽類元素的display是預設值inline,可以通過設置display:block來改變其顯示。

偽類元素必須加content屬性,

1.其屬性值可以寫書名號content:“》”。

2.在後面顯示路徑

 

<style type="text/css">
a::after{
    content: "(" attr(href) ")";
}
</style>
<a href="http://www.cnblogs.com/starof">starof</a>
a標簽後顯示路徑

 

效果

3.模擬實現float :center 效果

<!DOCTYPE html>
<html>
<head>
    <meta charset='UTF-8'>
    <title>Float Both</title>
    <style>
    * {
        margin: 0;
        padding: 0;
    }
    body {
        font: 14px/1.8 Georgia, serif;
    }
        #page-wrap { width: 60%; margin: 40px auto; position: relative; }
        #logo { position: absolute; top: 0; left: 50%; margin-left: -125px; }
        #l, #r { width: 49%; }
        #l { float: left; }
        #r { float: right; }
        #l:before, #r:before { content: ""; width: 125px; height: 250px; }
        #l:before { float: right; }
        #r:before { float: left; }
    </style>
</head>
<body>
    <div id="page-wrap">
        <img src="img/cat.jpg" id="logo">
        <div id="l">
            <p>
                Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus, metus
            </p>
        </div>
        <div id="r">
            <p>
                Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus, metus
            </p>
        </div>
    </div>
</body>
</html>
View Code

實現效果

 

用before 和after 設置圖片的高度,來空出圖片的高度。

 

以上內容摘自https://www.cnblogs.com/starof/p/4459991.html

有大神用偽元素創建了84種小圖標,具體可查看http://nicolasgallagher.com/pure-css-gui-icons/


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

-Advertisement-
Play Games
更多相關文章
  • 公司升級了伺服器的配置,記憶體吃緊的問題得以解決,由此想到了幾個優化MySQL的簡單方法。首先明確兩件事,我們的業務場景是常見的高併發web服務,查詢速度是重中之重。還有就是優化前一定要備份資料庫,不然出問題就只能跑路了。 1.使用固態硬碟 這個優化方法毫無技術含量,完全就是花錢買性能,但是不得不說這 ...
  • 觸發器: 當用戶登錄/退出或者操作某個數據對象或者進行DDL(建表,建view)引起某個儲存過程的值的變化,把這個隱含被調用的過程,稱為觸發器。 語法 創建觸發器 獲取新舊表記錄對象 禁用/啟用觸發器 刪除觸發器 ...
  • 本地oracle客戶端用PLSQL Developer連接遠程資料庫,每次登錄都會在很久之後,出現 ORA-12638: 身份證明檢索失敗,tnsping 表明TNS配置沒有問題。 解決方案: D:\app\sabre\product\11.2.0\client_1\NETWORK\ADMIN 此目 ...
  • 去年三月底入職上海的一家互聯網公司,由於項目使用的是MongoDB資料庫所以有機會接觸了MongoDB。在項目的開發過程中使用系統原有的一些方法查詢MongoDB感覺很費力,用起來也不爽,所以私下裡就自己學了一些C#查詢MongoDB的方法。 先說一些MongoDB的內嵌數組查詢,公司原有的方法是使 ...
  • 據我觀察,中國的開發者創造了一種獨特的SQL發音:/'sɜːkl/,既好聽,又好讀,挺好的。但是今年我開始做資料庫相關的工作,作為一個專業人士,決定對SQL發音進行一些考證。 直接說結論吧,很多人沿用了/ˈsiːkwəl/這個讀音,因為這門語言以前叫做“SEQUEL”。但更官方一些的讀音應該是ISO ...
  • 圓角設置可以指定左上、左下、右上、右下角;單個指定或多個指定。 ...
  • 概述 在iOS 4.0之後,block橫空出世,它本身封裝了一段代碼並將這段代碼當做變數,通過block()的方式進行回調。這不免讓我們想到在C函數中,我們可以定義一個指向函數的指針並且調用。 。 Block基本使用 Block的類型 block也是一種數據類型,Block的類型是什麼呢。 就是Bl ...
  • 一、模態框 實現圖片點擊後出現彈窗,彈窗裡帶點擊的圖片大圖的效果。 分類: 1.模態對話框 模態對話框(Modal Dialogue Box,又叫做模式對話框),是指在用戶想要對對話框以外的應用程式進行操作時,必須首先對該對話框進行響應。如單擊【確定】或【取消】按鈕等將該對話框關閉。否則無法進行其他 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...