CSS псевдоэлемент ::after
Используйте псевдоэлемент CSS ::after для добавления содержимого после элемента. Узнайте о нём и попробуйте примеры.
CSS псевдоэлемент ::after создаёт дополнительный элемент, который вставляется как последний дочерний элемент совпадающего элемента — сразу после его реального содержимого. Вам не нужно добавлять разметку в HTML — браузер генерирует элемент из вашей таблицы стилей. Эта страница объясняет, что такое ::after, как работает обязательное свойство content, на что следует обратить внимание и в каких случаях его применение действительно оправдано.
Что такое ::after
::after позволяет прикреплять генерируемое содержимое — символы, строки текста, изображение или декоративную фигуру — к концу элемента без изменения HTML документа. Поскольку сгенерированный блок является частью элемента, его можно анимировать, позиционировать и обтекать, как любое обычное содержимое.
Два правила обязательны:
- Свойство
contentявляется обязательным. Если опуститьcontent, псевдоэлемент не будет создан. Используйтеcontent: ""(пустую строку), когда нужен только декоративный блок, а не текст. - По умолчанию блок является строчным. Установите
display: block(илиinline-block), если нужно, чтобы работали ширина, высота или вертикальные отступы.
::after и :after
::after также можно записать с одним двоеточием: :after. Форма с двойным двоеточием — современный стандарт CSS3 для псевдоэлементов (чтобы отличать их от псевдоклассов вроде :hover); форма с одним двоеточием существует только для обратной совместимости со старыми браузерами. Предпочитайте ::after, если только вам не нужна поддержка устаревших движков, таких как Internet Explorer 8.
::after и ::before
Псевдоэлемент ::before вставляет генерируемое содержимое перед содержимым элемента, тогда как ::after вставляет его после. В остальном они идентичны и часто используются вместе — например, ::before и ::after — классический способ добавить парные открывающие и закрывающие кавычки или декоративные скобки вокруг заголовка.
Генерируемое содержимое не является частью DOM: его нельзя выделить курсором, и большинство программ чтения с экрана его игнорируют (поддержка в браузерах непоследовательна). Используйте ::after исключительно для декоративного или вспомогательного содержимого — никогда не помещайте в content смысловую информацию, которую пользователь должен прочитать.
Версия
Синтаксис
CSS псевдоэлемент ::after
::after {
css declarations;
}Пример псевдоэлемента ::after:
Пример CSS ::after
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
<style>
p::after {
content: " - William Shakespeare.";
}
</style>
</head>
<body>
<h2>::after selector example</h2>
<p>"Be or not to be"</p>
</body>
</html>В следующем примере к содержимому можно добавить стили.
Пример псевдоэлемента ::after со стилизованным содержимым:
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
<style>
p::after {
content: " - William Shakespeare.";
background-color: #eee;
color: #1c87c9;
padding: 5px 3px;
border: 2px dashed #000;
margin-left: 5px;
}
</style>
</head>
<body>
<h2>::after selector example</h2>
<p>"Be or not to be"</p>
</body>
</html>Распространённые случаи применения
::after особенно полезен, когда нужно добавить визуальное содержимое без засорения разметки:
- Декоративные фигуры и разделители. Блок, созданный из
content: ""сborderилиbackground— подчёркивания, стрелки, ленты, хвостики подсказок. - Иконки после ссылок. Добавьте стрелку внешней ссылки или маркер типа файла после
<a>. - Трюк clearfix. Заставьте родительский элемент охватывать плавающих дочерних.
/* External-link arrow after every link with target="_blank" */
a[target="_blank"]::after {
content: " ↗";
}
/* Clearfix: make a container wrap its floated children */
.clearfix::after {
content: "";
display: block; /* block + clear pushes the box below the floats */
clear: both;
}Обратите внимание на пустой content: "" в clearfix: он создаёт блок без видимого текста — именно то, что нужно для вспомогательного элемента, используемого только для управления раскладкой.
Советы и подводные камни
- Нет
content— нет элемента. Забытое свойствоcontent— самая частая причина того, что правило::after«ничего не делает». - Устанавливайте
displayдля задания размеров. Строчный псевдоэлемент игнорируетwidth,heightи вертикальные отступы. Используйтеdisplay: blockилиinline-block. - Аккуратность с кавычками. Внутри строк
contentэкранируйте специальные символы кодовой точкой Unicode (например,content: "\00BB"для»), чтобы кодировка файла не могла их сломать.