前端開發HTML&css入門——偽類選擇器和一些特殊的選擇器

来源:https://www.cnblogs.com/KLExTt/archive/2019/08/17/11365376.html
-Advertisement-
Play Games

偽類和偽元素 有時候,你需要選擇本身沒有標簽,但是仍然易於識別的網頁部位,比如段落首行或滑鼠滑過的連接。CSS為他們提供一些選擇器:偽類和偽元素。 常用的一些偽類選擇器: 表示訪問過的鏈接 瀏覽器是通過歷史記錄來判斷一個鏈接是否訪問過, *由於涉及到用戶的隱私問題,所以使用visited偽類只能設置 ...


        偽類和偽元素
    有時候,你需要選擇本身沒有標簽,但是仍然易於識別的網頁部位,比如段落首行或滑鼠滑過的連接。CSS為他們提供一些選擇器:偽類和偽元素。

常用的一些偽類選擇器:

:link :visited :hover :active
表示普通的鏈接(沒訪問過的鏈接)

表示訪問過的鏈接

瀏覽器是通過歷史記錄來判斷一個鏈接是否訪問過,
*由於涉及到用戶的隱私問題,所以使用visited偽類只能設置字體的顏色

表示滑鼠移入的狀態 超鏈接被點擊的狀態
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
  /*
    未點擊過的超鏈接顏色為黃綠色
  */
            a:link{
                color: yellowgreen;
            }
  /*
    點擊過的超鏈接顏色為紅色
  */
        a:visited{
                color: red;
            }
  /*
    滑鼠停留(未點擊)在超鏈接顏色為天空藍色
  */
       a:hover{
                color: skyblue;
            }
  /*
    點擊時超鏈接的顏色為黑色
  */
       a:active{
                color: black;
            }
      </style>
    </head>
    <body>
      <a href="http://www.baidu.com">一個網站</a>
    </body>
</html>

以上四個偽類優先順序是一樣的,所以執行要有一定的順序,一定要遵循

link→visit→hover→active

順序,如果不遵循上述會使偽類失效。

其他的偽類選擇器:

:focus :selection – :before – :after
獲取焦點後進行選擇操作

被選定後進行的選擇操作

這個偽類在火狐中需要採用另一種方式編寫: :-moz-selection

指定元素前 指定元素後
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            /*
             * 文本框獲取焦點以後,修改背景顏色為黃色
             */
            input:focus{
                background-color: yellow;
            }
        /*
             * 為p標簽中選中的內容使用樣式
             *     可以使用::selection為類
             *     註意:這個偽類在火狐中需要採用另一種方式編寫::-moz-selection
             */
            
            /**
             * 相容火狐的
             */
            p::-moz-selection{
                background-color: orange;
            }
            
            /**
             * 相容大部分瀏覽器的
             */
            p::selection{
                background-color: orange;
            }
            
        </style>
    </head>
    <body>
        <p>我是一個段落</p>
        
          <!-- 使用input可以創建一個文本輸入框 -->
          <input type="text" />
</body>
</html>

– :before和– :after

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
/*
             * :before表示元素最前邊的部分
             *     一般before都需要結合content這個樣式一起使用,
             *     通過content可以向before或after的位置添加一些內容
             * 
             * :after表示元素的最後邊的部分
             */
            p:before{
                content: "我會出現在整個段落的最前邊";
                color: red;
            }
            
            p:after{
                content: "我會出現在整個段落的最後邊";
                color: orange;
            }
        </style>
    </head>

    <body>
        <p>
            我家是荒涼的。
一進大門,靠著大門洞子的東壁是三間破房子,靠著大門洞子的西壁仍是三間破房子。再加上一個大門洞,看起來是七間連著串,外表上似乎是很威武的,房子都很高大,架著很粗的木頭的房架。柁頭是很粗的,一個小孩抱不過來。都一律是瓦房蓋,房脊上還有透窿的用瓦做的花,迎著太陽看去,是很好看的,房脊的兩梢上,一邊有一個鴿子,大概也是瓦做的。終年不動,停在那裡。這房子的外表,似乎不壞。
        </p>
    </body>

</html>

 

需要註意的是偽類選擇器加入的文本是CSS樣式,是無法選定的。

 

偽元素

:first-letter :first-line
為元素中中第一個字元來設置一個特殊的樣式 為元素中的第一行設置一個背景顏色為黃色

 

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            /*
             * 使用偽元素來表示元素中的一些特殊的位置
             */
            /*
             * 為p中第一個字元來設置一個特殊的樣式
             */
        
            p:first-letter {
                color: red;
                font-size: 20px;
            }
            /*
             * 為p中的第一行設置一個背景顏色為黃色
             */
            
            p:first-line {
                background-color: yellow;
            }
      </style>
    </head>
    <body>
        <p>我家是荒涼的。
一進大門,靠著大門洞子的東壁是三間破房子,靠著大門洞子的西壁仍是三間破房子。再加上一個大門洞,看起來是七間連著串,外表上似乎是很威武的,房子都很高大,架著很粗的木頭的房架。柁頭是很粗的,一個小孩抱不過來。都一律是瓦房蓋,房脊上還有透窿的用瓦做的花,迎著太陽看去,是很好看的,房脊的兩梢上,一邊有一個鴿子,大概也是瓦做的。終年不動,停在那裡。這房子的外表,似乎不壞。
        </p>
    </body>
</html>

 

    屬性選擇器

  可以根據元素中的屬性或屬性值來選取指定元素
  * - 語法:
  * [屬性名] 選取含有指定屬性的元素
  * [屬性名="屬性值"] 選取含有指定屬性值的元素
  * [屬性名^="屬性值"] 選取屬性值以指定內容開頭的元素
  * [屬性名$="屬性值"] 選取屬性值以指定內容結尾的元素
  * [屬性名*="屬性值"] 選取屬性值以包含指定內容的元素

  title屬性,這個屬性可以給任何標簽指定。當滑鼠移入到元素上時,元素中的title屬性的值將會作為提示文字顯示
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
        /*
             * 為所有具有title屬性的p元素,設置一個背景顏色為黃色  
        */ 
            p[title]{
                background-color: yellow;
            }
            /*
             * 為title屬性值是hello的元素設置一個背景顏色為黃色
             */
            p[title="hello"]{
                background-color: yellow;
            }
                        /*
             * 為title屬性值以ab開頭的元素設置一個背景顏色為黃色
             */
            p[title^="ab"]{
                background-color: yellow;
            }
            /*
             * 為title屬性值以c結尾的元素設置一個背景顏色
             */
            p[title$="c"]{
                background-color: yellow;
            }
            /*
             * 為title屬性值有c的元素設置一個背景顏色
             */
            p[title*="c"]{
                background-color: yellow;
            }
        </style>
    </head>
    <body>
        <p title="hello">我是一個段落</p>
        <p>我是一個段落</p>
        <p title="hello">我是一個段落</p>
        <p title="abbc">我是一個段落</p>
        <p title="abccd">我是一個段落</p>
        <p title="abc">我是一個段落</p>
    </body>
</html>
 子元素選擇器

   :first-child 可以選中第一個子元素

   :last-child 可以選中最後一個子元素

  :nth-child 可以選中任意位置的子元素

  * 該選擇器後邊可以指定一個參數,指定要選中第幾個子元素
  * even 表示偶數位置的子元素
  * odd 表示奇數位置的子元素



<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
    /*選中第一個為p標簽的子元素,
        p可以為空,預設為*通配符,表示所有
       所以div中的p標簽也會被選中
    */ 
                     p:first-child{
                background-color: yellow;
            }
    /*如果不想選中所有第一個(其他同理)為p標簽的子元素,可以做一個限定*/
            body > p:first-child{
                background-color: yellow;
            }
    /*選中最後一個為p標簽的子元素
    div中的p標簽既為第一個也為最後一個
    */
            p:last-child{
                background-color: yellow;
            }
    /*選中第幾個為p標簽的子元素
     括弧中可以填數字,表示第幾。
      或者填odd表示所有奇數,even表示所有偶數
    */
          p:nth-child(odd){
                background-color: yellow;
            }
    </style>
    </head>
    <body>
        <span>我是span</span>
        <p>我是一個p標簽</p>
        <p>我是一個p標簽</p>
        <p>我是一個p標簽</p>
        <p>我是一個p標簽</p>
        <p>我是一個p標簽</p>
        <p>我是一個p標簽</p>
        <span>hello</span>
        <div>
            <p>我是DIV中的p標簽</p>
        </div>
    </body>
</html>

    :first-of-type
    * :last-of-type
    * :nth-of-type

    :first-child這些非常的類似,
    * 只不過child,是在所有的子元素中排列
    * 而type,是在當前類型的子元素中排列



<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
/*
在所有p標簽中的第一個子元素
 */
            p:first-of-type{
                background-color: yellow;
            }
/*
在所有p標簽中的最後一個子元素
 */
            p:last-of-type{
                </style>
  /*
 在所有p標簽中的第幾個子元素
   */
            p:nth-of-type(3){
                background-color: yellow;
              }
    </head>
    <body>
        <span>我是span</span>
        <p>我是一個p標簽</p>
        <p>我是一個p標簽</p>
        <p>我是一個p標簽</p>
        <p>我是一個p標簽</p>
        <p>我是一個p標簽</p>
        <p>我是一個p標簽</p>
        <span>hello</span>
    </body>
</html>
兄弟元素選擇器

  可以選中一個元素後緊挨著的指定的兄弟元素
  * 語法:前一個 + 後一個

  選中後邊的所有兄弟元素
      語法:前一個 ~ 後邊所有

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            /*
            選中span元素緊挨著的指定兄弟元素,
           必須緊挨著,如果中間有其他元素則不生效
             */
            span + p{
                background-color: yellow;
            }
            
            /*
             * 選中span後邊的所有兄弟元素
             */
            span ~ p{
                background-color: yellow;
            }
        </style>
    </head>
    <body>
        <p>我是一個p標簽</p>
        <p>我是一個p標簽</p>
        <p>我是一個p標簽</p>
        <span>我是一個span</span>
        <p>我是一個p標簽</p>
        <p>我是一個p標簽</p>
        <p>我是一個p標簽</p>
    </body>
</html>

否定偽類

    可以從已選中的元素中剔除出某些元素

    語法:
    * :not(選擇器)



<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
    /*去除p標簽中class是hello的元素*/
            p:not(.hello){
                background-color: yellow;
            }  
        </style>
    </head>
    <body>
        <p>我是一個p標簽</p>
        <p>我是一個p標簽</p>
        <p>我是一個p標簽</p>
        <p class="hello">我是一個p標簽</p>
        <p>我是一個p標簽</p>
        <p>我是一個p標簽</p>
    </body>
</html>

選擇器優先順序 

當使用不同的選擇器,選中同一個元素時並且設置相同的樣式時,
* 這時樣式之間產生了衝突,最終到底採用哪個選擇器定義的樣式,由選擇器的優先順序(權重)決定
* 優先順序高的優先顯示

優先順序的規則
* 內聯樣式 , 優先順序 1000
* id選擇器,優先順序 100
* 類和偽類, 優先順序 10
* 元素選擇器,優先順序 1
* 通配* , 優先順序 0
* 繼承的樣式,沒有優先順序

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
        /*    * 當選擇器中包含多種選擇器時,需要將多種選擇器的優先順序相加然後在比較,但是註意,選擇器優先順序計算不會超過他的最大的數量級
    */
             #p2{
                background-color: yellowgreen;
            } 
            p#p2{
                background-color: red;
            }    
            .p3{
                color: green;
            }
            /* 如果選擇器的優先順序一樣,使用靠後的樣式。
*/
            .p1{
                color: yellow;
                background-color: greenyellow;
            }
                       .p3{
                color: green;
            }
    /*  可以在樣式的最後,添加一個!important,則此時該樣式將會獲得一個最高的優先順序,
    *     將會優先於所有的樣式顯示甚至超過內聯樣式,但是在開發中儘量避免使用!important*/

            .p1{
                color: yellow;
                background-color: greenyellow !important;
            }      
    /*  並集選擇器的優先順序是單獨計算
             *     div , p , #p1 , .hello{}
        */ 
    </style>
    </head>
    <body>      
        <p class="p1 p3" id="p2" style="background-color: orange;">我是一個段落
            <span>我是p標簽中的span</span>
        </p>
    </body>
</html

 


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

-Advertisement-
Play Games
更多相關文章
  • 前言 我們都知道 replace 在做替換處理方面會很常用,通常也是第一個會想到的方法。replace 第一個參數可以傳入 string 或 RegExp,第二個參數可以傳入 string 或 一個回調函數。在能夠傳入回調函數之後,事情就開始變得不簡單了(如果有用過map,filter等函數,你就知 ...
  • js代碼在執行前會做的幾件事情: 1.代碼檢測 2.預編譯:在執行代碼之前會對代碼中的函數以及變數提前聲明 並且做一些其他的處理 1.函數在執行前的一瞬間,會生成一個OA(object action)對象 2.函數的形參作為OA對象的屬性名,實參作為AO對象的屬性值 3.分析var聲明,變數名作為A ...
  • 2019-08-17 ...
  • vue - Error: Can't resolve '@/assets/img/github.svg (vue-cli3.0,無法解析.svg圖片,已解決) ...
  • HTML顏色代碼是由16進位的三對數字分別表示紅、綠、藍(#RRGGBB)三種基本色。以紅顏色為例,紅色的代碼是 #FF0000, 代碼組成為’255′ 紅, ‘0’ 綠, 和 ‘0’ 藍。這些顏色可以用於裝飾Web頁面的背景,文字和表格等。 ...
  • JSP 中EL表達式用法詳解 EL 全名為Expression Language EL 語法很簡單,它最大的特點就是使用上很方便。接下來介紹EL主要的語法結構: ${sessionScope.user.sex} 所有EL都是以${為起始、以}為結尾的。上述EL範例的意思是:從Session的範圍中, ...
  • 數組Array是JavaScript中最常用的類型之一,同一數組中可以保存任意類型的數據,並且它的長度是動態的,會隨著數組中數據的加減自動變化。每個數組都有一個表示其長度(數組元素的個數)的length屬性。並且數組元素的索引(下標)是從0開始的,所以數組最後一個元素的索引永遠等於length – ...
  • 控制台提示“Invalid string length”,瀏覽器直接卡掉,是為什麼呢? 答:因為在寫嵌套迴圈時,定義的變數重名了,內層和外層用了同一個i變數。 -THE END- ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...