CSS基礎概念之選擇器類型

CSS選擇器類型

選擇器表示元素在樹結構中的特定模式。選擇器(selector)術語指的是,簡單選擇器(simple selector),復合選擇器(compound selector),復雜選擇器(complex selector),或者選擇器列表(selector list)。選擇器的主題是任何被選擇器被定義的元素;即與該選擇器匹配的任何元素。

簡單選擇器是元素上的一個條件。 類型選擇器(class-selector),通用選擇器(universal-selector),屬性選擇器(attribute-selector),類選擇器(type-selector),ID選擇器(id-selector),或者偽類(pseudo-class)都是簡單選擇器。當本說明書中定義的簡單選擇器根據文檔語言準確地描述了給定元素時,該給定元素被稱為與該簡單選擇器匹配。

復合選擇器是一個沒有被組合子分割的簡單選擇器組成的序列,表示一組條件同時選擇一個元素。如果符合選擇器包含類型選擇器或通用選擇器,這個選擇器必須在序列中第一個出現。在序列中只允許出現一個類型選擇器或通用選擇器。當元素符合復合選擇器中的所有簡單選擇器則該元素才匹配了這個復合選擇器。

注意:空白字符表示后端組合子,在復合選擇器中,簡單選擇器之間不允許有空格。

偽復合選擇器是偽類選擇器,之后可選的可以跟一個偽類選擇器,之前可選的可以加一個復合選擇器或者偽復合選擇器,但不能有任何組合子。當偽元素具有指定的偽元素名稱,與任何偽類所表示的額外條件匹配,并具有由相鄰的前一個選擇器表示的起源元素時,偽元素與偽復合選擇器匹配。如果沒有相鄰的前一個選擇器,則假定為通用選擇器。(例如,.foo ::before 等同于 .foo *::before,并且與 .foo::before 不同。)

例如,在.foo::before:hover中,.foo是復合選擇器,而::before:hover是偽復合選擇器。然而在.foo::before::marker中,::before和::marker是獨立的偽復合選擇器.

注意:偽復合選擇器不是復合選擇器,不能使用在明確說明只能使用復合選擇器的地方。偽復合選擇器的作用就好像它們自己攜帶了一個組合子,表達了它們與原始元素的關系,就像>組合子表達了與父元素的關系一樣。

組合子描述的是兩個元素之間的關系,這兩個元素由組合子兩邊的復合選擇器提供。在4級選擇器中組合子包括:后代組合子(空格),子組合子(U+003E, >),下一個兄弟組合子(U+002B, +),后繼同級組合子(U+007E, ~)。兩個給定元素之間的相關關系是真則表示這兩個元素匹配了這個組合子。

復雜選擇器是一個序列,這個序列由組合子分割的復合選擇器或偽復合選擇器或者復合選擇器和偽復合選擇器組成。復雜選擇器是作用于一組元素上的一組條件,這組條件通過組合子描述特定關系。當一個元素或偽元素匹配中了序列中最后的復合/偽復合選擇器,并且序列中通過組合子分割的其他選擇器單元也匹配中了各自的元素,那么就可以說這個元素匹配中了復雜選擇器。

例如,.foo.bar匹配一個有"foo"和"bar"類的元素。
'.ancestor > .foo.bar’匹配這些元素的子集: 這些元素的父元素有"ancestor"類。
'.foo.bar::before’匹配一個微元素,它的源元素是.foo.bar。

簡單/復合/復雜選擇器列表是一個逗號分割的簡單,復合,復雜選擇器列表。當類型不重要或在附近的文中指定時,也被稱為選擇器列表,如果了下很重要并且沒有被指定是,默認是復雜選擇器列表。

翻譯自:https://drafts.csswg.org/selectors-4/#structure

對規范的理解

復合選擇器

以上規范中復合選擇器比較存疑,因為規范中說的是選擇器列表,但是以逗號分割的,或者空格分割的都是列表,所以這里具體說明一下復合選擇器。
在規范中也說了復合選擇的作用是通過一組條件選擇同一個元素,并且其中不能有組合子。所以復合選擇器是div.abc這種形式,并且也明確說了如果有類型選擇器或者通用選擇器那么只能出現在復合選擇器的開頭。因為像div.abc這種形式,如果將div放在.abc后面又沒有組合子分割,那么其表達的含義和我們的目的顯然相去甚遠,.abcdiv表示的是選擇一個類名為abcdiv的元素,而不是一個有abc類的div元素。

偽復合選擇器

偽復合選擇器,我理解是偽元素的復合選擇器。復合選擇器是通過元素自身屬性的更加精確的描述來選擇元素。而偽復合選擇器則是通過偽元素自身屬性更加精確的描述來選擇偽元素。例如:div.abc說的是有一個div元素它還必須有abc類名。::before:hover說的是偽元素before必須被hover中才會被選中。所以復合選擇器的作用都是細化自身屬性來選擇某個元素。

復雜選擇器

和復合選擇器通過細化自身屬性來選擇元素不同,復雜選擇器是通過元素和元素之間的關系來選擇元素,而關系的表述是通過組合子完成的,分別是white space用于選擇后代,>用于選擇子代,+用于選擇下一個兄弟節點,~用于選擇后繼同級兄弟節點。例如:div .abc選擇的是div的后代具有abc類的元素。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/211864.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211864.shtml
英文地址,請注明出處:http://en.pswp.cn/news/211864.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【軟考中級——軟件設計師】備戰經驗 筆記總結分享

考試成績 我第一次備考是在2022 然后那時候取消了這次是第二次 靠前我一個月復習的看了以前的筆記 然后刷了七八道歷年題目學習資料推薦 :zst——2021 b站鏈接自薦一下我的筆記 : 軟考筆記專欄 視頻確實很長 , 我的建議就是先看筆記 然后不會…

OD機考真題搜集:歡樂的周末

題目 小華和小為是很要好的朋友,他們約定周末一起吃飯。通過手機交流,他們在地圖上選擇了多個聚餐地點(由于自然地形原因,部分聚餐地點不可達),求小為和小華都可以到達的聚餐地點有多少個? 輸入 第一行輸入m,n,分別代表地圖的長度和寬度 第二行開始輸入具體地圖信息…

1-2、Java環境搭建

語雀原文鏈接 文章目錄 1、JDK安裝2、Hello World2-1、Hello World示例2-2、類名和文件名2-3、注釋2-4、javadoc 3、環境變量3-1、Path作用3-2、classpath3-3、JAVA_HOME 4、Java組成5、跨平臺原理5-1、Java跨平臺原理5-2、C語言的跨平臺原理 1、JDK安裝 下載地址&#xff1a…

打造Github首頁的動態飛線效果

一、導語 Github首頁的地球動態飛線,大家都比較熟悉吧 二、分析 由大量隨機的3點構造出貝塞爾曲線,然后開始從起點到終點的飛行后,然后再從起點到終點的消失,就此完成整個過程 三、基礎代碼 createCurve(startPoint, endPoint…

unity 2d 入門 飛翔小鳥 死亡閃爍特效(十三)

一、c#腳本 using System.Collections; using System.Collections.Generic; using UnityEngine;public class Bling : MonoBehaviour {public Texture img;public float speed;public static bool changeWhite false;private float alpha0f;// Start is called before the fi…

信創運維產業的發展與趨勢:IT管理的新視角

隨著數字化時代的來臨,信息技術應用的各個方面都在發生變革。在這個過程中,信創運維產業的發展尤為引人注目。它不僅是數字化轉型的關鍵驅動力,也是國家經濟發展的重要支柱。本文將探討信創運維產業的發展與趨勢,以及國家如何管理…

芯片量產導入知識

什么是芯片量產 從芯片功能設計到生產制造、測試等環節,每一個環節都至關重要。 對于保障大規模發貨后芯片指標表現的一致性,以及產品應用生命周期內的穩定性和可靠性,需要考慮多種因素。以下是一些相關的觀點: 可量產性設計&am…

Stable Diffusion 系列教程 - 2 WebUI 參數詳解

Stable Diffusion 的整個算法組合為: UNet VAE 文本編碼器 UNet:就是我們大模型里的核心。 文本編碼器:將我們的prompt進行encoder為算法能理解的內容(可以理解為SD外包出去的項目CLIP)。 VAE:對UNet生…

【牛牛送書 | 第三期】《一本書講透Java線程:原理與實踐》帶你深入JAVA多線程

目錄 摘要: 多線程對于Java的意義 為什么Java工程師必須掌握多線程 Java多線程使用方式 如何學好Java多線程 參與方式🥇 摘要: 互聯網的每一個角落,無論是大型電商平臺的秒殺活動,社交平臺的實時消息推送&#x…

1.2.啟動線程的五類種方法

一.new MyThread().start() 繼承Thread類創建線程類 定義一個繼承Thread類的子類,并重寫該類的run()方法 創建Thread子類的實例,即創建了線程對象 調用該線程對象的start()方法啟動線程 二.new Thread(r).start() 實現Runnable接口創建線程類 定義R…

Qt槽函數不響應不執行的一種原因:ui提升導致重名

背景: 一個包含了組件提升的ui,有個按鈕的槽函數就是不響應,于是找原因。 分析: 槽函數的對應一是通過connect函數綁定信號,二是on_XXX_signal的命名方式。界面上部件的槽函數通常是第二種。 我反復確認細節&#…

寫一個程序拷貝文件

使用所學文件操作,在當前目錄下放一個文件data.txt,寫一個程序,將data.txt文件拷貝一份,生成data_copy.txt文件。 基本思路: 打開文件data.txt,讀取數據打開文件data_copy.txt,寫數據從data.t…

如何使用拼多多根據ID取商品詳情 API 獲取熱銷商品信息?

使用拼多多根據ID取商品詳情 API 獲取熱銷商品信息是一種高效且便捷的方式,可以快速獲取到拼多多平臺上熱銷商品的信息。以下是獲取熱銷商品信息的步驟和示例代碼: 一、步驟 注冊成為拼多多開發者,并獲取API密鑰。確定要獲取熱銷商品信息的…

張正友相機標定法原理與實現

張正友相機標定法是張正友教授1998年提出的單平面棋盤格的相機標定方法。傳統標定法的標定板是需要三維的,需要非常精確,這很難制作,而張正友教授提出的方法介于傳統標定法和自標定法之間,但克服了傳統標定法需要的高精度標定物的缺點,而僅需使用一個打印出來的棋盤格就可…

.Faust勒索病毒解密方法|勒索病毒解決|勒索病毒恢復|數據庫修復

引言: 數字時代的黑暗勢力中,faust勒索病毒如幽靈般潛伏,將用戶的數字珍寶變為數字枷鎖。本文將深入介紹.faust勒索病毒的威脅特征,提供有效的數據恢復方法,并分享一系列預防措施,以協助您在數字戰場上筑起…

kafka學習筆記--如何保證生產者數據可靠、不重復、有序

本文內容來自尚硅谷B站公開教學視頻,僅做個人總結、學習、復習使用,任何對此文章的引用,應當說明源出處為尚硅谷,不得用于商業用途。 如有侵權、聯系速刪 視頻教程鏈接:【尚硅谷】Kafka3.x教程(從入門到調優…

名字的漂亮度

給出一個字符串,該字符串僅由小寫字母組成,定義這個字符串的“漂亮度”是其所有字母“漂亮度”的總和。 每個字母都有一個“漂亮度”,范圍在1到26之間。沒有任何兩個不同字母擁有相同的“漂亮度”。字母忽略大小寫。給出多個字符串&#xff0…

從零開發短視頻電商 Low Level Client(推薦)連接OpenSearch進行CRUD

文章目錄 依賴初始化客戶端發起請求請求參數請求頭設置超時時間設置線程數設置用戶名密碼結果解析節點選擇器配置嗅探器整體示例問題參考 OpenSearch開發環境安裝Docker和Docker-Compose兩種方式 依賴 <dependency><groupId>org.elasticsearch.client</groupId…

【腳本】圖片-音視頻-壓縮文件處理

音視頻處理 一&#xff0c;圖片操作1&#xff0c;轉換圖片格式2&#xff0c;多張圖片合成視頻 二&#xff0c;音頻操作1&#xff0c;轉換音頻格式2&#xff0c;分割音頻為多段3&#xff0c;合成多段音頻 三&#xff0c;視頻操作1&#xff0c;轉換視頻格式2&#xff0c;提取視頻…

【Go自學版】01-基礎

// 變量 var a, b, c 8, 2.3, "hello" var d float64; e : 6var A []int; var B [10]int; C : [10]int{1, 2, 3, 4} for i : 0; i < len(B); i {} for _, value : range C {} D make([]int, 3) // len 4, cap 10, 擴容方式 cap*2 E : make([]int, 4, 10) E …