Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
::before и ::after псевдоэлементы в CSS
::before и ::after — это CSS псевдоэлементы, которые позволяют вставить виртуальные элементы до или после содержимого выбранного элемента. Это мощный инструмент для создания эффектов, украшений и функциональных элементов без добавления лишней разметки в HTML.
Основная разница
::before вставляет элемент перед содержимым элемента (между открывающим тегом и содержимым).
::after вставляет элемент после содержимого элемента (между содержимым и закрывающим тегом).
<div class="container">
<!-- Здесь будет ::before -->
Содержимое элемента
<!-- Здесь будет ::after -->
</div>
Синтаксис и использование
/* Современный синтаксис (двойное двоеточие) */
element::before {
content: "Текст перед";
}
element::after {
content: "Текст после";
}
/* Старый синтаксис (одинарное двоеточие) для совместимости */
element:before { }
element:after { }
Практические примеры
1. Декоративные элементы
.card {
position: relative;
padding: 20px;
}
.card::before {
content: "";
position: absolute;
top: -5px;
left: -5px;
width: 10px;
height: 10px;
background-color: #e74c3c;
border-radius: 50%;
}
.card::after {
content: "";
position: absolute;
bottom: -5px;
right: -5px;
width: 10px;
height: 10px;
background-color: #3498db;
border-radius: 50%;
}
2. Добавление текста и иконок
.required::after {
content: " *";
color: #e74c3c;
font-weight: bold;
}
.price::before {
content: "$";
font-weight: bold;
}
.new-tag::before {
content: "NEW";
display: inline-block;
background-color: #27ae60;
color: white;
padding: 2px 6px;
border-radius: 3px;
font-size: 12px;
margin-right: 8px;
}
3. Создание границ и разделителей
.navigation li::after {
content: " | ";
color: #95a5a6;
margin: 0 10px;
}
.navigation li:last-child::after {
content: "";
}
.divider::before,
.divider::after {
content: "";
flex: 1;
border-top: 1px solid #bdc3c7;
}
.divider::before {
margin-right: 10px;
}
.divider::after {
margin-left: 10px;
}
4. Интерактивные эффекты
.button {
position: relative;
overflow: hidden;
padding: 10px 20px;
}
.button::before {
content: "";
position: absolute;
top: 50%;
left: 50%;
width: 0;
height: 0;
border-radius: 50%;
background-color: rgba(255, 255, 255, 0.3);
transform: translate(-50%, -50%);
transition: width 0.6s, height 0.6s;
}
.button:hover::before {
width: 300px;
height: 300px;
}
5. Счетчики
.ordered-list {
counter-reset: item;
}
.ordered-list li {
list-style: none;
}
.ordered-list li::before {
counter-increment: item;
content: counter(item) ". ";
font-weight: bold;
color: #3498db;
}
Важные свойства
content — обязательное свойство для ::before и ::after. Без него псевдоэлемент не будет отображаться:
.element::before {
content: "текст"; /* Текстовое содержимое */
content: ""; /* Пустой элемент */
content: attr(data-text); /* Значение атрибута */
content: url(image.png); /* Изображение */
content: counter(item); /* Счетчик */
}
Ограничения
/* Нельзя использовать ::before и ::after на замещаемых элементах */
img::before { } /* Не работает */
input::before { } /* Не работает */
video::before { } /* Не работает */
/* Но работает на контейнерах */
div::before { } /* Работает */
span::before { } /* Работает */
label::before { } /* Работает */
Порядок отображения в стеке элементов
.container {
position: relative;
z-index: 1;
}
.container::before {
z-index: 0; /* Позади содержимого */
}
.container::after {
z-index: 2; /* Впереди содержимого */
}
HTML пример с визуализацией
<!DOCTYPE html>
<html>
<head>
<style>
.tooltip {
position: relative;
display: inline-block;
}
.tooltip::before {
content: attr(data-tooltip);
position: absolute;
bottom: 125%;
left: 50%;
transform: translateX(-50%);
background-color: #2c3e50;
color: white;
padding: 8px 12px;
border-radius: 4px;
white-space: nowrap;
opacity: 0;
pointer-events: none;
transition: opacity 0.3s;
}
.tooltip::after {
content: "";
position: absolute;
bottom: 115%;
left: 50%;
transform: translateX(-50%);
border: 5px solid transparent;
border-top-color: #2c3e50;
opacity: 0;
transition: opacity 0.3s;
}
.tooltip:hover::before,
.tooltip:hover::after {
opacity: 1;
}
</style>
</head>
<body>
<span class="tooltip" data-tooltip="Подсказка">Наведи на меня</span>
</body>
</html>
Вывод
Основные различия:
- ::before добавляет элемент в начало содержимого
- ::after добавляет элемент в конец содержимого
- Оба требуют свойства content для отображения
- Работают как виртуальные элементы, не добавляя лишней разметки
- Идеальны для декораций, иконок и функциональных дополнений
- Не работают на замещаемых элементах (img, input, video)
- Обеспечивают большую гибкость в стилизации без изменения HTML