Псевдоэлемент 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.
Спецификации
Совместимость с браузерами
| Настольные компьютеры | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 |
Нет |
См. также
© 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