前端入門——css 選擇器

碼農李石三 發佈 2022-06-03T01:51:19.072855+00:00

上文介紹了如何在網頁中使用css及css的常用知識點,今天首先介紹css 的選擇器,所謂選擇器就是通過一定的規則語法查找html元素節點,只有找到這些元素才能應用樣式。

上文介紹了如何在網頁中使用css及css的常用知識點,今天首先介紹css 的選擇器,所謂選擇器就是通過一定的規則語法查找html元素節點,只有找到這些元素才能應用樣式。

選擇器類型

css 選擇器從不精確到最精確,可分以下幾種:

  • 通用選擇器 (*)-—— 選擇所有元素
  • 標籤選擇器(tag)—— 按 HTML 標記名稱定位元素(包括偽元素)

tag 是html 標籤關鍵字,一般小寫。

  • 類選擇器(.class)—— 分別按類定位元素(包括偽類)

在html標籤上使用 class="" 屬性應用css 樣式,可以寫多個class,空格隔開,如:<p class="cls1 cls2">。

  • 屬性選擇器([attr]) —— 分別按標籤屬性定位元素(包括偽類)

屬性值html標籤上的各種屬性,如 [alt], [type="text"], [lang="en"]。

  • ID 選擇器 —— 按 id 定位元素

id 必需是唯一的,不能重複。

語法如下:

* {
  /* 通用選擇器*/
}

tag {
  /* 標籤選擇器 */
}

tag::before {
  /* 標籤選擇器和偽元素 */
}

.class {
  /* 類選擇器 */
}

.class:hover {
  /* 類選擇器和偽類 */
}

[attr] {
  /* 屬性選擇器 */
}

#id {
  /* ID 選擇器 */
}

偽元素有兩個冒號 ( ::, 比如 ::before),偽類有一個冒號 ( :, 比如 :hover)。

後面學習JavaScript 時,會學習到通過js也可以查找html元素,查找規則就是通過css 選擇器查找,如下示例:

此查詢用於獲取與選擇器匹配的所有元素:

document.querySelectorAll('article h2')

如上代碼獲取到一個html 節點集合,每個html節點都有子節點,孫子節點,依次類推.....

html 節點樹

在網頁中 html 是一個樹狀的結構,每個html 元素是一個節點,且每個節點下面又有子節點。

如下圖:

css 選擇器就是在這樣的一個樹結構裡面查找html元素節點,找到後瀏覽器渲染對應的樣式。

組合使用選擇器

選擇器除了可以單個使用,也可以組合使用,比如 #id p, #id >.class,p+h3等,按功能可分以下幾種:

  • 包含選擇器 —— 通過空格符隔開,比如:p span,指p標籤下的所有span 標籤,包括子級的子級裡面的span。

示例:

<!DOCTYPE html>
<html>
<head>
<style>
        div span{
                color:red;
        }
</style>
</head>
<body>
<div>黑色<span>紅色</span></div>
<div>
   <p>黑色<span>紅色</span><span>紅色</span></p>
</div>
<span>不是紅色</span>
<span>不是紅色</span>
</body>
</html>

顯示效果:

  • 子選擇器 —— 通過">" 隔開,比如: p>span, 指p元素下子級span,子級的子級下的span 就找不到了。

示例:

<!DOCTYPE html>
<html>
<head>
<style>
        div > span{
                color:red;
        }
</style>
</head>
<body>
<div>黑色<span>紅色</span></div>
<div>
    黑色<span>紅色</span><span>紅色</span>
    <p><span>不是紅色</span></p>
</div>
<span>不是紅色</span>
<span>不是紅色</span>
</body>
</html>

顯示效果:

  • 相鄰選擇器 —— 通過「+」隔開,比如: p+span,指和p元素同級且緊跟在p元素節點後面的span節點。

示例:

<!DOCTYPE html>
<html>
<head>
<style>
        p + span{
                color:red;
        }
</style>
</head>
<body>
  <p>黑色</p>
  <span>紅色</span>
  <span>不是紅色</span>
  <span>不是紅色</span>
</body>
</html>

顯示效果:

這裡一定注意span必須緊跟在p標籤後面,它們2個之間有任何標籤都不會起作用了。

  • 兄弟選擇器 —— 通過「~」隔開,比如:p~span,指和p同級且在其後面的所有span節點。

示例:

<!DOCTYPE html>
<html>
<head>
<style>
    p~span{
      color: red;
    }
</style>
</head>
<body>
  <p>黑色</p>
  <span>紅色</span><br>
  <span>紅色</span><br>
  <h1>標題</h1>
  <span>紅色</span>
</body>
</html>

顯示效果:

  • 分組選擇器 —— 通過「,」隔開,比如:h1,h2,h3,指這些元素共用相同的樣式。

如下示例:

h1,h2,h3{
        background-color: red;
}

整個頁面中的h1、h2、h3的背景色都是紅色,無論在哪個層次的節點中都會起作用。

選擇器優先級

不同的選擇器如果作用於同一個html元素,瀏覽器會根據優先級規則渲染樣式。

優先級高的選擇器會覆蓋優先級低的樣式,如下表從上到下優先級依次變高:

選擇器

例子

級別

標籤選擇器

h1

1

類,屬性選擇器

.class, [type="text"]

2

ID選擇器

#contact

3

內聯樣式

<div style="background: purple">

4

!important關鍵詞

div { color: green !important }

覆蓋所有

請謹慎地使用!important,它變得非常難以維護。!important 僅在絕對必要時才應使用,例如為某些您無法控制的第三方設置樣式,使用內聯樣式,以及在少數情況下使用 JavaScript 切換顯示。

總結

css 選擇器是一種查詢html元素節點的語言,當css選擇器互相組合時,會變得很複雜,所以平時儘量減少使用組合選擇器。

關於優先級,總而言之,從標籤選擇器到!important的每層級別都比前一個級別強一個數量級。

學習css,切記死記硬背,理解它很重要,結合之前學習的html 知識多練習,感謝關注。

上篇:前端入門——css 樣式表簡介

關鍵字: