Кратко
СкопированоКогда мы в CSS добавляем : к селектору, для соответствующего элемента создаётся псевдоэлемент. Этот псевдоэлемент — его самый первый потомок, он идёт до внутреннего содержимого.
Пример
Скопировано
a::before { content: "♥";}
a::before {
content: "♥";
}
Как пишется
Скопировано
::before { /* Для CSS 3 */}:before { /* Для CSS 2 */}
::before {
/* Для CSS 3 */
}
:before {
/* Для CSS 2 */
}
💡 В CSS 3 версии ввели написание с двумя двоеточиями, чтобы отличать запись псевдоэлемента от псевдокласса. Но синтаксис с одним двоеточием также поддерживается современными браузерами.
Как понять
СкопированоПроще всего воспринимать псевдоэлемент : как дополнительный элемент в начале тега. Мы можем применить к нему любые стили.
Чаще всего псевдоэлемент используется для оформительских целей, либо позволяя добавить дополнительное содержимое перед текстом, либо выступая в роли дополнительного стилизованного блока.
По умолчанию псевдоэлемент : является строчным.
Самый простой пример использования : — добавление иконки перед важным текстом:
<div class="message"> <p class="warning">Внимание! Этот абзац является важным предупреждением!</p></div><div class="message"> <p class="info">Этот абзац является информационным.</p></div>
<div class="message">
<p class="warning">Внимание! Этот абзац является важным предупреждением!</p>
</div>
<div class="message">
<p class="info">Этот абзац является информационным.</p>
</div>
.warning::before { content: "⚠"; margin-right: 0.5em;}
.warning::before {
content: "⚠";
margin-right: 0.5em;
}
Подсказки
Скопировано💡 Не забывайте прописывать свойство content для псевдоэлемента :. Это самая частая ошибка, из-за которой псевдоэлемент не появляется на странице.
💡 Псевдоэлемент ведёт себя ровно так же, как любой другой элемент в разметке, подчиняется тем же свойствам и законам. Просто его нет в HTML.
На практике
Скопированосоветует
Скопировано🛠 Псевдоэлемент : очень часто используют для стилизации нестандартных маркеров списка:
<ul> <li>Сделать настоящее тату</li> <li>Посмотреть «Звёздные войны»</li> <li>Научиться играть на укулеле</li> <li>Не бриться полгода</li> <li>Поучаствовать в чайной церемонии</li></ul>
<ul>
<li>Сделать настоящее тату</li>
<li>Посмотреть «Звёздные войны»</li>
<li>Научиться играть на укулеле</li>
<li>Не бриться полгода</li>
<li>Поучаствовать в чайной церемонии</li>
</ul>
li::before { content: "💜"; margin-right: 5px;}
li::before {
content: "💜";
margin-right: 5px;
}
🛠 Пример с пустым свойством content:
<ul> <li>Милый маленький грибочек</li> <li>Сколопендровый листочек</li> <li>Жёлтой пыльки чуть</li></ul>
<ul>
<li>Милый маленький грибочек</li>
<li>Сколопендровый листочек</li>
<li>Жёлтой пыльки чуть</li>
</ul>
li { position: relative; padding-left: 25px;}li::before { /* Не забываем о свойстве content */ content: ""; width: 14px; height: 14px; background-color: #2E9AFF; position: absolute; left: 0; top: 5px;}
li {
position: relative;
padding-left: 25px;
}
li::before {
/* Не забываем о свойстве content */
content: "";
width: 14px;
height: 14px;
background-color: #2E9AFF;
position: absolute;
left: 0;
top: 5px;
}
советует
Скопировано🛠 У псевдоэлемента : с символами или графикой в content может быть альтернативное описание. Добавьте его через косую черту (/) после основного значения. Видимый текст не изменится, но для вспомогательных технологий и браузеров описание попадёт в название элемента.
Опишем знак дополнительной информации «ⓘ»:
span::before { content: "ⓘ" / "Дополнительная информация:";}
span::before {
content: "ⓘ" / "Дополнительная информация:";
}
Конечно, важные для смысла элементы стоит добавлять через HTML, а не CSS. Если такой возможности нет, используйте дополнительный синтаксис у content с умом. Обычно это ситуации, когда скринридеры не знакомы с символом или не могут озвучить иконку из :. Например, они никак не опишут символ «ⓘ» или озвучат из чего он состоит: «Маленькая буква „i“ внутри круга».
Альтернативное описание в content лучше вообще не задавать ссылкам и другим интерактивным элементам. Дело в том, что о нём не узнают пользователи голосового управления. Разберём на примере:
<a href="#"> Часто задаваемые вопросы и ответы</a>
<a href="#">
Часто задаваемые вопросы и ответы
</a>
/* Не делайте так ❌ */a::before { content: "ⓘ" / "Дополнительная информация:";}
/* Не делайте так ❌ */
a::before {
content: "ⓘ" / "Дополнительная информация:";
}
Браузеры и скринридеры решат, что ссылка называется «Дополнительная информация: Часто задаваемые вопросы и ответы». Пользователи голосового управления увидят только «Часто задаваемые вопросы и ответы». Ничего не произойдёт, когда они попробуют перейти по ссылке командой «Часто задаваемые вопросы и ответы, клик».