# HTML中的偽類有哪些
## 什么是偽類
偽類(Pseudo-class)是CSS中用于定義元素特殊狀態的選擇器。它們允許開發者根據用戶交互、文檔結構或其他外部條件來樣式化元素,而無需修改HTML結構或添加額外的class。
偽類的語法特征是在選擇器后跟一個冒號(:),例如`:hover`或`:first-child`。CSS3規范將偽類與偽元素(::)明確區分開來。
---
## 偽類的主要分類
### 1. 用戶交互偽類
這些偽類與用戶的交互行為相關:
- `:hover` - 鼠標懸停在元素上時
- `:active` - 元素被激活(如鼠標點擊)時
- `:focus` - 元素獲得焦點時(如表單輸入)
- `:focus-visible` - 元素通過鍵盤導航獲得焦點時
- `:focus-within` - 元素或其子元素獲得焦點時
```css
button:hover {
background-color: #4CAF50;
}
input:focus {
border-color: blue;
}
基于文檔結構的偽類選擇器:
:first-child
- 選擇父元素的第一個子元素:last-child
- 選擇父元素的最后一個子元素:nth-child(n)
- 選擇父元素的第n個子元素:nth-last-child(n)
- 從末尾開始計數:only-child
- 選擇沒有兄弟元素的子元素:first-of-type
- 選擇同類型中的第一個:last-of-type
- 選擇同類型中的最后一個:nth-of-type(n)
- 選擇同類型中的第n個:empty
- 選擇沒有子元素的元素li:nth-child(odd) {
background: #f2f2f2;
}
p:first-of-type {
font-size: 1.2em;
}
專門用于表單元素的偽類:
:checked
- 被選中的單選/復選框:disabled
- 被禁用的表單元素:enabled
- 可用的表單元素:required
- 標記為必填的字段:optional
- 非必填字段:valid
- 通過驗證的輸入:invalid
- 未通過驗證的輸入:in-range
/:out-of-range
- 數值范圍判斷:read-only
/:read-write
- 讀寫狀態input:invalid {
border-color: red;
}
checkbox:checked + label {
font-weight: bold;
}
專門用于超鏈接的狀態:
:link
- 未訪問的鏈接:visited
- 已訪問的鏈接a:link { color: blue; }
a:visited { color: purple; }
:target
- URL片段標識符匹配的元素:root
- 文檔根元素(通常是html):not(selector)
- 反向選擇器:lang(language)
- 根據語言屬性選擇:is()
/:where() - 分組選擇器(CSS4):target {
background: yellow;
}
article:not(.featured) {
opacity: 0.8;
}
偽類可以與其他選擇器組合使用:
/* 表格奇數行且懸停時 */
tr:nth-child(odd):hover {
background: #e6f7ff;
}
/* 非第一個子元素的段落 */
p:not(:first-child) {
margin-top: 1em;
}
:focus-visible
)需要現代瀏覽器支持:has()
)仍處于實驗階段:hover
行為可能與桌面不同可以使用@supports規則進行特性檢測:
@supports selector(:focus-visible) {
button:focus-visible {
outline: 3px solid blue;
}
}
:not()
與結構偽類結合可創建強大選擇器/* 好例子:清晰的視覺反饋 */
button:focus, button:hover {
opacity: 0.9;
transform: translateY(-1px);
}
/* 避免:可能影響性能 */
div :nth-child(3n+1) span:hover {
/* 復雜選擇器 */
}
:has()
- 父選擇器(已部分支持):dir()
- 文字方向選擇:user-invalid
- 用戶交互后的無效狀態:nth-child()
功能/* 未來可能支持的語法 */
section:has(h2.special) {
border: 1px solid gold;
}
類別 | 常用偽類 | 典型應用場景 |
---|---|---|
交互 | :hover, :active | 按鈕狀態、菜單交互 |
結構 | :nth-child, :empty | 列表樣式、網格布局 |
表單 | :checked, :valid | 表單驗證、自定義控件 |
鏈接 | :link, :visited | 導航樣式 |
其他 | :target, :not() | 單頁應用、條件樣式 |
通過合理使用偽類,開發者可以創建更動態、響應式的界面,而無需增加HTML復雜度或依賴JavaScript。理解各種偽類的特性和瀏覽器支持情況,是成為CSS高手的重要一步。 “`
注:本文約1450字,全面介紹了HTML/CSS中的偽類分類、語法示例和實際應用技巧。如需調整字數或補充特定內容,可進一步擴展具體示例或瀏覽器兼容性細節。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。