選擇器

選擇器類型

基礎(chǔ)選擇器
組合選擇器
屬性選擇器
偽類選擇器
偽元素選擇器
基礎(chǔ)選擇器

選擇器 含義

1、* 通用元素選擇器,匹配頁面任何元素(這也就決定了我們很少使用)
* {
  border:3px solid red;
}
2、#id   id選擇器,匹配特定id的元素

 #id-selector{
    color: #333;
  }
3、.class    類選擇器,匹配class包含(不是等于)特定類的元素
 .class-selector{
    background: #ccc;
  }

id定位于頁面上的唯一的元素,頁面上的元素是獨(dú)一無二的就用id,一個頁面你上不要出現(xiàn)相同
id的兩個元素,這樣是不符合HTML規(guī)范的
class定位于頁面上的某一類元素

4、element   標(biāo)簽選擇器
p {
    font-size: 20px;
  }

組合選擇器:

選擇器 含義

1、E,F   多元素選擇器,用,分隔,同時匹配元素E或元素F
并列選擇器:
.p1,.p2 {
  color:red;
}
2、E F   后代選擇器,用空格分隔,匹配E元素所有的后代(不只是子元素、子元素向下遞歸)元素F
后代選擇器:
#ct .p2{
  color:blue;
}
3、E>F   子元素選擇器,用>分隔,匹配E元素的所有直接子元素
#ct> .p3{
  color:blue;
}
4、E+F   直接相鄰選擇器,匹配E元素之后的相鄰的同級元素F
.p1+p{
  color:red;
}
顯示p中的結(jié)果是紅色
5、E~F   普通相鄰選擇器(弟弟選擇器),匹配E元素之后的同級元素F(無論直接相鄰與否)
.p1~p{
  color:red;
}
6、.class1.class2 id和class選擇器和選擇器連寫的時候中間沒有分隔符,. 和 # 本身充當(dāng)分隔符的元素
h2.p2{
  color:red
}
7、element#id    id和class選擇器和選擇器連寫的時候中間沒有分隔符,. 和 # 本身充當(dāng)分隔符的元素

屬性選擇器

選擇器 含義

E[attr] 匹配所有具有屬性attr的元素,div[id]就能取到所有有id屬性的div
E[attr = value] 匹配屬性attr值為value的元素,div[id=test],匹配id=test的div
E[attr ~= value]    匹配所有屬性attr具有多個空格分隔、其中一個值等于value的元素
E[attr ^= value]    匹配屬性attr的值以value開頭的元素
E[attr $= value]    匹配屬性attr的值以value結(jié)尾的元素
E[attr *= value]    匹配屬性attr的值包含value的元素
input[type="password"]{
  width:200px;
}
去匹配屬性值為password的元素。

偽類選擇器

選擇器 含義

E:first-child   匹配元素E的第一個子元素
E:link  匹配所有未被點(diǎn)擊的鏈接
E:visited   匹配所有已被點(diǎn)擊的鏈接
E:active    匹配鼠標(biāo)已經(jīng)其上按下、還沒有釋放的E元素
E:hover 匹配鼠標(biāo)懸停其上的E元素
a:hover{
  color:blue;
}
a鏈接上常見的有l(wèi)ink,visited,active,hover.

樣式覆蓋的舉例

a{
  color:red;
}
a:visited{
  color:black;
}
a:hover{
  color:blue;
}
a:active{
  color:yellow;
}
E:focus 匹配獲得當(dāng)前焦點(diǎn)的E元素
E:lang(c)   匹配lang屬性等于c的E元素
E:enabled   匹配表單中可用的元素
E:disabled  匹配表單中禁用的元素
E:checked   匹配表單中被選中的radio或checkbox元素
E::selection    匹配用戶當(dāng)前選中的元素
E:root  匹配文檔的根元素,對于HTML文檔,就是HTML元素
E:nth-child(n)  匹配其父元素的第n個子元素,第一個編號為1
E:nth-last-child(n) 匹配其父元素的倒數(shù)第n個子元素,第一個編號為1
E:nth-of-type(n)    與:nth-child()作用類似,但是僅匹配使用同種標(biāo)簽的元素
E:nth-last-of-type(n)   與:nth-last-child() 作用類似,但是僅匹配使用同種標(biāo)簽的元素
E:last-child    匹配父元素的最后一個子元素,等同于:nth-last-child(1)
E:first-of-type 匹配父元素下使用同種標(biāo)簽的第一個子元素,等同于:nth-of-type(1)
E:last-of-type  匹配父元素下使用同種標(biāo)簽的最后一個子元素,等同于:nth-last-of-type(1)
E:only-child    匹配父元素下僅有的一個子元素,等同于:first-child:last-child或 :nth-child(1):nth-last-child(1)
E:only-of-type  匹配父元素下使用同種標(biāo)簽的唯一一個子元素,等同于:first-of-type:last-of-type或 :nth-of-type(1):nth-last-of-type(1)
E:empty 匹配一個不包含任何子元素的元素,文本節(jié)點(diǎn)也被看作子元素
E:not(selector) 匹配不符合當(dāng)前選擇器的任何元素

n的取值

1,2,3,4,5
2n+1, 2n, 4n-1
odd, even
舉例:
.child:first-child{
  color:red;
}
.child:first-of-type{
  background:blue;
}
.child:nth-of-type(2){
  background:yellow;
}

偽元素選擇器

E::first-line   匹配E元素內(nèi)容的第一行
E::first-letter 匹配E元素內(nèi)容的第一個字母
E::before   在E元素之前插入生成的內(nèi)容
.wrap::before{
  content:'aa';
}
對于這種偽元素,必須要用content,在.wrap元素內(nèi)部生成一個元素,
這個就相當(dāng)于他里面的內(nèi)容

E::after    在E元素之后插入生成的內(nèi)容
.wrap::after{
  content:'bbb'
}
在元素后面,生成‘bbb’

選擇器優(yōu)先級

如果多條規(guī)則作用于同一個元素上,且定義的相同屬性的不同值,比如
  <style>
    #test {color: #666;}
    p {color: #333;}
  </style>

  <p id="text">Text</p>
這種場景下,p元素文本顏色應(yīng)該是哪個呢?
顏色是#666,因?yàn)?test的優(yōu)先級要高于p

CSS優(yōu)先級

從高到低分別是

在屬性后面使用 !important 會覆蓋頁面內(nèi)任何位置定義的元素樣式
作為style屬性寫在元素標(biāo)簽上的內(nèi)聯(lián)樣式
id選擇器
類選擇器
偽類選擇器
屬性選擇器
標(biāo)簽選擇器
通配符選擇器
瀏覽器自定義

復(fù)雜場景

  #test p.class1 {...}
  #test .class1.class2 {...}
行內(nèi)樣式 <div style="xxx"></div> ==> a
ID 選擇器 ==> b
類,屬性選擇器和偽類選擇器 ==> c
標(biāo)簽選擇器、偽元素 ==> d

小測試

*             {}  /* a=0 b=0 c=0 d=0 -> 0,0,0,0 */
p             {}  /* a=0 b=0 c=0 d=1 -> 0,0,0,1 */
a:hover       {}  /* a=0 b=0 c=0 d=2 -> 0,0,1,1 */
ul li         {}  /* a=0 b=0 c=0 d=2 -> 0,0,0,2 */
ul ol+li      {}  /* a=0 b=0 c=0 d=3 -> 0,0,0,3 */
h1+input[type=hidden]{}  /* a=0 b=0 c=1 d=2 -> 0,0,1,1 */
ul ol li.active   {}  /* a=0 b=0 c=1 d=3 -> 0,0,1,3 */
#ct .box p        {}  /* a=0 b=1 c=1 d=1 -> 0,1,1,1 */
div#header:after  {}  /* a=0 b=1 c=0 d=2 -> 0,1,0,2 */
style=""          /* a=1 b=0 c=0 d=0 -> 1,0,0,0 */

樣式覆蓋

  div {color: #333;}
  ....
  div {color: #666;}
這樣div文案的顏色明顯會是#666
下面的會覆蓋上面的

選擇器使用經(jīng)驗(yàn)

1.遵守 CSS 書寫規(guī)范
2.使用合適的命名空間:不要隨便使用標(biāo)簽選擇器
#header .logo{
  color:red
}
content .xxx{
  
}

3.合理的復(fù)用class
.layout{
  width:300px;
}
如果layout很通用,就在HTML中需要的地方加class
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容