CSS 偽類選擇器

偽類選擇器(pseudo-class selector)是一種用于選擇HTML元素特定狀態或特征的關鍵字,它允許開發者基于文檔樹之外的信息(如用戶交互、元素位置或狀態變化)來選擇元素并應用樣式。

偽類選擇器以冒號(:)開頭,附加在基本選擇器后面,用于定義元素的特殊狀態。


偽類選擇器分類及用法

1. 狀態偽類(鏈接和用戶操作)

/* 未訪問的鏈接 */
a:link {color: blue;
}/* 已訪問的鏈接 */
a:visited {color: purple;
}/* 鼠標懸停狀態 */
a:hover {color: red;text-decoration: underline;
}/* 激活狀態(鼠標按下未釋放) */
a:active {color: green;
}/* 獲取焦點的元素 */
input:focus {outline: 2px solid orange;
}

2. 結構偽類(基于文檔結構)

/* 選擇第一個子元素 */
li:first-child {font-weight: bold;
}/* 選擇最后一個子元素 */
li:last-child {border-bottom: none;
}/* 選擇第n個子元素 */
li:nth-child(2) {color: red;
}/* 選擇奇數元素 */
tr:nth-child(odd) {background-color: #f2f2f2;
}/* 選擇偶數元素 */
tr:nth-child(even) {background-color: #e6e6e6;
}/* 選擇特定公式的元素 */
li:nth-child(3n+1) {margin-left: 0;
}/* 選擇倒數第n個子元素 */
li:nth-last-child(2) {font-style: italic;
}/* 選擇唯一子元素 */
div:only-child {padding: 10px;
}/* 選擇第一個同類元素 */
p:first-of-type {font-size: 1.2em;
}/* 選擇最后一個同類元素 */
p:last-of-type {margin-bottom: 0;
}/* 選擇第n個同類元素 */
p:nth-of-type(2n) {background: #f8f8f8;
}/* 選擇唯一同類元素 */
img:only-of-type {border: 3px solid black;
}

3. 表單相關偽類

/* 啟用狀態的元素 */
input:enabled {border: 1px solid #ccc;
}/* 禁用狀態的元素 */
input:disabled {background-color: #f0f0f0;color: #999;
}/* 被選中的復選框或單選按鈕 */
input:checked {outline: 2px solid blue;
}/* 必填字段 */
input:required {border-left: 3px solid red;
}/* 可選字段 */
input:optional {border-left: 3px solid #ccc;
}/* 有效輸入 */
input:valid {border-color: green;
}/* 無效輸入 */
input:invalid {border-color: red;
}/* 在范圍之內 */
input:in-range {color: green;
}/* 超出范圍 */
input:out-of-range {color: red;
}/* 只讀元素 */
input:read-only {background-color: #f5f5f5;
}/* 可讀可寫元素 */
input:read-write {background-color: white;
}

4. 其他偽類

/* 否定選擇器 */
div:not(.special) {opacity: 0.8;
}/* 根元素 */
:root {--main-color: #4d9fff;
}/* 空元素 */
div:empty {display: none;
}/* 目標元素(當前活動的錨點目標) */
:target {background-color: yellow;
}/* 選擇包含指定文本的元素 */
p:contains("重要") {font-weight: bold;
}/* 語言選擇器 */
html:lang(zh) {font-family: "Microsoft YaHei", sans-serif;
}

5. CSS3新增的偽類(部分)

/* 選擇未選中的單選按鈕或復選框 */
input:indeterminate {opacity: 0.5;
}/* 選擇默認選項 */
option:default {font-weight: bold;
}/* 全屏模式下的元素 */
video:fullscreen {width: 100%;height: auto;
}/* 匹配正在播放的媒體元素 */
video:playing {border: 2px solid green;
}/* 匹配暫停狀態的媒體元素 */
video:paused {border: 2px solid #ccc;
}

使用技巧

  1. 組合使用:偽類可以與其他選擇器組合使用

    form input:focus:invalid {border-color: red;
    }
  2. 性能考慮:結構偽類(如nth-child)可能影響頁面渲染性能,尤其在大型DOM中

  3. 瀏覽器兼容性:較新的偽類(如:focus-within)需要檢查瀏覽器支持情況

  4. 優先級:偽類與類選擇器具有相同的特異性權重(0,1,0)

注意事項

  • 某些偽類(如:visited)由于安全原因,樣式受到瀏覽器限制

  • 結構偽類是基于元素在父元素中的位置,而不是在整個文檔中的位置

  • 偽類順序很重要,特別是對于鏈接狀態(LoVe-HAte順序::link,?:visited,?:hover,?:active)

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

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

相關文章

Electron 新特性:2025 版本更新解讀

引言:Electron 新特性在 2025 版本更新中的解讀核心價值與必要性 在 Electron 框架的持續演進中,新特性的引入是推動桌面開發創新的核心動力,特別是 2025 年的版本更新,更是 Electron 項目從成熟生態到前沿技術的躍進之鑰。它不僅…

MyBatis從入門到面試:掌握持久層框架的精髓

MyBatis從入門到面試:掌握持久層框架的精髓 前言 在Java企業級應用開發中,持久層框架的選擇至關重要。MyBatis作為一款優秀的半自動化ORM框架,以其靈活的SQL定制能力和良好的性能表現,成為了眾多開發者的首選。本文將帶你從MyBa…

5.Three.js 學習(基礎+實踐)

Three.js 是 “WebGL 的封裝庫”,幫你屏蔽了底層的著色器 / 緩沖區細節,專注于 “3D 場景搭建”,開發效率高,是通用 3D 開發的首選。他的核心是 “場景 - 相機 - 渲染器” 的聯動邏輯,先掌握基礎組件,再學進…

消火栓設備工程量計算 -【圖形識別】秒計量

消火栓設備工程量計算 -【圖形識別】秒計量 消防系統的消火栓設備水槍、水帶和消火栓組成,根據清單定額規則計算消火栓設備工程量。通過CAD快速看圖的圖形識別框選圖紙就能自動數出消火栓數量,省時又準確,是工程人做消防算量的好幫手。 一、…

Docker 與 VSCode 遠程容器連接問題深度排查與解決指南

Docker 與 VSCode 遠程容器連接問題深度排查與解決指南 引言 Visual Studio Code 的 Remote - Containers 擴展極大地提升了開發體驗,它將開發環境容器化,保證了環境的一致性,并允許開發者像在本地一樣在容器內進行編碼、調試和運行。然而&…

愛圖表:鏑數科技推出的智能數據可視化平臺

本文轉載自:https://www.hello123.com/aitubiao ** 一、? AI 圖表:智能數據可視化好幫手 愛圖表是鏑數科技旗下的一款智能數據可視化工具,它能讓復雜的數字和報表變得直觀又好懂。接入了先進的DeepSeek 系列 AI 模型,它不僅會做…

ENVI系列教程(四)——圖像幾何校正

目錄 1 概述 1.1 控制點選擇方式 1.2 幾何校正模型 1.3 控制點的預測與誤差計算 2 詳細操作步驟 2.1 掃描地形圖的幾何校正 2.1.1 第一步:打開并顯示圖像文件 2.1.2 第二步:啟動幾何校正模塊 2.2 Landsat5 影像幾何校正 2.2.1 第一步:打開并顯示圖像文件 2.2.2 第…

STM32-FreeRTOS操作系統-消息隊列

引言在嵌入式開發領域,STM32與FreeRTOS的結合應用極為廣泛。本文將探討如何在STM32上使用FreeRTOS實現消息隊列功能,助力高效任務通信與系統協作。消息隊列定義消息隊列是一種在 FreeRTOS 中用于任務間通信的機制。它允許任務將消息發送到隊列中&#xf…

【開題答辯全過程】以 C語言程序設計課程網站為例,包含答辯的問題和答案

個人簡介一名14年經驗的資深畢設內行人,語言擅長Java、php、微信小程序、Python、Golang、安卓Android等開發項目包括大數據、深度學習、網站、小程序、安卓、算法。平常會做一些項目定制化開發、代碼講解、答辯教學、文檔編寫、也懂一些降重方面的技巧。感謝大家的…

手機上有哪些比較好用的待辦事項提醒工具

在快節奏的現代工作中,我們每天都要面對大量的任務與事務。從項目截止日期、客戶會議,到日常的工作安排,瑣碎的事項容易讓人顧此失彼。 手機待辦事項工具早已突破傳統“記事本”的局限,成為移動辦公場景下的效率核心。它們通過任務…

Mysql數據庫事務全解析:概念、操作與隔離級別

MySQL系列 文章目錄MySQL系列一、什么是事務1.1事務的核心概念1.2、 事務的四大屬性(ACID)1.2.1 原子性(Atomicity)1.2.2 一致性(Consistency)1.2.3 隔離性(Isolation)1.2.4 持久性&…

【MCU EEPROM開發教程】

簡單來說把eeprom芯片當成一個傳感器來使用,通過IIC/SPI等協議對芯片進行讀寫操作,具體的讀寫操作涉及到一些算法—怎么樣讀寫更加快速,以及一些異常錯誤處理。 應用場景: 對于一些掉電也不能丟失的數據要存在eeprom/flash中&…

Docker將鏡像搬移到其他服務上的方法

導出/加載鏡像(保留分層、標簽)和導出/導入容器快照(僅文件系統,丟失鏡像歷史與標簽)。 一、把鏡像打包帶走(推薦) 適合把一個或多個鏡像搬到離線/內網機器,保留分層與標簽。 在源服…

Ubuntu 系統安裝 Miniconda 完整方法與注意事項

一、完整安裝步驟 1. 下載 Miniconda 安裝包 Miniconda 安裝包為 .sh 格式腳本,下載途徑分兩種: 方式 1:瀏覽器下載(適合新手) 訪問 Miniconda 官方下載頁,選擇對應系統版本(Ubuntu 選 Miniconda3-latest-Linux-x86_64.sh),默認保存到用戶目錄的 ~/Downloads 文件夾…

【后端】數據庫四大范式詳細解析

梳理一下 MySQL(或關系型數據庫)中的第一、二、三、四范式,這是數據庫設計中非常重要的規范化理論。1?? 第一范式 (1NF:First Normal Form)定義:字段具有原子性,不可再分。數據表中每一列都必須是不可分割…

HarmonyOS后臺任務調度:JobScheduler與WorkManager實戰指南

本文將深入探討HarmonyOS 5(API 12)中的后臺任務調度機制,重點講解JobScheduler和WorkManager的使用方法、適用場景及最佳實踐,幫助開發者實現高效、智能的后臺任務管理。 1. 后臺任務調度概述 HarmonyOS提供了兩種主要的后臺任務…

Prompt工程實踐

你在寫prompt時候,是不是總覺得大模型它不聽話。要么答非所問、要么一堆廢話。扒開思考過程仔細閱讀時而覺得它聰明絕頂,時而又覺得它愚蠢至極。明明已經對了怎么又推理到錯的地方去了,明明在提示詞中提醒過了不要這么思考它怎么就瞎想了。這…

基于springboot的畢業旅游一站式定制系統

博主介紹:java高級開發,從事互聯網行業六年,熟悉各種主流語言,精通java、python、php、爬蟲、web開發,已經做了多年的設計程序開發,開發過上千套設計程序,沒有什么華麗的語言,只有實…

輸入1.8V~5.5V 輸出28V DCDC升壓芯片TLV61046A

今天來一款TI的升壓芯片TLV61046A。輸入電壓范圍1.8V~5.5V。最高可以輸出28V。開關電流980mA,那具體能輸出多大的電流就得看輸入輸出的電壓了。以上面的輸入3.6V輸出12V為例,效率是85%,那最高可以輸出的電流就差不多只有200mA左右。封裝也是非…

ubuntu22.04源碼安裝ffmpeg-4.4

# ubuntu22.04源碼安裝ffmpeg-4.4cd /tmpwget https://ffmpeg.org/releases/ffmpeg-4.4.6.tar.xztar -xvf ffmpeg-4.4.6.tar.xzcd ffmpeg-4.4.6apt updateapt install -y yasm pkg-config libx264-dev libx265-dev libvpx-dev libfdk-aac-dev libmp3lame-dev libopus-dev libav…