如何使用 CSS 選擇器定位網頁的一部分

如何使用 CSS 選擇器定位網頁的一部分

級聯樣式表 (CSS) 允許您轉換網頁的外觀。從字體和顏色到間距和整體佈局,各種設計工具都觸手可及。儘管 CSS 整體上是一門複雜的語言,但您只需了解兩個基本概念即可開始。

這一切都始於準確確定您想要設計樣式的頁面的哪個部分。

CSS = 選擇器 + 聲明

CSS 文件包含一系列描述 HTML 文件格式的規則。每條規則由兩部分組成:設計什麼樣式,以及如何設計樣式。第一部分使用一系列稱為“選擇器”的術語進行控制。

如何使用 CSS 選擇器定位網頁的一部分

本文中的示例包括樣式聲明,但它們不是重點:選擇器本身才是重點。

歷史上,有三個 CSS 選擇器級別(或版本)具有不同程度的瀏覽器支持。根據Can I Use 的說法,到 2020 年,全球超過 99% 的用戶都可以使用這些服務。

1 級選擇器

級別 1 介紹了四種基本類型的選擇器,涵蓋了大量案例,即使在今天也是如此。

圖案 火柴
E 所有 E 元素
.c class="c" 的所有元素
#myid id="myid" 的元素
E F E 元素內的 F 元素
偽類
E:link 指向以前未訪問過的頁面的超鏈接
E:visited 指向已訪問頁面的超鏈接
E:active 當前選擇的超鏈接
偽元素
E::first-line E 元素的第一個格式化行
E::first-letter E 元素的第一個格式化字母

類型選擇器

最簡單的選擇器是“類型選擇器”。它針對元素的所有實例,例如段落或粗體文本:

p { margin-bottom: 0; } b { font-family: sans-serif; }

類選擇器

class 屬性允許向 HTML 元素添加更多語義,例如特定類型的段落。可以在 CSS 中選擇此類元素,如下所示:

.intro { font-weight: bold; }

此選擇器將匹配:

但請注意,它也會匹配:

如果您只想將其應用於介紹段落,則可以結合使用類型選擇器和類選擇器:

p.intro { font-weight: bold; }

ID選擇器

HTML id 屬性在文檔中應該是唯一的,例如,如果您有:

那應該是唯一具有“內容”ID 的元素。ID 選擇器允許您定位文檔中的特定元素:

#contents { color: #333; }

後代選擇器

嚴格來說,是一個“組合器”,因為這個選擇器完全是關於兩個其他選擇器之間的空間。正如我們在 DOM 概述中所解釋的那樣,HTML 是分層。後代選擇器允許一個元素通過它在另一個元素內的上下文來標識:

table b { font-weight: normal; }

偽類和元素

偽選擇器的目標類或元素並不明確存在但無論如何都可用。將它們視為特殊的內容獎勵:

p::first-line { text-transform: uppercase; }

選擇器列表

如果您想對每個選擇器應用相同的規則集,請使用逗號將選擇器組合成一個列表。代替:

th { padding: 1em; } td { padding: 1em; }

你可以寫:

th, td { padding: 1em; }

特異性

樣式表是一系列使用選擇器匹配元素的規則,但是當多個規則匹配給定元素時會發生什麼?由此產生的行為受“特異性”控制,該“特異性”定義了在以下情況下使用的規則:

p.intro { color: black; } p { color: gray; }

在這種情況下,優先規則由其特殊性定義,如下所示:

  1. ID 選擇器(`#contents`)是最具體的。
  2. 類選擇器(`.author`)不太具體。
  3. 類型選擇器(`p`)是最不具體的。

在計算特異性時,每個級別只考慮兩個選擇器在較高級別的分數相同,因此“#contents”比“article.news p.author.special”更具體,因為前者在ID選擇器上“勝出”。

2 級選擇器

CSS 選擇器的下一個修訂版引入了屬性選擇器,擴展了偽類和偽元素,並添加了兩個新的組合器。

圖案 火柴
* 任何元素
E > F E 元素的 F 元素子元素
E + F 緊跟在 E 元素之後的 F 元素
屬性選擇器
E[foo] 具有“foo”屬性的 E 元素
E[foo="bar"] 一個 E 元素,其“foo”屬性正好是“bar”
E[foo~="bar"] 一個 E 元素,其“foo”屬性是一個空格分隔值列表,其中一個是“bar”
E[foo|="en"] 一個 E 元素,其“foo”屬性具有以“en”開頭的連字符分隔的值列表
偽類
E:first-child 一個 E 元素,其父元素的第一個子元素
E:lang(fr) 語言“fr”中類型 E 的元素
偽元素
E::before 在 E 元素的內容之前生成的內容
E::after 在 E 元素的內容之後生成的內容

通用選擇器

“*”匹配任何元素。這通常不是很有用,但如果您想重置任何默認邊距,例如,您可以這樣做:

* { margin: 0; }

屬性選擇器

屬性選擇器允許非常具體地定位樣式,通過元素的屬性過濾:

a[title] { text-decoration: underline dotted; }

子組合器:直接在另一個元素內部的元素

類似於後代組合器,但這個組合器只匹配直接的孩子,而不是樹下任何較低的後代。例如,“ul > li”將僅匹配此處的“Section 1”文本,而不匹配“Section 1.1”:



  • Section 1

    • Section 1.1

    • Section 1.2




    •  
    •  
    •  
  •  

相鄰兄弟組合:下一個兄弟

h1 + p { font-weight: bold; }

通常用於控制邊距或沒有特定類的介紹性段落,此選擇器僅匹配緊跟在另一個元素之後的一個元素。在這個例子中,這裡只會匹配第一段,而不是第二段:

Contents


some extra text

Introductory paragraph

Following paragraph

請注意,這個選擇器在決定下一個兄弟是什麼時只考慮元素而不是文本。

遺產

一些 CSS 屬性從祖先元素繼承它們的值。在實踐中,這意味著——例如——設置“body”元素的字體意味著每個段落、表格等也使用相同的字體。

當然,這正是您所期望的,但請考慮一個不繼承的屬性:例如“margin”。您不希望每個單獨的段落或粗體文本的每一位都與整個文檔具有相同的邊距。

相關:您可以在 10 分鐘內學會的簡單 CSS 代碼示例

一個好的經驗法則是盡可能普遍地定位元素——當一個簡單的“主體”選擇器可以做到時,不要定位每個單獨的元素。

3 級選擇器

在這個級別添加了更多的偽類,以及一些屬性選擇器和一個新的組合器。

圖案 火柴
E ~ F 前面有 E 元素的 F 元素
屬性選擇器
E[foo^="bar"] 一個 E 元素,其“foo”屬性以字符串“bar”開頭
E[foo$="bar"] 一個 E 元素,其“foo”屬性以字符串“bar”結尾
E[foo*="bar"] 一個 E 元素,其“foo”屬性包含子字符串“bar”
偽類
E:root 一個 E 元素,文檔的根
E:nth-child(n) 一個 E 元素,其父元素的第 n 個子元素
E:nth-last-child(n) 一個 E 元素,它的父元素的第 n 個子元素,從最後一個開始計數
E:nth-of-type(n) 一個 E 元素,它的類型的第 n 個兄弟元素
E:nth-last-of-type(n) 一個 E 元素,它的類型的第 n 個兄弟元素,從最後一個開始計數
E:last-child 一個 E 元素,其父元素的最後一個子元素
E:first-of-type 一個 E 元素,其類型的第一個兄弟元素
E:last-of-type 一個 E 元素,其類型的最後一個兄弟元素
E:only-child 一個 E 元素,它的父元素的唯一子元素
E:only-of-type 一個 E 元素,只有它的類型的兄弟
E:empty 一個沒有子元素的 E 元素(包括文本節點)
E:target 作為引用 URI 的目標的 E 元素
E:enabled 啟用的用戶界面元素 E
E:disabled 禁用的用戶界面元素 E
E:checked 檢查的用戶界面元素 E
E:not(s) 不匹配簡單選擇器的 E 元素

屬性選擇器

您可以選擇具有以給定 value: 開頭、以給定 value:a[href^="https:"]結尾img[src$=".gif"]或包含 value:的屬性的元素a[*="value"]

偽類

額外的偽類包括“:last-child”、“:empty”(匹配一個沒有內容的元素)和“:checked”,它匹配一個元素,比如復選框輸入,但只有當它被選中時。

一般兄弟組合:一個跟隨的兄弟

類似於 2 級的相鄰兄弟組合器,它匹配任何一個接一個的兄弟,而不僅僅是下一個:

h1 ~ p { font-size: 110%; }

CSS 選擇器以及如何使用它們

現在您幾乎了解了有關如何使用 CSS 選擇網頁的一部分的所有信息。您現在已準備好使用涵蓋從顏色到佈局的所有內容的各種 CSS 屬性來設置頁面樣式。

圖片來源:Pankaj Patel/ Unsplash


如何使用 Python 作為命令行計算器

如何使用 Python 作為命令行計算器

雖然您可以在計算機上使用圖形計算器,但 Python 編程語言解釋器可以兼作桌面計算器。它在 Python 社區中非常流行,以至於官方教程中都提到了它。下面介紹如何將 Python 用作計算器。

面向程序員的 8 個最佳 Java 博客

面向程序員的 8 個最佳 Java 博客

作為程序員,你應該接受挑戰才能生存,並在開發或編程領域創造一些奇蹟。因此,如果您正在尋求學習高級編程語言以提高您的職業技能,Java 是最好的前景之一。

初學者開始使用 Python 的 7 個重要命令

初學者開始使用 Python 的 7 個重要命令

如果您有一個全面的路線圖,詳細說明初學者應學習哪些概念以及如何進一步進步以達到下一個里程碑,那麼學習 Python 等新編程語言將變得輕而易舉。即使是中級程序員也應該經常複習他們的基礎知識,為自己打下堅實的基礎。

響應式網頁設計原則

響應式網頁設計原則

如今,構建一個根據瀏覽器或設備調整其用戶界面的網站或應用程序是一種常見的做法。有兩種方法可以實現這一目標。第一個涉及為不同的設備創建不同版本的網站或應用程序。但它效率低下,並可能導致不可預測的錯誤。

如何使用 C++、Python 和 JavaScript 計算數字中的位數

如何使用 C++、Python 和 JavaScript 計算數字中的位數

處理數字是編程的一個組成部分。每種編程語言都支持以多種不同方式操作數字。在本文中,您將學習如何使用迭代、基於日誌和基於字符串的方法查找整數中的總位數。

用於容器管理的 9 個最佳 Docker 替代方案

用於容器管理的 9 個最佳 Docker 替代方案

容器對於虛擬環境中的軟件開發、部署和管理非常有益。Docker 在容器化過程中很有用,但它不是唯一的平台。如果您正在尋找 Docker 的替代品,那就別無所求。此列表展示了一些功能豐富且高效的 Docker 替代方案,可用於您的下一個項目。

SQL 與 NoSQL:下一個項目的最佳數據庫是什麼?

SQL 與 NoSQL:下一個項目的最佳數據庫是什麼?

SQL 與 NoSQL:下一個項目的最佳數據庫是什麼?

如何在您的 WordPress 帖子中嵌入推文

如何在您的 WordPress 帖子中嵌入推文

在您的 WordPress 帖子中嵌入第三方服務是一種吸引訪問者興趣的令人興奮的方式。嵌入的內容還提供了使掃描更容易的視覺提示。WordPress 使添加此類內容變得容易。

如何使用 npkill 刪除節點模塊文件夾

如何使用 npkill 刪除節點模塊文件夾

Node.js 是一個 JavaScript 運行時環境,允許您在 Web 瀏覽器之外運行 JavaScript,使其成為開發各種應用程序的流行選擇。它的流行部分是由於大量的 NPM 包可以簡化開發人員的體驗。

如何編寫和編譯你的第一個 Solidity 代碼

如何編寫和編譯你的第一個 Solidity 代碼

Solidity 是以太坊區塊鏈上智能合約使用的編程語言。它是一種靜態類型的、面向對象的編程語言。

前 5 大徽章將增強您的 GitHub 存儲庫

前 5 大徽章將增強您的 GitHub 存儲庫

GitHub 徽章可以通過為用戶提供一種快速的方法來捕獲存儲庫指標來提高存儲庫的可讀性。徽章可以嵌入到您的 README.md 中,以向其他開發人員闡明您的項目的重要性和必要性。因此,讀者可以通過檢查附加的徽章快速了解存儲庫。

什麼是國際程序員節?今年的 3 種慶祝方式

什麼是國際程序員節?今年的 3 種慶祝方式

國際慶祝日是對社會事務、歷史日子和各自職業給予認可的好方法。國際程序員日慶祝程序員在改善日常生活方面所發揮的作用。我們生活的文明世界是程序員辛勤工作的產物。

Python String format() 方法如何工作?10個例子

Python String format() 方法如何工作?10個例子

無論是數據庫查詢還是數學運算的結果,Python 字符串格式方法都提供了一種更加動態和吸引人的方式來向用戶呈現結果。

Visual Studio 2022 與 2019:您現在應該升級嗎?解釋

Visual Studio 2022 與 2019:您現在應該升級嗎?解釋

今年早些時候,微軟向狂野的編程世界發布了 Visual Studio 2022 的預覽版。這是個好消息!這是一個非常受歡迎的 IDE,但考慮到它蓬勃發展的 DevOps 生態系統的變化速度,它需要進行調整甚至大修。

軟件度量的簡單介紹

軟件度量的簡單介紹

軟件度量是用於量化軟件各個方面的度量。這些方面可以包括開發團隊的成本、質量和效率。

如何在 Windows 10 上安裝 .NET Framework 3.5 版

如何在 Windows 10 上安裝 .NET Framework 3.5 版

作為 Windows 用戶,您可能至少遇到過 .NET Framework 這個詞。它是 Microsoft 開發的軟件框架,可讓您構建和運行 C#、C++、F# 和 Visual Basic 程序。最新的 .NET 版本是 4.8,但您的計算機可能需要舊版本的 .NET(如 .NET 3.5)才能運行某些應用程序。

Flask 或 CherryPy:您應該使用哪種 Python 框架?

Flask 或 CherryPy:您應該使用哪種 Python 框架?

如果您是 Python 開發人員,您可以從一系列可用的框架中受益匪淺。雖然有些框架最適合大型生態系統,但其他框架則專門服務於特定的發展目標。繼續閱讀以了解兩個 Python 框架 Flask 和 CherryPy 之間的基本特性、用法和區別。

如何使用 Python、C++ 和 JavaScript 查找 N 位完美立方體和正方形

如何使用 Python、C++ 和 JavaScript 查找 N 位完美立方體和正方形

許多程序員喜歡使用代碼解決棘手的數學問題。它有助於提高頭腦和提高解決問題的能力。在本文中,您將學習如何使用 Python、C++ 和 JavaScript 找到最小和最大的 n 位完美正方形和立方體。每個示例還包含幾個不同值的示例輸出。

如何將 Python 添加到 Windows PATH 變量

如何將 Python 添加到 Windows PATH 變量

從終端運行 Python 通常是不可避免的。但是,如果您是第一次在 Windows 10 上安裝 Python,則只有將其添加到 Windows PATH 環境變量中,才能通過 Windows 終端運行它。

如何使用 Python if 語句

如何使用 Python if 語句

if 語句是邏輯編程的驅動力。因此,更好地掌握 Python 是對 Python 編程技能的重要補充。

如何使用 Python 作為命令行計算器

如何使用 Python 作為命令行計算器

雖然您可以在計算機上使用圖形計算器,但 Python 編程語言解釋器可以兼作桌面計算器。它在 Python 社區中非常流行,以至於官方教程中都提到了它。下面介紹如何將 Python 用作計算器。

面向程序員的 8 個最佳 Java 博客

面向程序員的 8 個最佳 Java 博客

作為程序員,你應該接受挑戰才能生存,並在開發或編程領域創造一些奇蹟。因此,如果您正在尋求學習高級編程語言以提高您的職業技能,Java 是最好的前景之一。

初學者開始使用 Python 的 7 個重要命令

初學者開始使用 Python 的 7 個重要命令

如果您有一個全面的路線圖,詳細說明初學者應學習哪些概念以及如何進一步進步以達到下一個里程碑,那麼學習 Python 等新編程語言將變得輕而易舉。即使是中級程序員也應該經常複習他們的基礎知識,為自己打下堅實的基礎。

響應式網頁設計原則

響應式網頁設計原則

如今,構建一個根據瀏覽器或設備調整其用戶界面的網站或應用程序是一種常見的做法。有兩種方法可以實現這一目標。第一個涉及為不同的設備創建不同版本的網站或應用程序。但它效率低下,並可能導致不可預測的錯誤。

如何使用 C++、Python 和 JavaScript 計算數字中的位數

如何使用 C++、Python 和 JavaScript 計算數字中的位數

處理數字是編程的一個組成部分。每種編程語言都支持以多種不同方式操作數字。在本文中,您將學習如何使用迭代、基於日誌和基於字符串的方法查找整數中的總位數。

用於容器管理的 9 個最佳 Docker 替代方案

用於容器管理的 9 個最佳 Docker 替代方案

容器對於虛擬環境中的軟件開發、部署和管理非常有益。Docker 在容器化過程中很有用,但它不是唯一的平台。如果您正在尋找 Docker 的替代品,那就別無所求。此列表展示了一些功能豐富且高效的 Docker 替代方案,可用於您的下一個項目。

SQL 與 NoSQL:下一個項目的最佳數據庫是什麼?

SQL 與 NoSQL:下一個項目的最佳數據庫是什麼?

SQL 與 NoSQL:下一個項目的最佳數據庫是什麼?

如何在您的 WordPress 帖子中嵌入推文

如何在您的 WordPress 帖子中嵌入推文

在您的 WordPress 帖子中嵌入第三方服務是一種吸引訪問者興趣的令人興奮的方式。嵌入的內容還提供了使掃描更容易的視覺提示。WordPress 使添加此類內容變得容易。

如何使用 npkill 刪除節點模塊文件夾

如何使用 npkill 刪除節點模塊文件夾

Node.js 是一個 JavaScript 運行時環境,允許您在 Web 瀏覽器之外運行 JavaScript,使其成為開發各種應用程序的流行選擇。它的流行部分是由於大量的 NPM 包可以簡化開發人員的體驗。

如何編寫和編譯你的第一個 Solidity 代碼

如何編寫和編譯你的第一個 Solidity 代碼

Solidity 是以太坊區塊鏈上智能合約使用的編程語言。它是一種靜態類型的、面向對象的編程語言。