CSS3選擇器


CSS是層疊樣式表(Cascading Style Sheets)的簡稱,並且它是增量式,向后兼容,所以它支持CSS3以前的所有的版本,當然包括CSS2的內容,CSS3也稱作級聯樣式表或者是層級樣式表。CSS3是CSS技術的升級版本,CSS3語言開發是朝着模塊化發展的,

選擇器:指定特定標簽的方式。

一,基本選擇器。通配符*,標簽,類class,id,子,兄弟,群組。

二,屬性選擇器。=全等,~=約等,^=開頭,$=結尾,*=含有,|=特別

二,偽類選擇器。(我們的對象是HTML標簽,就是冒號前面的標簽。

         1,動態偽類:    a :likn   a:visited  a:hover    a:active  input:focus

         2,狀()態偽類:     input:enable    input:disable   input:checked

         3,結構偽類:   div:nth-child(n)正數   div:nth-last-child(n)倒數   div:first-of-child(n)   div:last-of-child(n) 

            div:nth-of-type(n)正數   div:nth-last-of-type(n)倒數   div:first-of-type    div:last-of-type

            div:empty空值    div:only-child唯一子元素     div:only-of-type唯一類型子元素  :not否定

    4,偽元素:     div::before    div::after   div::selection   div::first-line    div::first-letter      (我們的對象不是冒號前面的標簽,而是冒號前面標簽里面的內容。不真正的HTML標簽

  權重:*0 > 標簽,偽類1 > 類,選擇器10 >  id100  > 行內1000     此外還有一個:就近原則。

 

 

 

 

 

 

=================================

div.part1+.part4{background:#00f;}   只匹配.part1下面的第一個兄弟元素,且這個兄弟元素必須有.part4,否則其他的都不匹配。

<div class="part1">111</div>
<div class="part4">111</div>  匹配  
<div class="part1123141  part4">111</div>  不匹配

相鄰兄弟選擇器,選中的是和它同一個父元素,並且要相鄰的元素,而且是它下面的那個相鄰的元素(一個元素)

 

------------------------------

.one~.two{background:#00f}   只匹配.one下面含有.two的所有元素,.one上面的不匹配。

<div class="two">不匹配

<div class="one">

<div class="two three"> 匹配

<div class="three four > 不匹配

<div class="two five> 匹配

通用兄弟選擇器,選中的是和它同一個父元素,而且是指定的它下面所有兄弟元素

 

 

 div[class="part1"]{background: #00f; }  全等,只匹配class="part1" 其他都不匹配

 <div class="part1">111</div>  匹配

<div class="part1  part4">111</div>  不匹配

------------------------------

div[class~="part1"]{ background: #00f; }  class的值一定是一個列表,其中含有單詞part1才匹配,否則不匹配。

<div class="part1">  匹配

<div class=" two part1 three fore"> 匹配

<div class="ad-part1123141 two three part1123141"> 不匹配

Element[attribute~=value] 選擇器用於選取屬性值中包含指定詞匯的元素(一定是一個單獨的單詞),只要是指定的屬性,並且屬性值列表中包含value,而不是在某個值中以value開頭或結尾。

此屬性值是一個詞列表,並且以空格隔開,其中詞列表中包含了一個value詞

------------------------------------

Element[attribute^="value"]匹配指定屬性的指定value值開頭的元素,如果class中有多個value值,第一個值中的第一個字母不是指定的值,即使后面的屬性中首字母是指定的值,那么也不能匹配上

div[class^="s"]{ background:red; }

<div class="one stwo"> 一行字</div>  第一個值的首字母是"o",即使后面的值stwo的首字母是“s”,那么也匹配不上。

E[attr^="value"]:指定了屬性名,並且有屬性值,屬性值是以value開頭的

如下例子:

div[class^=“part”]    

class="part two aside"  匹配

class="part123423"  匹配

其他都不匹配。

------------------------可以和上面的attribute^="value"合起來記憶------------------------

div[class$="part1"]

class=" two three part1"   匹配

 class=" two three four_part1"  匹配

其他都不匹配

============================

div[class*="part1"]    只要含有part1都匹配,

class=" two three part1"  匹配

class=" two three part111111"  匹配

class=" part1-four three two"  匹配

class="two part1-four three"  匹配

其他都不配!!!

 

Elemrnt[attribute*="value"]匹配的是指定屬性、並且屬性值中包含value的都可以匹配到,只要有就都匹配,不管是否是單詞。

--------------------------------------

 div[class|="part1"]    值為part1, 和 以part1- 的匹配

class="part1"   匹配  有其他值就不匹配   如:class="part1  one"  不匹配。

class="part1-part9 two three fore_"   匹配

其他不匹配。

Elemrnt[attribute|=”value”]匹配的是指定的屬性,並且屬性值是以“value-“開頭的元素,或者值就是value

 

:link   :visited   :hover  :active  在超鏈接中最常使用。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>屬性選擇器</title>
    <style type="text/css">
        input{
            width: 300px;
            height: 60px;
            border: 2px solid #333;
        }
        input:hover{
            border: 2px solid red;
        }
        input.one:focus{
            background: orange;
        }
        input.two:focus{
            background: yellow;
        }
    </style>
</head>
<body>
    用戶名:<input type="text" class="one"><br/><br/>
    密碼:<input type="password" class="two">
</body>
</html>
========================================

user interface 用戶界面的狀態偽類

 :checked 選擇器匹配每個已被選中的 input 元素、只用於單選按鈕和復選框,目前主流的瀏覽器都能兼容。

----------------

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>屬性選擇器</title>
    <style type="text/css">
        input{  /*這里默認可以寫為:input:enabled{...} ,所以先設定好寬高,再禁用  */
            width: 300px;
            height: 60px;
        }
        .one:enabled{  /*默認可用的輸入框是可以設置寬高的*/
            background: orange;
        }
        .two:disabled /*默認禁用的輸入框是不可以設置寬高的,但是可以在先前設定好寬高,再禁用*/
            background: yellow;
        }
        .three:disabled /*默認禁用的輸入框是不可以設置寬高的,但是可以在先前設定好寬高,再禁用*/
            background: black;
        }
    </style>
</head>
<body>
    用戶名:<input type="text" class="one"><br/><br/>
    用戶名:<input type="text" class="two" disabled="disabled" value="不可以輸入"><br/><br/>
    用戶名:<input type="text" class="three" disabled="disabled" value="不可以輸入"><br/><br/>
    密碼:<input type="password" class="four">
</body>
</html>
============================

================================================注意==========================================

以下所有CSS3的選擇器全部都是要相對於每個父元素而言的,

一定記得找每個父元素,每個父元素。

解釋:

div:first-child{...}   所有父元素中,第一個子元素是div,則匹配。如果第一個子元素不是div就不匹配。和 last-child剛剛好相反:

div:last-child{...}   所有父元素中,最后一個元素是div,則匹配,如果最后一個元素不是div就不匹配。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>屬性選擇器</title>
    <style type="text/css">
        div:first-child{  /*所有第一個div子元素進行改變*/
            background: #f00;
            border: 1px solid #000;
        }
    </style>
</head>
<body>
    <div><!--相對body,這是第一個div元素,紅背景,1黑邊框--->
        <div>1</div><!--相對其父元素,這是第一個div元素,紅背景,1黑邊框--->
        <div>2</div><!--這是相對body第一個div元素里面的內容而已,-->
        <div>3</div><!--這是相對body第一個div元素里面的內容而已,-->
    </div>
    <div>
        <div>4</div><!--相對其父元素,這是第一個div元素,紅背景,1黑邊框--->
        <div>5</div>
        <div>6</div>
    </div>
    <div>
        <div>7</div><!--相對其父元素,這是第一個div元素,紅背景,1黑邊框--->
        <div>8</div>
        <div>9</div>
    </div>
</body>
</html>
顯示:

一般都會指定特定范圍內的第一個div如下:

.header > container > content > div:first-child{....}

=============================

解釋:

div:first-child{...}   所有父元素中,第一個子元素是div。如果一個子元素不是div就不匹配。和 last-child剛剛好相反:

div:last-child{...}   所有父元素中,最后一個元素是div,如果最后一個元素不是div就不匹配。

--------------

div:nth-child(3){...}  :
說白了就是第(3)n個子元素是不是div,是就匹配,不是就不匹配。

div:nth-child(3){...}   所有父元素的第三個子元素是div(前面的兩個子元素不論類型,只要第三個子元素是div類型就匹配),才匹配。如果第三個子元素不是div ,那么不匹配。

這里是從第一個開始計算1.

一般都會指定具體路徑,不然很難控制。如:

.header > .nav > div:nth-child(3){...}

odd  number  奇數    even number  偶數

2n even 偶數, 2n+1=1  odd 奇數, 3n-1 , 3n+1 , 4n-1 , 4n+1...等等,這里的n是從0開始的。

--------------

div:nth-last-child(3){...}  :
說白了就是倒數第(3)n個子元素是不是div,是就匹配,不是就不匹配。

div:nth-last-child(3){...}   所有父元素的倒數第三個子元素是div(前面的兩個子元素不論類型,只要第三個子元素是div類型就匹配),才匹配。如果倒數第三個子元素不是div ,那么不匹配。

這里是從最后一個開始計算。

一般都會指定具體路徑,不然很難控制。如:

.header > .nav > div:nth-last-child(3){...}

 

------------------

div:nth-of-type(3){  background: red;}

匹配:第三個div類型

div:nth-of-type(3){  background: red;}   匹配所有父元素下面第三個div(不是第三個子元素是不是div,而是所有div中的第三個div)。如果有第三個div則匹配第三個,如果沒有則不匹配。相反:

  div:nth-last-of-type(3){  background: red;}   匹配所有父元素下面倒數第三個div(不是第三個子元素是不是div,而是所有div中的第三個div)。如果有倒數第三個div則匹配倒數第三個,如果沒有則不匹配。

====================

div:nth-last-of-type(3){  background: red;}

匹配:倒數第三個div類型

  div:nth-last-of-type(3){  background: red;}   匹配所有父元素下面倒數第三個div(不是第三個子元素是不是div,而是所有div中的第三個div)。如果有倒數第三個div則匹配倒數第三個,如果沒有則不匹配。

相反,  div:nth-of-type(3){  background: red;}   匹配所有父元素下面第三個div(不是第三個子元素是不是div,而是所有div中的第三個div)。如果有第三個div則匹配第三個,如果沒有則不匹配。

==================

first-of-type{  background: red;}   匹配所有父元素下面第一個div(不是第一子元素是不是div,而是所有div中的第個div)。如果有一個div則匹配第一個,如果沒有div則不匹配。

這里的div不一定是要排在父元素下面的第一個子元素,只要存在該類型,且是第一個div就可以了,

-----------------------

 

last-of-type{  background: red;}   匹配所有父元素下面倒數第個div(不是倒數第一子元素是不是div,而是所有div中的倒數個div)。如果有倒數第一個div則匹配倒數第一個,如果沒有div則不匹配。

這里的div不一定是要排在父元素下面的倒數第一個子元素,只要存在該類型,且是倒數第一個div就可以了,

---------------------------------

div:only-child{ ...  }   如果父元素下面有且只有一個div子元素,則匹配。如果有兩個子元素,不匹配。存在唯一子元素,但不是div元素,則不匹配。

--------------------------------------------

div:only-child{ ...  }   不管父元素下面有多少子元素,只要存在div元素是唯一的一個div就匹配。如果存在兩個div則不匹配。

------------------------------

--------------------

a:not(last-of-type){....}  最后一個a標簽不匹配。

a:not(first-of-type){....}  第一個a標簽不匹配。

a:not(nth-child(3)){....}   第三個a標簽不匹配。 

div:not([class="one"]):not(.two):not(.four){color: red;}  除了.one  .two   .four 的div進行匹配

div:not(p){font-size: 50px;}    除了p的div進行匹配

p:not([name="one"]):not([name="three"]){background: #ff0;}    除了name="one"  name="three"的p進行匹配。

:not(table) a 將依舊會應用在table內部的<a> 上, 因為 <tr>將會被 :not()這部分選擇器匹配。

:not([class="container"]) > span{font-size: 50px}  除了.container > span ,其他span都匹配。

not(section) span{。。。} 這樣寫所有的span都會匹配,所以錯誤。

:not(ul) li a {color: red;}   匹配所有 li 下面的子元素 a 標簽。

:not(ul)>li>a {color: red;}  除了ul>li>a 其他a標簽都匹配。注意。。。。

================================

 

 

========================================================

之所以叫偽元素,那是因為在開發者工具中是找不到被控制的元素對象(因為在偽元素中被控制的只是元素的內容,而不是元素對象。),只能在瀏覽器中看到效果。

元素選擇器則不一樣,它是可在開發者工具中找到被控制的元素對象。(元素選擇器中,被控制的是整個元素對象

總共有五個偽元素:

Element::first-line   控制塊級元素的第一行。

Element::first-letter   控制塊級元素的第個字母/漢子。

Element::before    在指定元素的內容之前添加內容,是該元素的第一個子元素。

Element::after   在指定元素的內容之后添加內容,是該元素的最后一個子元素。

-------------------------------------------------------

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>偽元素</title>
    <style type="text/css">
        div::before{
            content: "我愛你你愛我嗎?";
            font-size: 20px;
            color: red;
            display: block;
            background: #abcdef;
        }
    </style>
</head>
<body>
    <div>偽元素</div>
</body>
</html>

::before 偽元素:

1,第一個子元素。

2,默認是行級元素,可以進行所有的CSS樣式設置

3,內容是通過content屬性來添加的。

4,在開發者工具中是找不到對應的標簽的。

5,在頁面顯示中內容是無法被選中的。

顯示如下:

 

 

 

 

 

 

        div::selection{
            color: red;
            background: #ff0;
        }

使用鼠標選中時,改變其CSS樣式,如下顯示:

 

=====================================

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM