1. 程式人生 > >CSS選擇器及優先順序 總結

CSS選擇器及優先順序 總結

一、優先順序

  • 不同級別
    1. 在屬性後面使用 !important 會覆蓋頁面內任何位置定義的元素樣式。
    2. 作為style屬性寫在元素內的樣式
    3. id選擇器
    4. 類選擇器
    5. 元素選擇器
    6. 萬用字元選擇器
    7. 瀏覽器自定義或繼承

    總結排序:!important > 行內樣式 > ID選擇器 > 類選擇器 > 元素 > 萬用字元 > 繼承 > 瀏覽器預設屬性

  • 同一級別
  • (1) 同一級別中後寫的會覆蓋先寫的樣式

    (2) 同一級別css引入方式不同,優先順序不同
    總結排序:內聯(行內)樣式 > 內部樣式表 > 外部樣式表 > 匯入樣式(@import)。

    對於選擇器優先順序,還可以通過計算權重值來比較。(請參見:狠狠戳我

    例1、
    test.css檔案

    #my{background:blue;}

    html檔案

    <link rel="stylesheet" type="text/css" href="./css/test.css">
    <style>
    /*這裡是內部樣式*/
    #my{background:red;}
    </style>
    
    <span id="my">333</span>

    執行結果:span最後為紅色。
    說明css引入方式優先順序:內部樣式表 > 外部樣式表

    例2、

     <link rel="stylesheet" type="text/css" href="./css/test.css">
     <style>#my{background:red;}</style>
     <span id="my" style="background: yellow">333</span>

    執行結果:span最後為黃色。
    說明css引入方式優先順序:內聯(行內)樣式 > 內部樣式表 > 外部樣式表

    二、選擇器

    1、普通選擇器
    選擇器 eg 描述
    通用選擇器 * * 選擇所有元素。
    類選擇器 .message 選擇 class="intro" 的所有元素。
    id選擇器 #id #head 選擇 id="firstname" 的所有元素。
    元素選擇器 el p 選擇所有 <p> 元素。
    選擇器分組 el,el div,p 選擇所有 <div> 元素和所有 <p> 元素。
    後代選擇器 el el div p 選擇 <div> 元素內部的所有 <p> 元素。
    子元素選擇器 el > el div>p 選擇 <div> 的第一子代的 所有<p> 元素。
    相鄰兄弟選擇器 el + el div+p 選擇與<div>同級且緊接在其後的第一個 <p> 元素
    2、屬性選擇器
    型別 eg 描述
    [target] 選擇帶有 target 屬性所有元素
    [target=_blank] 選擇 target="_blank" 的所有元素
    [title~=flower] 選擇 title 屬性包含單詞 "flower" 的所有元素
    [lang¦=en] 選擇 lang 屬性值以 "en" 開頭的所有元素。
    [attribute^=”value”] [abc^=”def”] 選擇 abc 屬性值以 “def” 開頭的所有元素
    [attribute$=”value”] [abc$=”def”] 選擇 abc 屬性值以 “def” 結尾的所有元素
    [attribute*=”value”] [abc*=”def”] 選擇 abc 屬性值中包含子串 “def” 的所有元素
    3、偽類
    型別 eg 描述
    :link a:link 選擇所有未被訪問的連結
    a:visited 選擇所有已被訪問的連結
    a:active 選擇正在被點選的活動連結
    a:hover 選擇滑鼠指標位於其上的連結
    input:focus 選擇獲得焦點的 input 元素
    p:lang(it) 選擇帶有以 "it" 開頭的 lang 屬性值的每個 <p> 元素

    注:link、visited、active、hover的順序,為LoVe HAte

    4、偽元素
    型別 eg 描述
    p:before 在每個 <p> 元素的內容之前插入內容
    p:after 在每個 <p> 元素的內容之後插入內容
    p:first-letter 選擇每個 <p> 元素的首字母
    p:first-line 選擇每個 <p> 元素的首行
    p:first-child 選擇屬於父元素的第一個子元素的每個 <p> 元素
    p~ul 選擇前面有 <p> 元素的每個 <ul> 元素。
    p:first-of-type 選擇屬於其父元素的首個 <p> 元素的每個 <p> 元素。
    p:last-of-type 選擇屬於其父元素的最後 <p> 元素的每個 <p> 元素。
    p:only-of-type 選擇屬於其父元素唯一的 <p> 元素的每個 <p> 元素。
    p:only-child 選擇屬於其父元素的唯一子元素的每個 <p> 元素。
    p:nth-child(2) 選擇屬於其父元素的第二個子元素的每個 <p> 元素。
    p:nth-last-child(2) 同上,從最後一個子元素開始計數。
    p:nth-of-type(2) 選擇屬於其父元素第二個 <p> 元素的每個 <p> 元素。
    p:nth-last-of-type(2) 同上,但是從最後一個子元素開始計數。
    p:last-child 選擇屬於其父元素最後一個子元素每個 <p> 元素。
    :root :root 選擇文件的根元素。
    p:empty 選擇沒有子元素的每個 <p> 元素(包括文字節點)。
    #news:target 選擇當前活動的 #news 元素。
    input:enabled 選擇每個啟用的 <input> 元素。
    input:disabled 選擇每個禁用的 <input> 元素
    input:checked 選擇每個被選中的 <input> 元素。
    :not(p) 選擇非 <p> 元素的每個元素。
    ::selection 選擇被使用者選取的元素部分。

    三、一些注意

    1、id選擇器

    www3school中所說:“一個id選擇器 只能在一個文件中使用一次“,
    但在css實踐中你會發現 兩個同樣的id都會生效。

    <style>
    span{margin: 5px;}  
    #my{background:red;}
    </style>
    
      <span id="my">666</span>
      <span id="my">333</span>

    執行結果為:
    這裡寫圖片描述

    問:那為什麼官方文件只讓使用一次呢?

    答:若使用兩次,第一影響就是不能通過W3的校驗。
    在頁面顯示上,目前的瀏覽器css還都允許你犯這個錯誤,用多個相同ID“一般情況下”也能正常顯示。
    但是當你需要用JavaScript通過id來控制這個div,那就會出現錯誤。因為js裡獲取DOM是通過getElementById,而如果頁面出現同一個id幾次,這樣就獲取不到了。所以id要有唯一性。

    2、多類選擇器

    類選擇器很簡單,那多類選擇器呢?好好看下面的例子及註釋。
    www3school
    例1:2個類

    <style type="text/css">
    .important {font-weight:bold;}
    .warning {font-style:italic;}
    
    /*.important和.warning之間不能有空格*/
    /*.warning.important {background:silver;}顛倒順序執行結果不變*/
    .important.warning {background:silver;}
    </style>
    
    <p class="important">This paragraph is very important.</p>
    <p class="warning">This is a warning.</p>
    <p class="important warning">This paragraph is a very important warning.</p>
    

    執行結果:
    這裡寫圖片描述

    例2:3個類
    注:如果一個多類選擇器包含類名列表中沒有的一個類名,匹配就會失敗。

    <style>
    .important {font-weight:bold;}
    .warning {font-style:italic;}
    /*.important和.warning之間不能有空格*/
    /*.warning.important {background:silver;}顛倒順序執行結果不變*/
    .important.warning {background:silver;}
    </style>
    
    <p class="important">This paragraph is very important.</p>
    <p class="warning">This is a warning.</p>
    <p class="important urgent warning">This paragraph is a very important warning.</p>

    執行結果:同上
    這裡寫圖片描述