一、伪类

伪类是用于选择具有特定状态的元素
其语法结构为:开头

对于特定状态的理解案例

请注意作用对象,伪类只是添加描述,样式作用对象不变

  1. /* 如下表示选择一个a标签,并且此时鼠标悬浮在标签上 */
  2. a:hover{}
  3. /* 如下表示选择一个a标签,并且该a标签的跳转地址已经被访问 */
  4. a:visited{}
  5. /* 如下表示选择一个a标签,首先其跳转地址已被访问,再来此时鼠标悬浮在标签上 */
  6. a:visited:hover{}

常见伪类

:hover,:first-child,:first-of-type,:nth-child(),:not(),:has()等等

二、伪元素

伪元素是用于选择不存在于DOM的虚拟元素(该元素浏览器会自动创建,且不存在于DOM中)
其语法结构以::开头(此处由于历史原因,单冒号也行,但实际上是浏览器会帮你补全为双冒号)

对于虚拟元素的理解案例

请注意作用对象,伪元素会改变样式的作用对象

  1. /* 如下表示选择一个p标签文本的第一个字符 */
  2. p::first-letter{}
  3. /* 如下表示创建并选择p标签后的after伪元素 */
  4. p::after{}

常用伪元素

::before,::after等等