CSS選擇器學(xué)習(xí)

CSS選擇器是學(xué)習(xí)CSS的一個(gè)核心部分第煮,HTML頁(yè)面中的元素就是通過(guò)CSS選擇器來(lái)進(jìn)行控制的,熟練使用CSS選擇器能迅速根據(jù)文檔結(jié)構(gòu)對(duì)文檔樣式進(jìn)行一對(duì)一夺溢,一對(duì)多或者多對(duì)一的控制和調(diào)整佃牛。


一、CSS 元素選擇器(類型選擇器)

文檔的元素是最基本的選擇器也是最常見(jiàn)的選擇器牛隅,如果設(shè)置 HTML 的樣式,選擇器通常將是某個(gè) HTML 元素酌泰,比如 p媒佣、h1em陵刹、a默伍,甚至可以是 html本身,如:

html {margin: 0; padding: 0;}
h1 {font-family: "華文楷體"; color:blue;}
a {font-size:16px; text-decoration: none;}

在 W3C 標(biāo)準(zhǔn)中衰琐,元素選擇器又稱為類型選擇器(type selector)也糊。類型選擇器匹配文檔語(yǔ)言元素類型的名稱。類型選擇器匹配文檔樹(shù)中該元素類型的每一個(gè)實(shí)例羡宙,所以類似HTML, XML等標(biāo)記語(yǔ)言都可以通過(guò)類型選擇器來(lái)匹配狸剃,甚至一些自定義標(biāo)簽都會(huì)生效。

二狗热、CSS 類選擇器

類選擇器允許以一種獨(dú)立于文檔元素的方式來(lái)指定樣式钞馁。該選擇器可以單獨(dú)使用,也可以與其他元素結(jié)合使用匿刮。

提示: 只有適當(dāng)?shù)貥?biāo)記文檔后(指定claess屬性)僧凰,才能使用這些選擇器,所以使用這兩種選擇器通常需要先做一些構(gòu)想和計(jì)劃熟丸。要應(yīng)用樣式而不考慮具體設(shè)計(jì)的元素允悦,最常用的方法就是使用類選擇器

語(yǔ)法: 類選擇器前面有個(gè)"."虑啤。

/* 基本語(yǔ)法 */
.important {color:red;}
/* 結(jié)合通配符使用 */
*.important {color:red;}
/* 結(jié)合元素使用隙弛,解釋為:其 class 屬性值為 important 的所有 p 元素 */
p.important {color:red;}

CSS多類選擇器

HTML元素的class屬性可以包含一個(gè)詞列表,各個(gè)詞之間用空格分隔狞山,詞的順序無(wú)關(guān)緊要全闷。如:

<p class="important">
    This paragraph is a very important.
</p>

<p class="warning">
    This paragraph is a very warning.
</p>

<p class="important warning">
    This paragraph is a very important warning.
</p>

設(shè)置class 為 important 的所有元素都是粗體,而 class 為 warning 的所有元素為斜體萍启,class 中同時(shí)包含 important 和 warning 的所有元素還有一個(gè)銀色的背景 总珠。就可以寫(xiě)作:

.important {font-weight:bold;}
.warning {font-style:italic;}
/* 注意:在HTML元素的class屬性中的兩個(gè)詞需要用“空格”隔開(kāi),在CSS中不能用“空格”隔開(kāi) */
.important.warning {background:silver;}

注意: 把兩個(gè)類選擇器鏈接在一起勘纯,僅可以選擇同時(shí)包含這些類名的元素(類名的順序不限)局服,如果一個(gè)多類選擇器包含類名列表中沒(méi)有的一個(gè)類名,匹配就會(huì)失敗驳遵。如:

p.important.urgent {background:silver;}

這個(gè)選擇器將只匹配 class 屬性中同時(shí)包含詞 important 和 urgent 的 p 元素淫奔。因此,如果一個(gè) p 元素的 class 屬性中只有詞 important 和 warning堤结,將不能匹配唆迁。不過(guò)鸭丛,它能匹配以下元素:

<!-- 沒(méi)有同時(shí)包含 important 和 urgent ,不能匹配 -->
<p class="important warning">
    This paragraph is a very important.
</p>

<!-- 同時(shí)包含了 important 和 urgent 唐责,可以匹配鳞溉,與出現(xiàn)的順序無(wú)關(guān) -->
<p class="important warning urgent">
    This paragraph is a very important.
</p>

三、CSS ID選擇器

語(yǔ)法: ID選擇器前面有個(gè)"#"鼠哥。

/* 基本語(yǔ)法 */
#intro {font-weight:bold;}
/* 配合通配符使用 */
*#intro {font-weight:bold;}

與Javascript的區(qū)別:

/* 在同一個(gè)頁(yè)面中能匹配所有 ID 為 mostImportant 的元素 */
#mostImportant {color:red; background:yellow;}
/* 在同一個(gè)頁(yè)面中只能獲取文檔中第一個(gè) ID 為 mostImportant 的內(nèi)容 */
document.getElementById("mostImportant").innerHTML;
<!-- 以下內(nèi)容在同一個(gè)html文件中熟菲,當(dāng)然這不符合標(biāo)準(zhǔn),此處僅用于說(shuō)明區(qū)別 -->
<h1 id="mostImportant">This is important!</h1>
<em id="mostImportant">This is important!</em>
<ul id="mostImportant">This is important!</ul>

與類選擇器的區(qū)別:

區(qū)別 1:只能在文檔中使用一次
不同于類選擇器朴恳,在一個(gè) HTML 文檔中抄罕,ID 選擇器會(huì)使用一次,而且僅一次菜皂。

區(qū)別 2:不能使用 ID 詞列表
不同于類選擇器贞绵,ID 選擇器不能結(jié)合使用,因?yàn)?ID 屬性不允許有以空格分隔的詞列表恍飘。

注意:

  • 關(guān)于命名:idclass屬性不要以數(shù)字開(kāi)頭榨崩,數(shù)字開(kāi)頭的ID在 Mozilla/Firefox 瀏覽器中不起作用;
  • 關(guān)于大小寫(xiě):idclass在HTML和XHTML中是區(qū)分大小的章母。

四母蛛、CSS 屬性選擇器

CSS 2 引入了屬性選擇器。屬性選擇器可以根據(jù)元素的屬性屬性值來(lái)選擇元素乳怎。

簡(jiǎn)單屬性選擇:

/* 通過(guò)單個(gè)屬性選擇 */
*[title] {color:red;}
a[href] {color:red;}

/* 通過(guò)多個(gè)屬性選擇彩郊,注意:匹配同時(shí)含有多個(gè)屬性的元素 */
a[href][title] {color:red;}
img[alt][title] {border: 5px solid red;}

根據(jù)完全匹配的屬性值選擇:

/* 通過(guò)單個(gè)屬性值選擇 */
a[] {color: red;}

/* 通過(guò)多個(gè)屬性值選擇 */
a[] {color: red;}

根據(jù)部分屬性值選擇

選擇器 描述
[attribute] 用于選取帶有指定屬性的元素。
[attribute = value] 用于選取帶有指定屬性和值的元素蚪缀。
[attribute ~= value] 用于選取屬性值中包含指定詞匯的元素秫逝,該值匹配是沒(méi)有空格的字符串
[attribute = value] 用于選取帶有以指定值開(kāi)頭的元素询枚,該值匹配的是value或value-违帆。
[attribute ^= value] 匹配屬性值以指定值開(kāi)頭的每個(gè)元素,該值可以是任意值金蜀,推薦使用刷后。
[attribute $= value] 匹配屬性值以指定值結(jié)尾的每個(gè)元素。
[attribute *= value] 匹配屬性值中包含指定值的每個(gè)元素渊抄,該值可以是任意值尝胆,推薦使用

五护桦、CSS 后代選擇器(包含選擇器)

后代選擇器可以選擇作為某元素后代的元素含衔。

語(yǔ)法: 父元素和后代元素從左至右排列,中間用空格隔開(kāi)。

/* 匹配 h1 下所有的 em 元素 */
h1 em {color:red;}

/* 匹配所有 class 為 "maincontent" 的 div下所有的 a 元素 */
div.maincontent a {color:blue;}
<!-- 匹配成功 -->
<h1>This is a <em>important</em> heading</h1>

<!-- 匹配失敗 -->
<p>This is a <em>important</em> paragraph.</p>

注意: 有關(guān)后代選擇器有一個(gè)易被忽視的方面抱慌,即兩個(gè)元素之間的層次間隔可以是無(wú)限的逊桦。

例如眨猎,如果寫(xiě)作 ul em抑进,這個(gè)語(yǔ)法就會(huì)選擇從 ul 元素繼承的所有 em 元素,而不論 em 的嵌套層次多深睡陪。

因此寺渗,ul em 將會(huì)選擇以下標(biāo)記中的所有 em 元素:

<ul>
  <!-- 此處會(huì)匹配 -->
  <em>0</em>
  <li>List item 1
    <ol>
      <li>List item 1-1</li>
      <li>List item 1-2</li>
      <li>List item 1-3
        <ol>
          <li>List item 1-3-1</li>
          <!-- 此處也會(huì)匹配 -->
          <li>List item <em>1-3-2</em></li>
          <li>List item 1-3-3</li>
        </ol>
      </li>
      <li>List item 1-4</li>
    </ol>
  </li>
  <li>List item 2</li>
  <li>List item 3</li>
</ul>

六、CSS 子元素選擇器

與后代選擇器相比兰迫,子元素選擇器(Child selectors)只能選擇作為某元素子元素的元素信殊。

如果你不希望選擇任意的后代元素,而是希望縮小范圍汁果,只選擇某個(gè)元素的子元素涡拘,那就要使用子元素選擇器。

后代元素: 所有由其包裹的元素据德;

子代元素: 由其包裹鳄乏,層級(jí)結(jié)構(gòu)只比其小一級(jí)的元素;

語(yǔ)法: 父元素和子元素從左至右排列棘利,中間用 > 隔開(kāi)橱野。

/* 選擇只作為 h1 元素子元素的 strong 元素 */
h1 > strong {color:red;}
<!-- 匹配成功 -->
<h1>This is <strong>very</strong> <strong>very</strong> important.</h1>
<!-- 匹配失敗 -->
<h1>This is <em>really <strong>very</strong></em> important.</h1>

結(jié)合后臺(tái)選擇器和子選擇器

/* 選擇所有 class 為 "company" 的 table 的所有后代 td 的子元素 p */
table.company td > p

七、CSS 相鄰兄弟選擇器

可選擇緊接在另一元素后的元素善玫,且二者有相同父元素水援。

語(yǔ)法:兄弟元素從左至右排列,中間用 + 隔開(kāi)茅郎。

/* 選擇緊接在 h1 后(前面的元素不能匹配)的元素蜗元,而且二者有相同的父元素 */
h1 + p {color: red;}
<!-- 匹配失敗 -->
<p>第一個(gè)段落</p>
<h1>標(biāo)題</h1>
<!-- 匹配成功 -->
<p>第二個(gè)段落</p>
<!-- 匹配失敗 -->
<p>第二個(gè)段落</p>

總結(jié):

選擇器 描述
h1 p 后代選擇器,選擇所有的后代元素系冗。
h1 , p 多元素選擇器奕扣,用","分隔,同時(shí)匹配元素h1或元素p毕谴。
h1 > p 子元素選擇器成畦,選擇其子元素。
h1 + p 相鄰兄弟選擇器涝开,選擇其后面相鄰的兄弟元素(有相同的父元素)循帐。
h1 ~ p 一般兄弟選擇器,選擇其后面所有的兄弟元素(有相同的父元素)舀武。

八拄养、CSS 偽類

用于向某些選擇器添加特殊的效果。

語(yǔ)法: 選擇器和偽類之間通過(guò) : 隔開(kāi)。

/* 選擇器 : 偽類 */
selector : pseudo-class {property: value}
/* CSS 類也可與偽類搭配使用 */
selector.class : pseudo-class {property: value}

錨偽類

a:link {color: #FF0000}     /* 未訪問(wèn)的鏈接 */
a:visited {color: #00FF00}  /* 已訪問(wèn)的鏈接 */
a:hover {color: #FF00FF}    /* 鼠標(biāo)移動(dòng)到鏈接上 */
a:active {color: #0000FF}   /* 選定的鏈接 */
  • 在 CSS 定義中瘪匿,a:hover 必須被置于 a:link 和 a:visited 之后跛梗,才是有效的。
  • 在 CSS 定義中棋弥,a:active 必須被置于 a:hover 之后核偿,才是有效的。
  • 偽類名稱對(duì)大小寫(xiě)不敏感顽染。

:first-child 偽類和:laft-child偽類

可以使用 :first-child 偽類來(lái)選擇元素的第一個(gè)子元素漾岳。

<div>
  <!-- 第一個(gè) p 元素 -->
  <p>These are the necessary steps:</p>
    <ul>
         <!-- 第一個(gè) li 元素 -->
        <li>Intert Key</li>
        <li>Turn key
            <!-- 第一個(gè) strong 元素 -->
            <strong>clockwise</strong>
         </li>
        <li>Push accelerator</li>
    </ul>
     <!-- 最后一個(gè) p 元素 -->
    <p>Do
      <!-- 第一個(gè) em 元素 -->
      <em>not</em>
      push the brake at the same time as the accelerator.
    </p>
</div>
/* 選擇的就是第一個(gè) p 元素,而不是 p 元素的第一個(gè)子元素 */
p:first-child {font-weight: bold;}
/* 選擇的就是最后一個(gè) p 元素粉寞,而不是 p 元素的最后一個(gè)子元素 */
p:last-child {font-weight: bold;}
/* 選擇的就是第一個(gè) li 元素尼荆,而不是 li 元素的第一個(gè)子元素 */
li:first-child {text-transform: uppercase;}
/* 通過(guò)CSS設(shè)置字母的大小寫(xiě) */
li:first-child {text-transform: lowercase;}

偽類匯總

選擇器 含義
E:first-child 匹配元素E的第一個(gè)子元素
E:link 匹配所有未被點(diǎn)擊的鏈接
E:visited 匹配所有已被點(diǎn)擊的鏈接
E:active 匹配鼠標(biāo)已經(jīng)其上按下、還沒(méi)有釋放的E元素
E:hover 匹配鼠標(biāo)懸停其上的E元素
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 匹配文檔的根元素唧垦,對(duì)于HTML文檔捅儒,就是HTML元素
E:nth-child(n) 匹配其父元素的第n個(gè)子元素,第一個(gè)編號(hào)為1
E:nth-last-child(n) 匹配其父元素的倒數(shù)第n個(gè)子元素振亮,第一個(gè)編號(hào)為1
E:nth-of-type(n) 與:nth-child()作用類似巧还,但是僅匹配使用同種標(biāo)簽的元素
E:nth-last-of-type(n) 與:nth-last-child() 作用類似,但是僅匹配使用同種標(biāo)簽的元素
E:last-child 匹配父元素的最后一個(gè)子元素双炕,等同于:nth-last-child(1)
E:first-of-type 匹配父元素下使用同種標(biāo)簽的第一個(gè)子元素狞悲,等同于:nth-of-type(1)
E:last-of-type 匹配父元素下使用同種標(biāo)簽的最后一個(gè)子元素,等同于:nth-last-of-type(1)
E:only-child 匹配父元素下僅有的一個(gè)子元素妇斤,等同于:first-child:last-child或 :nth-child(1):nth-last-child(1)
E:only-of-type 匹配父元素下使用同種標(biāo)簽的唯一一個(gè)子元素摇锋,等同于:first-of-type:last-of-type或 :nth-of-type(1):nth-last-of-type(1)
E:empty 匹配一個(gè)不包含任何子元素的元素,文本節(jié)點(diǎn)也被看作子元素
E:not(selector) 匹配不符合當(dāng)前選擇器的任何元素

偽元素

偽元素可用于定位文檔中包含的文本站超,為與偽類進(jìn)行區(qū)分荸恕,偽元素使用雙冒號(hào) :: 定義,但單冒號(hào) : 也能被識(shí)別死相。

屬性 描述
::first-letter 向文本的第一個(gè)字母添加特殊樣式融求。
::first-line 向文本的首行添加特殊樣式。
::before 在元素之前添加內(nèi)容算撮。
::after 在元素之后添加內(nèi)容生宛。
::focue 在元素之后添加內(nèi)容。

九肮柜、參考資料

W3School CSS 選擇器

CSS選擇器詳解

十分鐘搞定CSS選擇器

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末陷舅,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子审洞,更是在濱河造成了極大的恐慌莱睁,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異仰剿,居然都是意外死亡创淡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)南吮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)琳彩,“玉大人,你說(shuō)我怎么就攤上這事旨袒≈耄” “怎么了术辐?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵砚尽,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我辉词,道長(zhǎng)必孤,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任瑞躺,我火速辦了婚禮敷搪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘幢哨。我一直安慰自己赡勘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布捞镰。 她就那樣靜靜地躺著闸与,像睡著了一般。 火紅的嫁衣襯著肌膚如雪岸售。 梳的紋絲不亂的頭發(fā)上践樱,一...
    開(kāi)封第一講書(shū)人閱讀 49,929評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音凸丸,去河邊找鬼拷邢。 笑死,一個(gè)胖子當(dāng)著我的面吹牛屎慢,可吹牛的內(nèi)容都是我干的瞭稼。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼腻惠,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼环肘!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起妖枚,我...
    開(kāi)封第一講書(shū)人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤廷臼,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體荠商,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡寂恬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了莱没。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片初肉。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖饰躲,靈堂內(nèi)的尸體忽然破棺而出牙咏,到底是詐尸還是另有隱情,我是刑警寧澤嘹裂,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布妄壶,位于F島的核電站,受9級(jí)特大地震影響寄狼,放射性物質(zhì)發(fā)生泄漏丁寄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一泊愧、第九天 我趴在偏房一處隱蔽的房頂上張望伊磺。 院中可真熱鬧,春花似錦删咱、人聲如沸屑埋。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)摘能。三九已至,卻和暖如春即寡,著一層夾襖步出監(jiān)牢的瞬間徊哑,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工聪富, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留莺丑,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓墩蔓,卻偏偏與公主長(zhǎng)得像梢莽,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子奸披,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

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

  • 1.CSS 元素選擇器 最常見(jiàn)的 CSS 選擇器是元素選擇器昏名。換句話說(shuō),文檔的元素就是最基本的選擇器阵面。如果設(shè)置 H...
    饑人谷_小侯閱讀 855評(píng)論 0 1
  • 問(wèn)答題47 /72 常見(jiàn)瀏覽器兼容性問(wèn)題與解決方案轻局? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,737評(píng)論 1 92
  • class 和 id 的使用場(chǎng)景 class:(.class)一個(gè)標(biāo)簽可以有多個(gè)類且同一個(gè)類可以用到不同的標(biāo)簽上洪鸭,...
    饑人谷_哈嚕嚕閱讀 279評(píng)論 0 0
  • 6.4【Day83 九命大頭貓】 《明朝那些事兒》 這篇3里多了很多宿命的感覺(jué),一些人一些事就那么不經(jīng)意間發(fā)生了仑扑。...
    _原野閱讀 120評(píng)論 0 0
  • 前幾天請(qǐng)朋友掃碼助我學(xué)畫(huà)的結(jié)果出來(lái)了,獎(jiǎng)勵(lì)了相應(yīng)的優(yōu)惠卷储藐。開(kāi)心俱济!開(kāi)心!開(kāi)心8撇(小灶許愿成真了蛛碌,就是這么奇妙!嘎嘎嘎...
    青墨QINGMO閱讀 262評(píng)論 3 6