CSS選擇器的分類

《PHP 面試問答》

結合實際 PHP 面試,系統的彙總面試中的各種各樣的問題,嘗試提供簡潔準確的答案。如果你在 PHP 面試中遇到問題,歡迎提 Issues 交流。包含網絡協議、數據結構與算法、PHP、Web、MySQL、Redis、Linux、安全、設計模式、架構、自我介紹、離職原因、職業規劃、準備問題等部分

基本規則

通過 CSS 可以向文檔中的一組元素類型應用某些規則

利用 CSS,可以創建易於修改和編輯的規則,且能很容易地將其應用到定義的所有文本元素

規則結構

每個規則都有兩個基本部分:選擇器和聲明塊;聲明塊由一個或多個聲明組成;每個聲明則是一個屬性-值對

每個樣式表由一系列規則組成

規則的結構

如規則左邊所示,選擇器定義了將影響文檔中的哪些部分

規則右邊包含聲明塊,它由一個或多個聲明組成。每個聲明是一個 CSS 屬性和該屬性的值的組合

元素選擇器

最常見的選擇器往往是 HTML 元素。文檔的元素就是最基本的選擇器

聲明和關鍵字

聲明塊包含一個或多個聲明。聲明總有如下格式:一個屬性後面跟一個冒號,再後面是一個值,然後是一個分號。冒號和分號後面可以有0個或多個空格

如果一個屬性的值可以取多個關鍵字,在這種情況下,關鍵字通常由空格分隔。並不是所偶屬性都能接受多個關鍵字,不過確實有許多屬性是這樣

p {font: medium Helvetica;}

選擇器

通配選擇器

CSS2引入了一種新的簡單選擇器,稱爲通配選擇器(universal selector),顯示爲一個星號(*)。這個選擇器可以與任何元素匹配,就像是一個通配符
* {color: red;}

類選擇器

要應用樣式而不考慮具體涉及的元素,最常用的方法就是使用類選擇器。在使用類選擇器之前,需要修改具體的文檔標記,以便選擇器正常工作

爲了將一個類選擇器的樣式與元素關聯,必須將 class 屬性指定爲一個適當的值

*.warning {font-weight: bold;}
p.warning {font-weight: bold;}
.warning {font-weight: bold;}

多類選擇器

.warning {font-weight: bold;}
.urgent {font-style: italic;}
.warning.urgent {background: silver;}

ID 選擇器

ID 選擇器前面有一個 # 號

ID 選擇器不引用 class 屬性的值

在一個 HTML 文檔中,ID 選擇器會使用一次,且僅一次

*#first-para {font-weight: bold;}
#first-para {font-weight: bold;}

屬性選擇器

在某些標記語言中,不能使用類和 ID 選擇器。爲了解決這個問題,CSS2引入了屬性選擇器(attribute selector),它可以根據元素的屬性及屬性值來選擇元素

簡單屬性選擇

如果希望選擇某個屬性的元素,而不討論該屬性的值是什麼,可以使用一個簡單屬性選擇器
<h1 class="hoopla">Hello</h1>
<h1 class="severe">Serenity</h1>
<h1 class="fancy">Fooling</h1>
h1[class] {color: silver;}
img[alt] {border: 3px solid red;} /*對所有帶有 alt 屬性的圖像應用樣式*/
*[title] {font-weight: bold;} /*包含標題(title)信息的所有元素變爲粗體顯示*/

根據具體屬性值選擇

除了選擇有某些屬性的元素,還可以進一步縮小選擇範圍,只選擇有特定屬性值的元素
/*將指向 Web 服務器上某個特定超鏈接變成粗體*/
a[href="https://blog.maplemark.cn"] {font-weight: bold;}
<planet>Venus</planet>
<planet moons="1">Earth</planet>
<planet moons="2">Mars</planet>
/*將第二個元素文本變成粗體*/
planet[moons="1"] {
    font-weight: bold;
}

根據部分屬性值選擇

如果屬性能接受詞列表(詞之間用空格分隔),可以根據其中的任意一個詞進行選擇
img[title~="Figure"] {border: 1px solid gray;}
  • 子串匹配屬性選擇器
類型 描述
[foo^="bar"] 選擇 foo 屬性值以"bar"開頭的所有元素
[foo$="bar"] 選擇 foo 屬性值以"bar"結尾的所有元素
[foo*="bar"] 選擇 foo 屬性值中包含子串"bar"的所有元素

特定屬性選擇類型

<h1 lang="en">Hello!</h1>
<p lang="en-us">Greetings!</p>
<div lang="en-au">G'day!</div>
<p lang="fr">Bonjour!</p>
<h4 lang="cy-en">Jrooana!</h4>
*[lang|="en"] {color: white;}
這種屬性選擇器最常見的用途是匹配語言值

後代選擇器

文檔樹結構

通過文檔樹結構,可以很形象的理解什麼是後代選擇器(descendant selector),也稱爲包含選擇器/上下文選擇器。定義後代選擇器就是來創建一些規則,它們僅在某些結構中起作用,而在另外一些結構中不起作用
<div class="row"><p>文字一</p></div>
<div class="row"><div><p>文字一後代</p></div></div>
<div class="row">文字二</div>
<p>文字三</p>
.row p{color: red;}

選擇子元素

在某些情況下,可能並不想選擇一個任意的後代元素;而是希望縮小範圍,只選擇另一個元素的子元素
.row > p{color: red;}

選擇相鄰兄弟元素

<ol>
    <li>List item 1</li>
    <li>List item 1</li>
    <li>List item 1</li>
    <li>List item 1</li>
</ol>
<ul>
    <li>A list item</li>
    <li>Another list item</li>
    <li>Yet Another list item</li>
    <li>Lat list item</li>
</ul>
ol + ul {font-weight: bold;} /*將命中 ul*/
ul 必須緊跟在 ol 後面

僞類選擇器

錨類型稱爲僞類

鏈接僞類

CSS2.1定義了兩個只應用於超鏈接的僞類

僞類名 描述
:link 指示作爲超鏈接並指向一個未訪問地址的所有錨
:visited 指示作爲已訪問超鏈接的所有錨
a {color: black;}
a:link {color: bule;}
a:visited {color: red;}

動態僞類

CSS2.1定義了3個動態僞類,它們可以根據用戶行爲改變文檔的外觀
僞類名 描述
:focus 指示當前擁有輸入焦點的元素
:hover 指示鼠標指針停留在哪個元素上
:active 指示被用戶輸入激活的元素
僞類順序:link-visited-focus-hover-active

選擇第一個子元素

可以使用靜態僞類:first-child 來選擇元素的第一個子元素
p:first-child {font-weight: bold;}

僞元素選擇器

就像僞類爲錨指定幻像類一樣,僞元素能夠在文檔中插入假象的元素,從而得到某種效果。CSS2.1中定義了4個僞元素:設置首字母樣式、設置第一行樣式、設置之前和之後元素的樣式

設置首字母樣式

p:first-letter {color: red;}

設置第一行樣式

p:first-line {color: purple;}

:first-letter 和 :first-line 的限制

在 CSS2 中,:first-letter 和:first-line 僞元素只能應用於標記或段落之類的塊級元素,而不能應用於超鏈接等的行內元素

設置之前和之後元素的樣式

p:before {color: black;}
p:after {color: red;}
本文轉載自楓葉林博客,《CSS選擇器的分類》
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章