Псевдоэлементы

Псевдоэлементы используются для определения стиля определенной части HTML элемента.

Например, псевдоэлементы могут использоваться для:

  • определения стиля первой буквы или строки элемента,
  • вставки контента перед или после основного содержимого элемента.

Синтаксис

Псевдоэлементы, как и псевдоклассы, "присасываются" к селекторам и имеют следующий синтаксис:


селектор::псевдоэлемент {
  свойство: значение;
}

Псевдоэлемент ::first-line

Псевдоэлемент ::first-line позволяет добавить особый стиль для первой строки текста.

В следующем примере первая строка всех элементов <p> форматируется особым образом:


p::first-line {
  color: #ff0000;
  font-variant: small-caps;
}

В декларации псевдоэлемента ::first-line допустимо использовать только свойства, относящиеся к шрифту, изменению цвета текста и фона.

Псевдоэлемент ::first-letter

Псевдоэлемент ::first-letter позволяет добавить особый стиль для первой буквы текста элемента.

В следующем примере первая буква всех элементов <p> форматируется особым образом:


p::first-letter {
  color: #ff0000;
  font-size: xx-large;
}

В декларации псевдоэлемента ::first-letter допустимо использовать только свойства, относящиеся к шрифтам, полям, отступам, границам, цвету и фону.

Псевдоэлементы и HTML классы

Псевдоэлементы можно комбинировать с HTML классами:


p.intro::first-letter {
  color: #ff0000;
  font-size: 200%;
}

В приведенном выше примере первая буква абзацев с классом "intro" будет отображаться красным цветом и увеличенным размером шрифта.

Несколько псевдоэлементов для одного элемента

Для одного элемента можно определять несколько псевдоэлементов.

В следующем примере первая буква абзаца будет отображаться красным цветом и шрифтом размером xx-large. Остальная часть первой строки будет синего цвета и в варианте small-caps. Оставшиеся строки абзаца будут отображаться размером шрифта и цветом по умолчанию:


p::first-letter {
  color: #ff0000;
  font-size: xx-large;
}

p::first-line {
  color: #0000ff;
  font-variant: small-caps;
}

Псевдоэлемент ::before

Псевдоэлемент ::before используется, чтобы вставить некий контент перед основным содержимым элемента.

В следующем примере вставляется изображение перед содержимым каждого элемента <h1>:


h1::before {
  content: url(smiley.gif);
}

Псевдоэлемент ::after

Псевдоэлемент ::after используется, чтобы вставить некий контент после основного содержимого элемента.

В следующем примере вставляется изображение после содержимого каждого элемента <h1>:


h1::after {
  content: url(smiley.gif);
}

Псевдоэлементы ::before и ::after используются вместе со свойством content, чтобы добавить дополнительный контент, не изменяя код HTML.

Свойство content может принимать следующие значения: open-quote, close-quote, no-open-quote, no-close-quote, любая строка, заключенная в кавычки, или изображение, подключаемое конструкцией url(имя_файла_изображения).


blockquote:before {
   content: open-quote;
}

blockquote:after {
   content: close-quote;
}

li:before {
   content: "POW: "
}

p:before {
   content: url(images/jam.jpg)
}

Псевдоэлемент ::marker

Псевдоэлемент ::marker позволяет определить стили маркера элемента списка. Работает с любым элементом, у которого установлено свойство display: list-item (например, <li> или <summary>).

В следующем примере примере маркеры списка изменят свой размер и станут красными:


li::marker {
  color: red;
  font-size: 23px;
}

Псевдоэлемент ::selection

Псевдоэлемент ::selection определяет стиль для выделенного пользователем текста.

В правилах допускается использовать следующие свойства: color, background, cursor, outline и text-shadow.

В следующем примере выделенный пользователем текст станет красным на желтом фоне:


::selection {
  color: red;
  background: yellow;
}

Двойное двоеточие или одинарное?

Ранее, в CSS2 и CSS1, как для псевдоклассов, так и для псевдоэлементов использовалось одинарное двоеточие (например, :before).

Однако, в CSS3 для того, чтобы различать псевдоэлементы и псевдоклассы для записи псевдоэлементов ввели двойное двоеточие вместо одинарного (например, ::before).

Для обратной совместимости допускается использовать одинарное двоеточие для псевдоэлементов. Большинство браузеров понимает обе записи.