CSS 偽類(Pseudo-classes)的詳細介紹

CSS 偽類詳解與示例

在日常的前端開發中,CSS 偽類可以幫助我們非常精準地選擇元素或其特定狀態,從而達到豐富頁面表現的目的。本文將詳細介紹以下偽類的使用:

  • 表單相關偽類
    :checked:disabled:enabled:in-range:invalid:optional:out-of-range:read-only:read-write:required:valid

  • 結構相關偽類
    :empty:first-of-type:last-child:last-of-type:nth-child(n):nth-last-child(n):nth-of-type(n):nth-last-of-type(n):only-of-type:only-child:not(selector)

  • 鏈接與用戶交互狀態偽類
    :link:visited:active:hover:focus:target

  • 其他常用偽類
    :root:lang(language)

  • 偽元素
    ::first-letter::first-line::before::after

下面我們通過具體實例來逐一說明它們的用法。


1. 表單相關偽類

1.1 :checked

用于選中已被選中的表單元素。比如下面的復選框和單選按鈕,在選中后,文本顏色變為綠色。

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>:checked 示例</title><style>input:checked + label {font-weight: bold;color: green;}</style>
</head>
<body><h3>:checked 示例</h3><input type="checkbox" id="cb1"><label for="cb1">復選框 1</label><br><input type="radio" name="group" id="r1"><label for="r1">單選按鈕 1</label><input type="radio" name="group" id="r2"><label for="r2">單選按鈕 2</label>
</body>
</html>

在這里插入圖片描述

1.2 :disabled:enabled

選擇被禁用或啟用的表單元素。可以通過不同的樣式提示用戶哪些輸入項不能使用或可以交互。

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>:disabled 和 :enabled 示例</title><style>input:disabled {background-color: #f5f5f5;cursor: not-allowed;}input:enabled {border: 1px solid #66afe9;}</style>
</head>
<body><h3>表單狀態示例</h3><input type="text" placeholder="啟用的文本框"><br><br><input type="text" placeholder="禁用的文本框" disabled>
</body>
</html>

在這里插入圖片描述

1.3 :in-range:out-of-range

用于為指定范圍內或超出范圍的輸入框設置樣式。適用于例如數字輸入、日期輸入等場景。

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>:in-range 與 :out-of-range 示例</title><style>input:in-range {border-color: green;}input:out-of-range {border-color: red;}</style>
</head>
<body><h3>取值范圍驗證</h3><!-- 設置 min 和 max 屬性 --><input type="number" min="1" max="10" value="5"><br><br><input type="number" min="1" max="10" value="20">
</body>
</html>

在這里插入圖片描述

1.4 :invalid:valid

結合 HTML5 表單驗證,可以區分用戶輸入的合法性,為合法或非法的狀態加以不同樣式提示。

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>:valid 與 :invalid 示例</title><style>input:valid {border-color: green;}input:invalid {border-color: red;}</style>
</head>
<body><h3>表單驗證</h3><!-- 使用 required 限制必填,pattern 限制格式 --><input type="email" placeholder="請輸入有效的郵箱" required>
</body>
</html>

在這里插入圖片描述

1.5 :optional, :read-only, :read-write, :required

這些偽類針對不同屬性的輸入框進行樣式區分,比如區分必填與選填、只讀與可編輯:

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>:optional 與 :required 示例</title><style>input:optional {background-color: #e6f7ff;}input:required {background-color: #fff1f0;}</style>
</head>
<body><h3>必填與選填示例</h3><input type="text" placeholder="選填項"><br><br><input type="text" placeholder="必填項" required>
</body>
</html>

在這里插入圖片描述


2. 結構相關偽類

2.1 :empty

選擇沒有任何子元素(包括文本節點)的元素。比如下面的 <p> 標簽,如果沒有內部內容,會被設置背景色。

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>:empty 示例</title><style>p:empty {background-color: #f9f9f9;border: 1px dashed #ccc;min-height: 50px;}</style>
</head>
<body><h3>:empty 示例</h3><p>這一段有內容,不會被選中</p><p></p>
</body>
</html>

在這里插入圖片描述

2.2 :first-of-type:last-of-type

用于選擇同一父元素中的第一個或最后一個特定類型的子元素。假設一個容器中有多個 <p> 標簽,下面示例分別標記第一個和最后一個 <p>

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>:first-of-type 與 :last-of-type 示例</title><style>p:first-of-type {color: blue;}p:last-of-type {color: red;}</style>
</head>
<body><h3>結構中的第一個與最后一個<p></h3><div><p>第一段,應該顯示為藍色</p><p>中間段</p><p>最后一段,應該顯示為紅色</p></div>
</body>
</html>

在這里插入圖片描述

2.3 :first-child:only-child

  • :first-child 選擇作為父元素第一個子元素的指定元素
  • :only-child 選擇僅存在唯一子元素時的指定元素
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>:first-child 與 :only-child 示例</title><style>p:first-child {font-weight: bold;}p:only-child {font-style: italic;color: purple;}</style>
</head>
<body><h3>只有一個子元素的示例</h3><div><p>我是唯一的子元素,應該應用 :only-child 樣式</p></div><div><p>我是第一個子元素,應該應用 :first-child 樣式</p><p>我是第二個子元素,不應用 :first-child 樣式</p></div>
</body>
</html>

在這里插入圖片描述

2.4 :nth-child(n), :nth-last-child(n), :nth-of-type(n), :nth-last-of-type(n)

這四個偽類可以用來根據子元素的索引位置來選取元素。

  • p:nth-child(2):選擇父元素的第二個子元素,并且它是 <p> 標簽
  • p:nth-last-child(2):選擇倒數第二個子元素,如果它是 <p>
  • p:nth-of-type(2):在同一類型中選擇第二個 <p>
  • p:nth-last-of-type(2):在同一類型中選擇倒數第二個 <p>

下面通過一個示例來說明:

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>:nth-child 與 :nth-of-type 示例</title><style>/* 父元素中第二個子元素(無論類型) */div > *:nth-child(2) {background-color: #dff0d8;}/* 父元素中第二個<p>標簽 */p:nth-of-type(2) {border: 1px solid #f0ad4e;}</style>
</head>
<body><h3>:nth-child 與 :nth-of-type 示例</h3><div><span>第一個子元素</span><p>這是第二個子元素,也同時是第一個<p>?</p><p>這是第二個<p>類型的子元素,將被邊框標記</p></div>
</body>
</html>

在這里插入圖片描述

2.5 :not(selector)

用于排除某些元素。例如下面的示例中,除 <p> 外的其他所有元素都會被應用灰色背景:

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>:not 示例</title><style>*:not(p) {background-color: #eee;}</style>
</head>
<body><h3>:not 示例</h3><p>我不會有灰色背景</p><div>我會有灰色背景</div><span>我也會有灰色背景</span>
</body>
</html>

3. 鏈接與用戶交互狀態偽類

3.1 鏈接的偽類::link:visited:active:hover

這些偽類用于定義鏈接在不同狀態下的樣式,例如未訪問、已訪問、鼠標懸停以及活動時的表現。

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>鏈接偽類示例</title><style>a:link {color: blue;}a:visited {color: purple;}a:hover {text-decoration: underline;}a:active {color: red;}</style>
</head>
<body><h3>鏈接狀態示例</h3><p>這是一個 <a href="https://www.example.com" target="_blank">示例鏈接</a>。嘗試點擊或將鼠標懸停在鏈接上看看效果。</p>
</body>
</html>

3.2 :focus

用于選中當前獲得焦點的元素,常見于表單輸入,幫助用戶清楚知道當前輸入位置。

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>:focus 示例</title><style>input:focus {border-color: #66afe9;box-shadow: 0 0 8px rgba(102,175,233,0.6);}</style>
</head>
<body><h3>:focus 示例</h3><input type="text" placeholder="點擊后試試">
</body>
</html>

在這里插入圖片描述

3.3 :target

用于選中當前 URL 錨點對應的元素。假設頁面中有一個元素的 id 為 news,當 URL 包含 #news 時,該元素會被選中。

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>:target 示例</title><style>#news:target {background-color: #ffe58f;padding: 10px;}</style>
</head>
<body><h3>:target 示例</h3><p>點擊下面的鏈接跳轉到新聞區域:</p><a href="#news">跳轉到新聞</a><div style="margin-top: 50px;"><p id="news">這是新聞內容區域,當 URL 中包含 #news 時,我會被高亮顯示。</p></div>
</body>
</html>

在這里插入圖片描述


4. 其他偽類與偽元素

4.1 :root

:root 選擇器選中文檔的根元素(通常是 <html>),經常用來定義全局 CSS 變量或全局樣式。

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>:root 示例</title><style>:root {--main-bg-color: #f0f8ff;}body {background-color: var(--main-bg-color);}</style>
</head>
<body><h3>:root 示例</h3><p>背景顏色由 CSS 變量控制。</p>
</body>
</html>

在這里插入圖片描述

4.2 :lang(language)

根據元素的語言屬性設定樣式。比如下面示例中,所有 lang="it"(意大利語)的 <p> 元素會使用特殊樣式。

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>:lang 示例</title><style>p:lang(it) {color: green;font-weight: bold;}</style>
</head>
<body><h3>:lang 示例</h3><p lang="it">Questo è un testo in italiano.</p><p lang="en">This is an English text.</p>
</body>
</html>

在這里插入圖片描述

4.3 偽元素 ::first-letter::first-line::before::after

偽元素可以在元素內容前后或內部特定位置插入樣式,比如首字母、首行等,為排版加分。

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>偽元素 示例</title><style>p::first-letter {font-size: 200%;color: #d9534f;}p::first-line {font-weight: bold;}p::before {content: "【開始】";color: #5bc0de;}p::after {content: "【結束】";color: #5cb85c;}</style>
</head>
<body><h3>偽元素應用</h3><p>這是一段用于展示偽元素效果的文本。</p>
</body>
</html>

在這里插入圖片描述


結語

CSS 中的偽類和偽元素能讓我們無需增加額外的 HTML 結構,通過直接在樣式中操作狀態和結構特性,打造出更智能和富有表現力的頁面效果。上面的示例覆蓋了常用的偽類應用場景,希望大家能夠在實際項目中靈活使用,極大地提升前端開發效率。

如果你對某個偽類的用法還有疑問,歡迎在評論區留言討論,互相學習交流!


這篇博客詳細講述了如何使用 CSS 偽類為頁面元素添加交互、校驗和結構化樣式,不僅展示了基本用法,也提供了實際案例。希望這篇文章能幫助你在實際項目中更好地理解和應用 CSS 偽類。

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

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

相關文章

docker多個容器的相互通信

在同一臺宿主機上運行多個 Docker 容器時&#xff0c;容器之間可以通過以下幾種方式實現通信&#xff1a; 1. 使用 Docker 默認網絡&#xff08;Bridge 網絡&#xff09; Docker 默認會為每個容器分配一個 bridge 網絡&#xff0c;容器可以通過 IP 地址或容器名稱互相通信。 …

Elasticsearch 開放推理 API 增加了 Azure AI Studio 支持

作者&#xff1a;來自 Elastic Mark Hoy Elasticsearch 開放推理 API 現已支持 Azure AI Studio。在此博客中了解如何將 Azure AI Studio 功能與 Elasticsearch 結合使用。 作為我們持續致力于為 Microsoft Azure 開發人員提供他們選擇的工具的一部分&#xff0c;我們很高興地宣…

基于Bootstrap + Java + Oracle實現的電商平臺

以下是基于Bootstrap Java Oracle實現的電商平臺開發方案&#xff08;簡化版&#xff09;&#xff1a; 一、系統架構設計 前端&#xff1a;Bootstrap 5 jQuery 后端&#xff1a;Java Spring Boot 數據庫&#xff1a;Oracle 19c 自動化&#xff1a;Spring Scheduler Oracle…

JUC學習筆記02

文章目錄 JUC筆記2練習題&#xff1a;手寫線程池代碼解釋&#xff1a;AdvancedThreadPool 類&#xff1a;WorkerThread 內部類&#xff1a;AdvancedThreadPoolExample 類&#xff1a; 線程池的思考CPU密集型IO密集型 練習題&#xff1a;手寫自動重試機練習題&#xff1a;手寫定…

【Unity】從父對象中獲取子對象組件的方式

1.GetComponentInChildren 用于獲取對與指定組件或游戲對象的任何子級相同的游戲對象上的組件類型的引用。 該方法在Unity腳本API的聲明格式為&#xff1a; public T GetComponentInChildren(bool includeInactive false) includeInactive參數&#xff08;可選&#xff09…

Redis性能優化

1.是否使用復雜度過高的命令 首先&#xff0c;第一步&#xff0c;你需要去查看一下 Redis 的慢日志&#xff08;slowlog&#xff09;。 Redis 提供了慢日志命令的統計功能&#xff0c;它記錄了有哪些命令在執行時耗時比較久。 查看 Redis 慢日志之前&#xff0c;你需要設置慢…

baigeiRSA

baigeiRSA 打開附件有兩個&#xff1a; 1.import libnumfrom Crypto.Util import numberfrom secret import flag?size 128e 65537p number.getPrime(size)q number.getPrime(size)n p*q?m libnum.s2n(flag)c pow(m, e, n)?print(n %d % n)print(c %d % c)??2.n…

【csp-j學習完C++語法后,如何進階學習C++算法和數據結構?】

在掌握了 CSP - J 的 C 語法基礎后&#xff0c;接下來的進階學習需要系統地掌握各類算法和數據結構知識&#xff0c;并通過大量練習來鞏固和提高應用能力。以下是一份詳細的進階學習規劃&#xff1a; 第一階段&#xff1a;基礎算法學習&#xff08;1 - 2 個月&#xff09; 排…

QT中解決使用QCustomplot繪制高速大量數據時頻譜圖卡頓問題

[&#xff01;&#xff01;&#xff01;核心方法&#xff01;&#xff01;&#xff01;] 使用帶參數的replot()函數繪制m_pCustomPlot>replot(QCustomPlot::rpQueuedReplot) 1. replot() 方法 void QCustomPlot::replot(QCustomPlot::RefreshPriority refreshPriority rp…

【AI】卷積神經網絡CNN

不定期更新&#xff0c;建議關注收藏點贊。 目錄 零碎小組件經驗總結早期的CNN 零碎小組件 全連接神經網絡 目前已經被替代。 每個神經元都有參與&#xff0c;但由于數據中的特征點變化大&#xff0c;全連接神經網絡把所有數據特征都學習了&#xff0c;故效果不好。感受野&…

YOLOv11-ultralytics-8.3.67部分代碼閱讀筆記-downloads.py

downloads.py ultralytics\utils\downloads.py 目錄 downloads.py 1.所需的庫和模塊 2.def is_url(url, checkFalse): 3.def delete_dsstore(path, files_to_delete(".DS_Store", "__MACOSX")): 4.def zip_directory(directory, compressTrue, ex…

微信小程序~電器維修系統小程序

博主介紹&#xff1a;?程序猿徐師兄、8年大廠程序員經歷。全網粉絲15w、csdn博客專家、掘金/華為云/阿里云/InfoQ等平臺優質作者、專注于Java技術領域和畢業項目實戰? &#x1f345;文末獲取源碼聯系&#x1f345; &#x1f447;&#x1f3fb; 精彩專欄推薦訂閱&#x1f447;…

VDN 微服務架構搭建篇(三)基于 Nacos 的 Spring Cloud Gateway 動態路由管理

VDN 微服務架構搭建篇&#xff08;三&#xff09;&#xff1a;基于 Nacos 的 Spring Cloud Gateway 動態路由管理 在微服務架構中&#xff0c;網關 是整個系統的入口&#xff0c;負責 流量管理、請求路由、安全控制等關鍵功能。 Spring Cloud Gateway 作為 Spring 生態官方推薦…

LLAMA-Factory安裝教程(解決報錯cannot allocate memory in static TLS block的問題)

步驟一&#xff1a; 下載基礎鏡像 # 配置docker DNS vi /etc/docker/daemon.json # daemon.json文件中 { "insecure-registries": ["https://swr.cn-east-317.qdrgznjszx.com"], "registry-mirrors": ["https://docker.mirrors.ustc.edu.c…

Java高頻面試之SE-18

hello啊&#xff0c;各位觀眾姥爺們&#xff01;&#xff01;&#xff01;本baby今天又來了&#xff01;哈哈哈哈哈嗝&#x1f436; BIO NIO AIO的區別&#xff1f; 在 Java 網絡編程中&#xff0c;BIO、NIO 和 AIO 是三種不同的 I/O 模型&#xff0c;它們的核心區別在于 阻塞…

藍橋杯刷題DAY3:Horner 法則 前綴和+差分數組 貪心

所謂刷題&#xff0c;最重要的就是細心 &#x1f4cc; 題目描述 在 X 進制 中&#xff0c;每一數位的進制不固定。例如&#xff1a; 最低位 采用 2 進制&#xff0c;第二位 采用 10 進制&#xff0c;第三位 采用 8 進制&#xff0c; 則 X 進制數 321 的十進制值為&#xff…

BUU24 [GXYCTF2019]BabyUpload 1

開局上傳文件 上傳muma.php 上傳.htaccess文件也被打回 再次求助互聯網&#xff0c;才發現這提示給的多么明顯&#xff0c;上傳.htaccess文件是檢查文件類型&#xff08;Contnet-Type&#xff09;&#xff0c;上傳muma.php是檢查后綴里頭有沒有ph &#xff0c;檢查文件類型那…

RabbitMQ 從入門到精通:從工作模式到集群部署實戰(三)

文章目錄 使用CLI管理RabbitMQrabbitmqctlrabbitmq-queuesrabbitmq-diagnosticsrabbitmq-pluginsrabbitmq-streamsrabbitmq-upgraderabbitmqadmin 使用CLI管理RabbitMQ RabbitMQ CLI 工具需要安裝兼容的 Erlang/OTP版本。 這些工具假定系統區域設置為 UTF-8&#xff08;例如en…

3.攻防世界 weak_auth

題目描述提示 是一個登錄界面&#xff0c;需要密碼登錄 進入題目頁面如下 弱口令密碼爆破 用1 or 1 #試試 提示用admin登錄 則嘗試 用戶名admin密碼&#xff1a;123456 直接得到flag 常用弱口令密碼&#xff08;可復制&#xff09; 用戶名 admin admin-- admin or -- admin…

優化深度神經網絡

訓練集、開發集(驗證集)、測試集 偏差與方差 正則化 L2正則 Dropout 隨機丟棄部分神經元輸入&#xff0c;經常用于計算機視覺的神經網絡內&#xff0c;因為通常沒有足夠的訓練數據&#xff0c;很容易出現過擬合的問題 數據增強 訓練集規一化 可以使其圖像更均勻&#xff0c;…