前端開發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
  • 前言 在我們開發過程中基本上不可或缺的用到一些敏感機密數據,比如SQL伺服器的連接串或者是OAuth2的Secret等,這些敏感數據在代碼中是不太安全的,我們不應該在源代碼中存儲密碼和其他的敏感數據,一種推薦的方式是通過Asp.Net Core的機密管理器。 機密管理器 在 ASP.NET Core ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 順序棧的介面程式 目錄順序棧的介面程式頭文件創建順序棧入棧出棧利用棧將10進位轉16進位數驗證 頭文件 #include <stdio.h> #include <stdbool.h> #include <stdlib.h> 創建順序棧 // 指的是順序棧中的元素的數據類型,用戶可以根據需要進行修改 ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • C總結與剖析:關鍵字篇 -- <<C語言深度解剖>> 目錄C總結與剖析:關鍵字篇 -- <<C語言深度解剖>>程式的本質:二進位文件變數1.變數:記憶體上的某個位置開闢的空間2.變數的初始化3.為什麼要有變數4.局部變數與全局變數5.變數的大小由類型決定6.任何一個變數,記憶體賦值都是從低地址開始往高地 ...
  • 如果讓你來做一個有狀態流式應用的故障恢復,你會如何來做呢? 單機和多機會遇到什麼不同的問題? Flink Checkpoint 是做什麼用的?原理是什麼? ...
  • C++ 多級繼承 多級繼承是一種面向對象編程(OOP)特性,允許一個類從多個基類繼承屬性和方法。它使代碼更易於組織和維護,並促進代碼重用。 多級繼承的語法 在 C++ 中,使用 : 符號來指定繼承關係。多級繼承的語法如下: class DerivedClass : public BaseClass1 ...
  • 前言 什麼是SpringCloud? Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發便利性簡化了分散式系統的開發,比如服務註冊、服務發現、網關、路由、鏈路追蹤等。Spring Cloud 並不是重覆造輪子,而是將市面上開發得比較好的模塊集成進去,進行封裝,從 ...
  • class_template 類模板和函數模板的定義和使用類似,我們已經進行了介紹。有時,有兩個或多個類,其功能是相同的,僅僅是數據類型不同。類模板用於實現類所需數據的類型參數化 template<class NameType, class AgeType> class Person { publi ...
  • 目錄system v IPC簡介共用記憶體需要用到的函數介面shmget函數--獲取對象IDshmat函數--獲得映射空間shmctl函數--釋放資源共用記憶體實現思路註意 system v IPC簡介 消息隊列、共用記憶體和信號量統稱為system v IPC(進程間通信機制),V是羅馬數字5,是UNI ...