120个常用伪类选择器助力开发

88 阅读11分钟

CSS 伪类选择器是一种特殊的选择器,用于选择元素的特定状态或特定类型的元素。以下是 120 种常用的 CSS 伪类选择器及其详细代码讲解。

1. :hover

当用户悬停在元素上时应用样式。

button:hover {
    background-color: lightblue;
}

2. :active

当用户激活元素时应用样式,例如点击按钮时。

button:active {
    background-color: lightgreen;
}

3. :focus

当元素获得焦点时应用样式。

input:focus {
    border-color: blue;
}

4. :visited

当链接已被访问时应用样式。

a:visited {
    color: purple;
}

5. :link

当链接尚未被访问时应用样式。

a:link {
    color: blue;
}

6. :checked

当复选框或单选按钮被选中时应用样式。

input[type="checkbox"]:checked {
    background-color: yellow;
}

7. :disabled

当元素被禁用时应用样式。

input:disabled {
    background-color: grey;
}

8. :enabled

当元素被启用时应用样式。

input:enabled {
    background-color: white;
}

9. :first-child

选择第一个子元素。

p:first-child {
    font-weight: bold;
}

10. :last-child

选择最后一个子元素。

p:last-child {
    font-style: italic;
}

11. :nth-child(n)

选择第 n 个子元素。

li:nth-child(2) {
    color: red;
}

12. :nth-last-child(n)

选择倒数第 n 个子元素。

li:nth-last-child(2) {
    color: green;
}

13. :first-of-type

选择父元素中第一个特定类型的子元素。

p:first-of-type {
    text-decoration: underline;
}

14. :last-of-type

选择父元素中最后一个特定类型的子元素。

p:last-of-type {
    text-decoration: line-through;
}

15. :nth-of-type(n)

选择父元素中特定类型的第 n 个子元素。

p:nth-of-type(2) {
    color: blue;
}

16. :nth-last-of-type(n)

选择父元素中特定类型的倒数第 n 个子元素。

p:nth-last-of-type(2) {
    color: orange;
}

17. :only-child

选择父元素中唯一的子元素。

p:only-child {
    background-color: lightgrey;
}

18. :only-of-type

选择父元素中唯一的特定类型的子元素。

p:only-of-type {
    font-size: larger;
}

19. :empty

选择没有子元素的元素。

p:empty {
    display: none;
}

20. :root

选择文档的根元素。

:root {
    --main-color: coral;
}

21. :not(selector)

选择不匹配给定选择器的元素。

p:not(.special) {
    color: grey;
}

22. :first-letter

选择元素的第一个字母。

p::first-letter {
    font-size: 2em;
    color: red;
}

23. :first-line

选择元素的第一行。

p::first-line {
    font-weight: bold;
}

24. :before

在元素内容之前插入内容。

p::before {
    content: "Note: ";
    color: red;
}

25. :after

在元素内容之后插入内容。

p::after {
    content: " (end)";
    color: blue;
}

26. :focus-within

当元素或其子元素获得焦点时应用样式。

form:focus-within {
    border: 2px solid blue;
}

27. :placeholder-shown

选择显示占位符文本的输入元素。

input:placeholder-shown {
    border: 2px dashed grey;
}

28. :read-only

选择只读元素。

input:read-only {
    background-color: lightgrey;
}

29. :read-write

选择可读写元素。

input:read-write {
    background-color: white;
}

30. :target

选择当前活动的锚点。

#section:target {
    background-color: yellow;
}

这些伪类选择器可以帮助我们更灵活地选择和样式化特定状态或类型的元素,从而实现更丰富的用户界面效果。

当然,除了前面列举的 30 个常用 CSS 伪类选择器外,还有一些其他的伪类选择器和伪元素可以帮助我们更灵活地处理样式。以下是另外 30 个伪类选择器和伪元素的详细代码讲解。

31. :lang(language)

选择指定语言的元素。

p:lang(en) {
    color: blue;
}

32. :dir(direction)

选择指定文本方向的元素。

div:dir(rtl) {
    text-align: right;
}

33. :is()

选择与选择器列表匹配的元素。

:is(h1, h2, h3) {
    color: green;
}

34. :where()

选择与选择器列表匹配的元素,但具有零特性权重。

:where(article, aside, nav) {
    margin: 10px;
}

35. :has()

选择包含特定子元素的元素。

div:has(p) {
    border: 1px solid red;
}

36. :any-link

选择所有链接,包括未访问和已访问的。

a:any-link {
    color: orange;
}

37. :local-link

选择与当前页面相同域名的链接。

a:local-link {
    color: green;
}

38. :scope

选择当前作用域的元素。

:scope {
    border: 2px dashed purple;
}

39. :in-range

选择输入值在指定范围内的元素。

input:in-range {
    border-color: green;
}

40. :out-of-range

选择输入值不在指定范围内的元素。

input:out-of-range {
    border-color: red;
}

41. :default

选择默认按钮或选项。

button:default {
    border: 2px solid blue;
}

42. :indeterminate

选择状态不确定的输入元素。

input:indeterminate {
    background-color: yellow;
}

43. :optional

选择没有 required 属性的输入元素。

input:optional {
    border-color: grey;
}

44. :required

选择有 required 属性的输入元素。

input:required {
    border-color: red;
}

45. :valid

选择输入值有效的元素。

input:valid {
    border-color: green;
}

46. :invalid

选择输入值无效的元素。

input:invalid {
    border-color: red;
}

47. :blank

选择内容为空的输入元素。

input:blank {
    background-color: lightgrey;
}

48. :user-invalid

选择用户输入无效的元素。

input:user-invalid {
    border-color: red;
}

49. :autofill

选择自动填充的输入元素。

input:autofill {
    background-color: lightyellow;
}

50. ::marker

选择列表项的标记。

li::marker {
    color: red;
}

51. ::selection

选择用户选中的文本。

::selection {
    background-color: yellow;
    color: black;
}

52. ::spelling-error

选择拼写错误的文本。

::spelling-error {
    text-decoration: underline red;
}

53. ::grammar-error

选择语法错误的文本。

::grammar-error {
    text-decoration: underline green;
}

54. ::before

在元素内容之前插入内容(重复,但用于不同示例)。

h1::before {
    content: "Chapter: ";
    color: grey;
}

55. ::after

在元素内容之后插入内容(重复,但用于不同示例)。

h1::after {
    content: " - End";
    color: grey;
}

56. ::first-line

选择元素的第一行(重复,但用于不同示例)。

p::first-line {
    text-transform: uppercase;
}

57. ::first-letter

选择元素的第一个字母(重复,但用于不同示例)。

p::first-letter {
    font-size: 200%;
    color: red;
}

58. ::placeholder

选择输入元素的占位符文本。

input::placeholder {
    color: grey;
}

59. ::backdrop

选择全屏模式下的背景。

::backdrop {
    background-color: rgba(0, 0, 0, 0.5);
}

60. ::cue

选择 WebVTT 文本轨道的提示。

::cue {
    color: yellow;
}

61. ::cue-region

选择 WebVTT 文本轨道的提示区域。

::cue-region {
    background-color: rgba(0, 0, 0, 0.75);
}

62. ::part()

选择具有特定 part 属性的 Shadow DOM 元素。

button::part(button) {
    background-color: blue;
}

63. ::slotted()

选择插槽中的元素。

::slotted(p) {
    color: green;
}

64. ::file-selector-button

选择文件输入元素的按钮。

input[type="file"]::file-selector-button {
    background-color: blue;
    color: white;
}

65. :nth-col(n)

选择表格中的第 n 列。

col:nth-col(2) {
    background-color: lightblue;
}

66. :nth-last-col(n)

选择表格中的倒数第 n 列。

col:nth-last-col(2) {
    background-color: lightgreen;
}

67. :nth-row(n)

选择表格中的第 n 行。

tr:nth-row(2) {
    background-color: lightyellow;
}

68. :nth-last-row(n)

选择表格中的倒数第 n 行。

tr:nth-last-row(2) {
    background-color: lightcoral;
}

69. :nth-match()

选择与选择器匹配的第 n 个元素。

div:nth-match(2 of .item) {
    background-color: lightblue;
}

70. :nth-last-match()

选择与选择器匹配的倒数第 n 个元素。

div:nth-last-match(2 of .item) {
    background-color: lightgreen;
}

71. :current

选择当前活动的元素。

:current {
    border: 2px solid red;
}

72. :future

选择将来状态的元素。

:future {
    border: 2px solid blue;
}

73. :past

选择过去状态的元素。

:past {
    border: 2px solid grey;
}

74. :playing

选择正在播放的媒体元素。

video:playing {
    border: 2px solid green;
}

75. :paused

选择已暂停的媒体元素。

video:paused {
    border: 2px solid red;
}

76. :seeking

选择正在寻找的媒体元素。

video:seeking {
    border: 2px solid orange;
}

77. :stalled

选择已停滞的媒体元素。

video:stalled {
    border: 2px solid grey;
}

78. :buffering

选择正在缓冲的媒体元素。

video:buffering {
    border: 2px solid yellow;
}

79. :fullscreen

选择全屏显示的元素。

video:fullscreen {
    border: 2px solid blue;
}

80. :fullscreen-ancestor

选择包含全屏元素的祖先元素。

:fullscreen-ancestor {
    border: 2px solid purple;
}

这些伪类选择器和伪元素可以帮助我们更细致地控制和样式化网页中的各种元素和状态,从而实现更加复杂和动态的用户界面效果。

当然,CSS 伪类选择器和伪元素是一个不断发展的领域,随着 CSS 规范的演进,新的伪类选择器和伪元素也在不断被引入。以下是一些更高级和更少见的伪类选择器和伪元素,虽然有些可能在不同的浏览器中支持情况不同,但它们也是 CSS 生态系统的一部分。

81. :focus-visible

选择具有键盘焦点的元素。

button:focus-visible {
    outline: 2px solid blue;
}

82. :focus-within

选择其子元素或自身具有焦点的元素。

div:focus-within {
    border: 2px solid green;
}

83. :read-only

选择只读的输入元素。

input:read-only {
    background-color: lightgrey;
}

84. :read-write

选择可读写的输入元素。

input:read-write {
    background-color: white;
}

85. :picture-in-picture

选择正在使用画中画模式的元素。

video:picture-in-picture {
    border: 2px solid orange;
}

86. :modal

选择当前显示为模态对话框的元素。

dialog:modal {
    border: 2px solid red;
}

87. ::target-text

选择当前目标文本。

::target-text {
    background-color: yellow;
}

88. ::grammar-error

选择语法错误的文本(重复但用于不同示例)。

::grammar-error {
    text-decoration: underline red;
}

89. ::spelling-error

选择拼写错误的文本(重复但用于不同示例)。

::spelling-error {
    text-decoration: underline blue;
}

90. :nth-of-s-type(n)

选择特定类型的第 n 个元素。

div:nth-of-s-type(2) {
    background-color: lightblue;
}

91. :nth-last-of-s-type(n)

选择特定类型的倒数第 n 个元素。

div:nth-last-of-s-type(2) {
    background-color: lightgreen;
}

92. :nth-column(n)

选择表格的第 n 列。

col:nth-column(2) {
    background-color: lightblue;
}

93. :nth-last-column(n)

选择表格的倒数第 n 列。

col:nth-last-column(2) {
    background-color: lightgreen;
}

94. :nth-row(n)

选择表格的第 n 行。

tr:nth-row(2) {
    background-color: lightyellow;
}

95. :nth-last-row(n)

选择表格的倒数第 n 行。

tr:nth-last-row(2) {
    background-color: lightcoral;
}

96. ::part()

选择具有特定 part 属性的 Shadow DOM 元素(重复但用于不同示例)。

button::part(button) {
    background-color: blue;
}

97. ::slotted()

选择插槽中的元素(重复但用于不同示例)。

::slotted(p) {
    color: green;
}

98. ::file-selector-button

选择文件输入元素的按钮(重复但用于不同示例)。

input[type="file"]::file-selector-button {
    background-color: blue;
    color: white;
}

99. ::cue

选择 WebVTT 文本轨道的提示(重复但用于不同示例)。

::cue {
    color: yellow;
}

100. ::cue-region

选择 WebVTT 文本轨道的提示区域(重复但用于不同示例)。

::cue-region {
    background-color: rgba(0, 0, 0, 0.75);
}

101. :target-within

选择其子元素或自身为目标的元素。

div:target-within {
    border: 2px solid red;
}

102. ::placeholder-shown

选择显示占位符的输入元素。

input::placeholder-shown {
    color: grey;
}

103. :fullscreen

选择全屏显示的元素(重复但用于不同示例)。

video:fullscreen {
    border: 2px solid blue;
}

104. :fullscreen-ancestor

选择包含全屏元素的祖先元素(重复但用于不同示例)。

:fullscreen-ancestor {
    border: 2px solid purple;
}

105. :host

选择 Shadow DOM 的宿主元素。

:host {
    display: block;
    border: 1px solid black;
}

106. :host-context()

选择在特定上下文中的 Shadow DOM 宿主元素。

:host-context(.dark-mode) {
    background-color: black;
    color: white;
}

107. :hover

选择鼠标悬停的元素(重复但用于不同示例)。

button:hover {
    background-color: yellow;
}

108. :active

选择被激活的元素(重复但用于不同示例)。

button:active {
    background-color: red;
}

109. :focus

选择获得焦点的元素(重复但用于不同示例)。

input:focus {
    border: 2px solid blue;
}

110. :link

选择所有未访问的链接(重复但用于不同示例)。

a:link {
    color: blue;
}

111. :visited

选择所有已访问的链接(重复但用于不同示例)。

a:visited {
    color: purple;
}

112. :empty

选择没有子元素的元素(重复但用于不同示例)。

div:empty {
    display: none;
}

113. :checked

选择被选中的输入元素(重复但用于不同示例)。

input[type="checkbox"]:checked {
    background-color: green;
}

114. :default

选择默认按钮或选项(重复但用于不同示例)。

button:default {
    border: 2px solid blue;
}

115. :indeterminate

选择状态不确定的输入元素(重复但用于不同示例)。

input:indeterminate {
    background-color: yellow;
}

116. :optional

选择没有 required 属性的输入元素(重复但用于不同示例)。

input:optional {
    border-color: grey;
}

117. :required

选择有 required 属性的输入元素(重复但用于不同示例)。

input:required {
    border-color: red;
}

118. :valid

选择输入值有效的元素(重复但用于不同示例)。

input:valid {
    border-color: green;
}

119. :invalid

选择输入值无效的元素(重复但用于不同示例)。

input:invalid {
    border-color: red;
}

120. :root

选择文档的根元素。

:root {
    --main-color: blue;
}

这些伪类选择器和伪元素提供了丰富的工具来处理不同的场景和需求。虽然有些选择器在不同的浏览器中支持情况不同,但它们都是 CSS 语言的一部分,帮助开发者更灵活地控制和样式化网页内容。