Spec-Zone.ru › CSS

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

Базовая поддержка Широко доступно

Эта функция хорошо зарекомендовала себя и работает на множестве устройств и в различных версиях браузеров. Она доступна во всех браузерах с июля 2015 года.

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

Попробуйте

a::after {
  content: " (" attr(href) ")";
}

.dead-link {
  text-decoration: line-through;
}

.dead-link::after {
  content: url("/shared-assets/images/examples/warning.svg");
  display: inline-block;
  width: 12px;
  height: 12px;
}
<p>
  The sailfish is named for its sail-like dorsal fin and is widely considered
  the fastest fish in the ocean.
  <a href="https://en.wikipedia.org/wiki/Sailfish"
    >You can read more about it here</a
  >.
</p>

<p>
  The red lionfish is a predatory scorpionfish that lives on coral reefs of the
  Indo-Pacific Ocean and more recently in the western Atlantic.
  <a href="" class="dead-link">You can read more about it here</a>.
</p>

Синтаксис

::after {
  content: /* value */;
  /* properties */
}

Описание

Псевдоэлемент ::after — это строчный блок, создаваемый непосредственно внутри связанного с ним элемента, или «исходного элемента». Его часто используют для добавления декоративного содержимого к элементу с помощью свойства content, например значков, кавычек или других украшений.

Псевдоэлементы ::after нельзя применять к замещаемым элементам, таким как <img>, содержимое которых определяется внешними ресурсами и не зависит от стилей текущего документа.

Псевдоэлемент ::after со значением свойства display list-item ведёт себя как элемент списка и поэтому может создавать псевдоэлемент ::marker, как и элемент <li>.

Если свойство content не задано, имеет недопустимое значение или задано со значением normal либо none, псевдоэлемент ::after не отображается. Он ведёт себя так, как если бы было задано значение display: none.

Примечание: Спецификация Selectors Level 3 ввела запись с двойным двоеточием ::after, чтобы отличать псевдоклассы от псевдоэлементов. Браузеры также принимают запись с одним двоеточием :after, введённую в CSS2.

По умолчанию псевдоэлементы ::before и ::after используют тот же контекст наложения, что и их родительский элемент. Если свойство z-index явно не задано, сгенерированное содержимое псевдоэлемента ::after будет отображаться поверх сгенерированного содержимого псевдоэлемента ::before, поскольку ::after отображается позже в потоке DOM.

Доступность

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

Примеры

Базовое использование

Создадим два класса: один для скучных абзацев, а другой — для интересных. С их помощью можно добавлять псевдоэлементы в конец абзацев.

HTML

<p class="boring-text">Here is some plain old boring text.</p>
<p>Here is some normal text that is neither boring nor exciting.</p>
<p class="exciting-text">Contributing to MDN is fun.</p>

CSS

.exciting-text::after {
  content: " <- EXCITING!";
  color: darkgreen;
  font-weight: bolder;
}

.boring-text::after {
  content: " <- BORING";
  color: darkviolet;
  font-weight: bolder;
}

Результат

Декоративный пример

Мы можем оформлять текст или изображения в свойстве content практически любым способом.

HTML

<span class="ribbon">Look at the orange box after this text. </span>

CSS

.ribbon {
  background-color: #5bc8f7;
}

.ribbon::after {
  content: "This is a fancy orange box.";
  background-color: #ffba10;
  border-color: black;
  border-style: dotted;
}

Результат

Подсказки

В этом примере для создания подсказок используется ::after в сочетании с CSS-выражением attr() и data-description пользовательским атрибутом данных. JavaScript не требуется!

С помощью этого приёма можно также обеспечить поддержку пользователей клавиатуры: добавив tabindex со значением 0, чтобы сделать каждый span доступным для фокусировки с клавиатуры, и используя CSS-селектор :focus. Это показывает, насколько гибкими могут быть ::before и ::after, хотя для наибольшей доступности, вероятно, лучше подойдёт семантический виджет раскрытия, созданный другим способом (например, с помощью элементов details и summary).

HTML

<p>
  Here we have some
  <span tabindex="0" data-description="collection of words and punctuation">
    text
  </span>
  with a few
  <span tabindex="0" data-description="small popups that appear when hovering">
    tooltips</span
  >.
</p>

CSS

span[data-description] {
  position: relative;
  text-decoration: underline;
  color: blue;
  cursor: help;
}

span[data-description]:hover::after,
span[data-description]:focus::after {
  content: attr(data-description);
  position: absolute;
  left: 0;
  top: 24px;
  min-width: 200px;
  border: 1px #aaaaaa solid;
  border-radius: 10px;
  background-color: #ffffcc;
  padding: 12px;
  color: black;
  font-size: 14px;
  z-index: 1;
}

Результат

Вложенные псевдоэлементы ::after::marker

Вложенный псевдоэлемент ::after::marker выбирает маркер списка ::marker псевдоэлемента ::after, который сам является элементом списка, то есть для него задано значение list-item свойства display.

В этом примере мы создаём дополнительные элементы списка перед и после навигационного меню с помощью ::before и ::after (задавая им значение display: list-item, чтобы они вели себя как элементы списка). Затем с помощью ul::before::marker и ul::after::marker задаём маркерам этих элементов другой цвет.

HTML

<ul>
  <li><a href="#">Introduction</a></li>
  <li><a href="#">Getting started</a></li>
  <li><a href="#">Understanding the basics</a></li>
</ul>

CSS

ul {
  font-size: 1.5rem;
  font-family: "Helvetica", "Arial", sans-serif;
}

ul::before,
ul::after {
  display: list-item;
  color: orange;
}

ul::before {
  content: "Start";
}

ul::after {
  content: "End";
}

ul::before::marker,
ul::after::marker {
  color: red;
}

Результат

Маркеры трёх элементов навигации создаются потому, что это элементы <li>, а элементы «Начало» и «Конец» добавлены с помощью псевдоэлементов. Для оформления их маркеров используется ::marker.

Спецификации

Спецификация
Модуль псевдоэлементов CSS, уровень 4
# generated-content

Совместимость с браузерами

Настольные компьютеры Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android WebView на iOS
after
1
1
12
12
1.5До Firefox 57 в Firefox была ошибка: псевдоэлементы ::after всё равно создавались, даже если для свойства content было задано значение normal или none.
До Firefox 3.5 поддерживалось только поведение :after из CSS уровня 2, которое не допускало свойства position, float, list-style-* и некоторые свойства display.
1
7
4
4
4
18
18
4До Firefox для Android 57 в Firefox для Android была ошибка: псевдоэлементы ::after всё равно создавались, даже если для свойства content было задано значение normal или none.
До Firefox для Android 4.5 поддерживалось только поведение :after из CSS уровня 2, которое не допускало свойства position, float, list-style-* и некоторые свойства display.
4
10.1
10.1
3.2
3.2
1.0
1.0
4.4
4.4
3.2
3.2
animation_and_transition_support
26
12
4
15
7
26
4
14
7
1.5
4.4
7
nested_marker
135
135
143
120
Нет
135
143
89
Нет
29.0
135
Нет

См. также

  • ::before
  • content

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Selectors/::after

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API