插件窝 干货文章 CSS选择器如何精准定位并修改特定元素样式?

CSS选择器如何精准定位并修改特定元素样式?

元素 选择 并将 设置 736    来源:    2025-03-24

在CSS中,精准定位并修改特定元素的样式可以通过多种选择器来实现。以下是一些常用的选择器及其使用方法:

1. 元素选择器

通过HTML元素的标签名来选择元素。 css p { color: blue; } 这将选择所有的 <p> 元素并将它们的文本颜色设置为蓝色。

2. 类选择器

通过元素的 class 属性来选择元素。 css .highlight { background-color: yellow; } 这将选择所有 class 属性为 highlight 的元素,并将它们的背景颜色设置为黄色。

3. ID选择器

通过元素的 id 属性来选择元素。ID选择器是唯一的,一个页面中只能有一个元素使用特定的ID。 css #header { font-size: 24px; } 这将选择 id 属性为 header 的元素,并将它的字体大小设置为24像素。

4. 属性选择器

通过元素的属性来选择元素。 css input[type="text"] { border: 1px solid #ccc; } 这将选择所有 type 属性为 text<input> 元素,并为它们添加1像素的灰色边框。

5. 伪类选择器

通过元素的状态或位置来选择元素。 css a:hover { color: red; } 这将选择所有鼠标悬停时的 <a> 元素,并将它们的文本颜色设置为红色。

6. 伪元素选择器

通过元素的特定部分来选择元素。 css p::first-line { font-weight: bold; } 这将选择每个 <p> 元素的第一行,并将它们的字体加粗。

7. 后代选择器

通过元素的后代关系来选择元素。 css div p { margin-left: 20px; } 这将选择所有在 <div> 元素内的 <p> 元素,并将它们的左边距设置为20像素。

8. 子元素选择器

通过元素的直接子元素关系来选择元素。 css ul > li { list-style-type: square; } 这将选择所有作为 <ul> 元素直接子元素的 <li> 元素,并将它们的列表样式设置为方块。

9. 相邻兄弟选择器

通过元素的相邻兄弟关系来选择元素。 css h1 + p { margin-top: 0; } 这将选择紧接在 <h1> 元素后的第一个 <p> 元素,并将它的上边距设置为0。

10. 通用兄弟选择器

通过元素的兄弟关系来选择元素。
```css
h1 ~ p {
    color: green;
}
```
这将选择所有与 `<h1>` 元素同级的 `<p>` 元素,并将它们的文本颜色设置为绿色。

11. 组合选择器

可以组合使用多个选择器来更精确地定位元素。
```css
div.content p.highlight {
    font-size: 18px;
}
```
这将选择所有 `class` 为 `content` 的 `<div>` 元素内的 `class` 为 `highlight` 的 `<p>` 元素,并将它们的字体大小设置为18像素。

12. :not() 伪类

通过排除某些元素来选择元素。
```css
p:not(.special) {
    color: black;
}
```
这将选择所有 `class` 不是 `special` 的 `<p>` 元素,并将它们的文本颜色设置为黑色。

13. :nth-child() 伪类

通过元素在其父元素中的位置来选择元素。
```css
li:nth-child(odd) {
    background-color: #f2f2f2;
}
```
这将选择所有奇数位置的 `<li>` 元素,并将它们的背景颜色设置为浅灰色。

14. :first-child 和 :last-child 伪类

通过元素在其父元素中的位置来选择元素。
```css
ul li:first-child {
    font-weight: bold;
}
ul li:last-child {
    font-style: italic;
}
```
这将选择 `<ul>` 元素中的第一个 `<li>` 元素并将其字体加粗,选择最后一个 `<li>` 元素并将其字体设置为斜体。

15. :nth-of-type() 伪类

通过元素在其父元素中的类型和位置来选择元素。
```css
p:nth-of-type(2) {
    color: purple;
}
```
这将选择每个父元素中的第二个 `<p>` 元素,并将它们的文本颜色设置为紫色。

16. :only-child 伪类

选择作为其父元素唯一子元素的元素。
```css
div:only-child {
    border: 1px solid black;
}
```
这将选择所有作为其父元素唯一子元素的 `<div>` 元素,并为它们添加1像素的黑色边框。

17. :empty 伪类

选择没有任何子元素的元素。
```css
div:empty {
    display: none;
}
```
这将选择所有没有任何子元素的 `<div>` 元素,并将它们隐藏。

18. :target 伪类

选择当前活动的目标元素(通常是通过URL中的片段标识符)。
```css
:target {
    background-color: yellow;
}
```
这将选择当前URL片段标识符所指向的元素,并将它的背景颜色设置为黄色。

19. :focus 伪类

选择当前获得焦点的元素。
```css
input:focus {
    border-color: blue;
}
```
这将选择当前获得焦点的 `<input>` 元素,并将它的边框颜色设置为蓝色。

20. :checked 伪类

选择被选中的表单元素(如复选框或单选按钮)。
```css
input[type="checkbox"]:checked {
    background-color: green;
}
```
这将选择所有被选中的复选框,并将它们的背景颜色设置为绿色。

21. :disabled 和 :enabled 伪类

选择禁用或启用的表单元素。
```css
input:disabled {
    opacity: 0.5;
}
input:enabled {
    opacity: 1;
}
```
这将选择所有禁用的 `<input>` 元素并将它们的透明度设置为50%,选择所有启用的 `<input>` 元素并将它们的透明度设置为100%。

22. :valid 和 :invalid 伪类

选择有效或无效的表单元素。
```css
input:valid {
    border-color: green;
}
input:invalid {
    border-color: red;
}
```
这将选择所有有效的 `<input>` 元素并将它们的边框颜色设置为绿色,选择所有无效的 `<input>` 元素并将它们的边框颜色设置为红色。

23. :required 和 :optional 伪类

选择必填或可选的表单元素。
```css
input:required {
    border-color: blue;
}
input:optional {
    border-color: gray;
}
```
这将选择所有必填的 `<input>` 元素并将它们的边框颜色设置为蓝色,选择所有可选的 `<input>` 元素并将它们的边框颜色设置为灰色。

24. :root 伪类

选择文档的根元素(通常是 `<html>` 元素)。
```css
:root {
    --main-color: #06c;
}
```
这将选择文档的根元素并定义一个CSS变量 `--main-color`。

25. :lang() 伪类

选择具有特定语言的元素。
```css
p:lang(fr) {
    font-style: italic;
}
```
这将选择所有 `lang` 属性为 `fr` 的 `<p>` 元素,并将它们的字体设置为斜体。

26. :is() 和 :where() 伪类

选择匹配任意一组选择器的元素。
```css
:is(h1, h2, h3) {
    color: blue;
}
:where(h1, h2, h3) {
    color: red;
}
```
`:is()` 和 `:where()` 都允许你选择匹配任意一组选择器的元素,但 `:where()` 的优先级较低。

27. :has() 伪类

选择包含特定子元素的元素。
```css
div:has(p) {
    border: 1px solid black;
}
```
这将选择所有包含 `<p>` 元素的 `<div>` 元素,并为它们添加1像素的黑色边框。

28. :dir() 伪类

选择具有特定文本方向的元素。
```css
p:dir(rtl) {
    text-align: right;
}
```
这将选择所有文本方向为从右到左的 `<p>` 元素,并将它们的文本对齐方式设置为右对齐。

29. :any-link 伪类

选择所有链接元素(包括未访问和已访问的链接)。
```css
:any-link {
    color: purple;
}
```
这将选择所有链接元素并将它们的文本颜色设置为紫色。

30. :local-link 伪类

选择指向当前页面的链接元素。
```css
:local-link {
    font-weight: bold;
}
```
这将选择所有指向当前页面的链接元素并将它们的字体加粗。

31. :scope 伪类

选择当前作用域内的元素。
```css
:scope {
    background-color: yellow;
}
```
这将选择当前作用域内的元素并将它们的背景颜色设置为黄色。

32. :host 伪类

选择自定义元素的宿主元素。
```css
:host {
    display: block;
}
```
这将选择自定义元素的宿主元素并将它的显示方式设置为块级元素。

33. :host-context() 伪类

选择自定义元素的宿主元素,但仅在特定上下文中。
```css
:host-context(.dark-theme) {
    background-color: black;
}
```
这将选择在 `.dark-theme` 上下文中的自定义元素的宿主元素,并将它的背景颜色设置为黑色。

34. :defined 伪类

选择已定义的自定义元素。
```css
:defined {
    display: block;
}
```
这将选择所有已定义的自定义元素并将它们的显示方式设置为块级元素。

35. :slotted() 伪类

选择被插入到插槽中的元素。
```css
::slotted(span) {
    color: red;
}
```
这将选择所有被插入到插槽中的 `<span>` 元素,并将它们的文本颜色设置为红色。

36. :part() 伪类

选择具有特定部分的元素。
```css
::part(button) {
    background-color: blue;
}
```
这将选择所有具有 `button` 部分的元素,并将它们的背景颜色设置为蓝色。

37. :state() 伪类

选择具有特定状态的元素。
```css
:state(checked) {
    background-color: green;
}
```
这将选择所有处于 `checked` 状态的元素,并将它们的背景颜色设置为绿色。

38. :user-invalid 和 :user-valid 伪类

选择用户输入无效或有效的表单元素。
```css
input:user-invalid {
    border-color: red;
}
input:user-valid {
    border-color: green;
}
```
这将选择所有用户输入无效的 `<input>` 元素并将它们的边框颜色设置为红色,选择所有用户输入有效的 `<input>` 元素并将它们的边框颜色设置为绿色。

39. :read-only 和 :read-write 伪类

选择只读或可读写的表单元素。
```css
input:read-only {
    background-color: #f2f2f2;
}
input:read-write {
    background-color: white;
}
```
这将选择所有只读的 `<input>` 元素并将它们的背景颜色设置为浅灰色,选择所有可读写的 `<input>` 元素并将它们的背景颜色设置为白色。

40. :placeholder-shown 伪类

选择显示占位符文本的表单元素。
```css
input:placeholder-shown {
    border-color: gray;
}
```
这将选择所有显示占位符文本的 `<input>` 元素,并将它们的边框颜色设置为灰色。

41. :default 伪类

选择默认的表单元素(如默认的按钮或复选框)。
```css
input:default {
    border-color: blue;
}
```
这将选择所有默认的 `<input>` 元素,并将它们的边框颜色设置为蓝色。

42. :indeterminate 伪类

选择处于不确定状态的表单元素(如未选中的复选框)。
```css
input:indeterminate {
    background-color: yellow;
}
```
这将选择所有处于不确定状态的 `<input>` 元素,并将它们的背景颜色设置为黄色。

43. :in-range 和 :out-of-range 伪类

选择在范围内或超出范围的表单元素。
```css
input:in-range {
    border-color: green;
}
input:out-of-range {
    border-color: red;
}
```
这将选择所有在范围内的 `<input>` 元素并将它们的边框颜色设置为绿色,选择所有超出范围的 `<input>` 元素并将它们的边框颜色设置为红色。

44. :blank 伪类

选择内容为空的表单元素。
```css
input:blank {
    border-color: gray;
}
```
这将选择所有内容为空的 `<input>` 元素,并将它们的边框颜色设置为灰色。

45. :current 伪类

选择当前正在播放的媒体元素。
```css
video:current {
    border: 2px solid blue;
}
```
这将选择当前正在播放的 `<video>` 元素,并为它添加2像素的蓝色边框。

46. :past 和 :future 伪类

选择过去或未来的媒体元素。
```css
video:past {
    opacity: 0.5;
}
video:future {
    opacity: 1;
}
```
这将选择所有过去的 `<video>` 元素并将它们的透明度设置为50%,选择所有未来的 `<video>` 元素并将它们的透明度设置为100%。

47. :playing 和 :paused 伪类

选择正在播放或暂停的媒体元素。
```css
video:playing {
    border-color: green;
}
video:paused {
    border-color: red;
}
```
这将选择所有正在播放的 `<video>` 元素并将它们的边框颜色设置为绿色,选择所有暂停的 `<video>` 元素并将它们的边框颜色设置为红色。

48. :fullscreen 伪类

选择全屏显示的元素。
```css
:fullscreen {
    background-color: black;
}
```
这将选择所有全屏显示的元素,并将它们的背景颜色设置为黑色。

49. :modal 伪类

选择模态对话框元素。
```css
:modal {
    background-color: white;
}
```
这将选择所有模态对话框元素,并将它们的背景颜色设置为白色。

50. :picture-in-picture 伪类

选择画中画模式的媒体元素。
```css
video:picture-in-picture {
    border: 2px solid yellow;
}
```
这将选择所有处于画中画模式的 `<video>` 元素,并为它们添加2像素的黄色边框。

51. :autofill 伪类

选择自动填充的表单元素。
```css
input:autofill {
    background-color: #f2f2f2;
}
```
这将选择所有自动填充的 `<input>` 元素,并将它们的背景颜色设置为浅灰色。

52. :placeholder 伪类

选择占位符文本。
```css
::placeholder {
    color: gray;
}
```
这将选择所有占位符文本,并将它们的颜色设置为灰色。

53. :selection 伪类

选择用户选中的文本。
```css
::selection {
    background-color: yellow;
}
```
这将选择用户选中的文本,并将它们的背景颜色设置为黄色。

54. :first-letter 和 :first-line 伪元素

选择元素的第一个字母或第一行。
```css
p::first-letter {
    font-size: 200%;
}
p::first-line {
    font-weight: bold;
}
```
这将选择每个 `<p>` 元素的第一个字母并将它的字体大小设置为200%,选择每个 `<p>` 元素的第一行并将它的字体加粗。

55. :before 和 :after 伪元素

在元素的内容之前或之后插入内容。
```css
p::before {
    content: "Note: ";
    font-weight: bold;
}
p::after {
    content: ".";
}
```
这将在每个 `<p>` 元素的内容之前插入 "Note: " 并将它的字体加粗,在每个 `<p>` 元素的内容之后插入一个句点。

56. :marker 伪元素

选择列表项的标记(如项目符号或数字)。
```css
li::marker {
    color: red;
}
```
这将选择所有列表项的标记,并将它们的颜色设置为红色。

57. :backdrop 伪元素

选择全屏或模态对话框的背景。
```css
:backdrop {
    background-color: rgba(0, 0, 0, 0.5);
}
```
这将选择全屏或模态对话框的背景,并将它的背景颜色设置为半透明的黑色。

58. :cue 伪元素

选择媒体元素的字幕或提示。
```css
::cue {
    color: white;
    background-color: black;
}
```
这将选择所有媒体元素的字幕或提示,并将它们的文本颜色设置为白色,背景颜色设置为黑色。

59