Skip to main content

What is the difference between pseudo-class and pseudo-element?

A pseudo-class is a selector that assists in the selection of something that cannot be expressed by a simple selector, for example :hover. A pseudo-element however allows us to create items that do not normally exist in the document tree, for example ::after.

Pseudo-classes:

Pseudo-classes select regular elements but under certain conditions, like when their position relative to siblings or when they're under a particular state. Here is a list of pseudo-classes in CSS3:

a) Dynamic pseudo-classes:

  • :link
  • :visited
  • :hover
  • :active
  • :focus

b) UI element states pseudo-classes:

  • :enabled
  • :disabled
  • :checked

c) Structural pseudo-classes:

  • :first-child
  • :nth-child(n)
  • :nth-last-child(n)
  • :nth-of-type(n)
  • :nth-last-of-type(n)
  • :last-child
  • :first-of-type
  • :last-of-type
  • :only-child
  • :only-of-type
  • :root
  • :empty

d) Other pseudo-classes:

:not(x) :target :lang(language)

Pseudo-elements:

Pseudo-elements effectively create new elements that are not specified in the markup of the document and can be manipulated much like a regular element.

  • ::before
  • ::after
  • ::first-letter
  • ::first-line
  • ::selection