Псевдокласс присоединяется к CSS селекторам, чтобы определить особое состояние данного элемента.
Например, псевдоклассы могут использоваться, чтобы определять
- стили элементов, когда пользователь наводит на них курсор мыши,
 - разные стили для посещенных и не посещенных ссылок,
 - стиль элемента, когда он получает фокус.
 
Синтаксис
Декларация селектора с псевдоклассом имеет следующий синтаксис:
селектор:псевдокласс {
  свойство: значение;
}
Т.е. псевдокласс ставится после селектора и отделяется от него двоеточием.
Псевдоклассы ссылок
Ссылки могут отображаться разными способами.
Есть четыре псевдокласса ссылки:
:link- обычная, не посещенная ссылка:visited- ссылка, которую пользователь уже посетил:hover- ссылка, на которую наведен курсор мыши:active- ссылка в момент нажатия
a:link {
   color: blue;
}
a:visited {
   color: purple;
}
a:active {
   color: red;
}
a:hover {
   text-decoration: none;
   color: blue;
   background-color: yellow;
}
Примечание: Чтобы CSS определения состояния ссылки были эффективными, необходимо соблюдать некоторые правила: a:hover должна стоять после a:link и a:visited, а a:active должна стоять после a:hover!
Назначение иного цвета для посещенных ссылок – это хорошая практика, поскольку многие пользователи этого ожидают, хотя CSS предоставляет возможность этого не делать.
Традиционно, не посещенные текстовые ссылки отображаются синим цветом, а посещенные – пурпурным, и есть причины думать, что это наиболее эффективные цвета в данном случае, хотя опять же из-за постоянно растущей популярности CSS среднестатистический пользователь уже больше не ожидает, что ссылка будет синего или пурпурного цвета.
Псевдоклассы и HTML классы
Псевдоклассы можно комбинировать с HTML классами:
a.highlight:hover {
  color: #ff0000;
}
Псевдокласс :hover с другими элементами
Кроме всего прочего псевдокласс :hover может использоваться с любыми элементами, а не только со ссылками.
В следующем примере псевдокласс :hover используется с элементом <div>:
div:hover {
  background-color: blue;
}
К сожалению, браузер Internet Explorer не поддерживает такой вариант использования данного псевдокласса. И это чрезвычайно прискорбно, так как лишает возможности применять различные визуальные трюки, которые так восхитительно смотрятся в других браузерах.
Простая появляющаяcя подсказка
Пример простой появляющейся подсказки. При наведении на элемент <div> отображается элемент <p>:
Тада! А вот и я!
p {
  display: none;
  background-color: yellow;
  padding: 20px;
}
div:hover p {
  display: block;
}
Псевдокласс :first-child
Псевсдокласс :first-child соответствует заданному элементу, который является первым дочерним элементом другого элемента.
В следующем примере селектор соответствует любому элементу <p>, который является первым дочерним элементом любого элемента:
p:first-child {
  color: blue;
}
В следующем примере селектор соответствует первому элементу <i> внутри всех элементов <p>:
p i:first-child {
  color: blue;
}
В следующем примере селектор соответствует всем элементам <i> внутри элементов <p>, которые являются первыми дочерними элементами другого элемента:
p:first-child i {
  color: blue;
}
Псевдокласс :lang
Псевдокласс :lang позволяет определять особые правила для разных языков.
В следующем примере :lang определяет цитатные символы для элемента <q> с атрибутом lang="no":
<html>
<head>
<style>
  q:lang(no) {
    quotes: "~" "~";
  }
</style>
</head>
<body>
<p>Какой-то текст <q lang="no">Такая-то цитата</q> Какой-то текст.</p>
</body>
</html>
Другие псевдоклассы
Кроме описанных существуют и другие псевдоклассы, которые могут оказаться весьма полезны при определении стилей HTML элементов:
| Псевдокласс | Пример | Описание | 
|---|---|---|
| :checked | input:checked | Выбирает каждый элемент <input> со статусом "включен" (с атрибутом checked) | 
| :disabled | input:disabled | Выбирает каждый заблокированный элемент <input> (с атрибутом disabled) | 
| :empty | p:empty | Выбирает все заданные элементы, у которых нет дочерних элементов | 
| :enabled | input:enabled | Выбирает все доступные элементы <input> | 
| :first-of-type | p:first-of-type | Выбирает каждый элемент, который является первым дочерним заданным элементом своего родителя | 
| :focus | input:focus | Выбирает элемент, на который переведен фокус | 
| :in-range | input:in-range | Выбирает элемент <input> со значением в заданном диапазоне | 
| :invalid | input:invalid | Выбирает все элементы <input>, значение которых не соответствует указанному типу | 
| :last-child | p:last-child | Выбирает каждый элемент, который является последним дочерним элементом своего родителя | 
| :last-of-type | p:last-of-type | Выбирает каждый элемент, который является последним дочерним заданным элементом своего родителя | 
| :not(селектор) | :not(p) | Выбирает каждый элемент, который не является указанным элементом | 
| :nth-child(n) | p:nth-child(2) | Выбирает каждый элемент, который n-й по счету дочерний элемент своего родителя | 
| :nth-last-child(n) | p:nth-last-child(2) | Выбирает каждый элемент, который n-й по счету дочерний элемент своего родителя, считая от последнего дочернего элемента | 
| :nth-last-of-type(n) | p:nth-last-of-type(2) | Выбирает каждый элемент, который n-й по счету дочерний заданный элемент своего родителя, считая от последнего дочернего элемента | 
| :nth-of-type(n) | p:nth-of-type(2) | Выбирает каждый элемент, который n-й по счету дочерний заданный элемент своего родителя | 
| :only-of-type | p:only-of-type | Выбирает каждый элемент, который является единственным элементом такого типа у своего родителя | 
| :only-child | p:only-child | Выбирает каждый элемент, который является единственным дочерним элементом у своего родителя | 
| :optional | input:optional | Выбирает элементы формы без атрибута "required" | 
| :out-of-range | input:out-of-range | Выбирает элементы <input>, значения которых выходят за пределы заданного диапазона | 
| :read-only | input:read-only | Выбирает элементы формы с атрибутом "readonly" | 
| :read-write | input:read-write | Выбирает элементы формы без атрибута "readonly" | 
| :required | input:required | Выбирает элементы формы с атрибутом "required" | 
| :root | root | Выбирает корневой элемент документа | 
| :target | #news:target | Выбирает текущий активный элемент (у которого было нажато на URL, содержащее это имя анкора) | 
| :valid | input:valid | Выбирает все элементы <input> с вылидным значением |