Атрибутные селекторы
Атрибутные селекторы позволяют выбирать HTML-элементы по наличию или значению их атрибутов — без добавления дополнительных классов в разметку.
Зачем нужно
Иногда невозможно или нецелесообразно добавлять классы к элементам — например, в CMS-контенте или сторонних виджетах. Атрибутные селекторы позволяют стилизовать элементы по их встроенным атрибутам (href, type, data-*, aria-*), делая CSS более семантичным.
Где используется
- Стилизация ссылок по типу: внешние, PDF, якорные
- Стилизация полей формы по
type:text,email,checkbox - Работа с
data-*атрибутами для состояний - Стилизация ARIA-атрибутов для доступности
Синтаксис
/* [attr] — элемент имеет атрибут */
[disabled] { opacity: 0.5; }
/* [attr="value"] — точное совпадение значения */
[type="submit"] { background: green; }
/* [attr^="value"] — значение начинается с */
[href^="https"] { color: green; }
[href^="http:"] { color: red; }
/* [attr$="value"] — значение заканчивается на */
[href$=".pdf"] { background: url('pdf-icon.svg') no-repeat; }
[href$=".zip"] { color: orange; }
/* [attr*="value"] — значение содержит подстроку */
[href*="github.com"] { color: #333; }
/* [attr~="value"] — значение — одно из слов в списке */
[class~="active"] { font-weight: bold; }
/* [attr|="value"] — значение равно или начинается с "value-" */
[lang|="en"] { font-family: Georgia, serif; }
/* Без учёта регистра: добавить i */
[href$=".PDF" i] { color: red; }
Примеры
Стилизация внешних ссылок
/* Внешние ссылки — открываются в новой вкладке */
a[target="_blank"]::after {
content: " ↗";
font-size: 0.8em;
}
/* Ссылки на PDF */
a[href$=".pdf"] {
color: #e44;
padding-left: 20px;
background: url('icons/pdf.svg') no-repeat left center;
}
Стилизация полей формы
input[type="text"],
input[type="email"] {
border: 1px solid #ccc;
border-radius: 4px;
padding: 8px 12px;
}
input[type="checkbox"] {
width: 18px;
height: 18px;
}
input[required] {
border-left: 3px solid red;
}
Data-атрибуты для состояний
[data-theme="dark"] {
background: #1a1a1a;
color: #eee;
}
[data-status="loading"] {
opacity: 0.6;
pointer-events: none;
}
Частые ошибки
- Регистрозависимость —
[href$=".PDF"]не поймает.pdf; добавьтеiдля нечувствительного к регистру сравнения. [class="active"]вместо[class~="active"]— точное совпадение не сработает, если у элемента несколько классов; используйте~=или просто.active.- Высокая специфичность — атрибутный селектор имеет ту же специфичность, что и класс
(0, 1, 0); это может неожиданно переопределить другие стили.
Связанные темы
- _MOC CSS
- Псевдоклассы
- Группировка и вложенность селекторов
- Комбинаторы -- потомок, дочерний, соседний