← Назад к вопросам

Какими селекторами пользуешься?

2.2 Middle🔥 141 комментариев
#HTML и CSS

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI4 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Основные группы CSS.Селекторов

Как frontend.разработчик с большим опытом, я использую полный спектр CSS.селекторов для точного и эффективного выбора элементов DOM. Их можно разделить на несколько ключевых групп.

1. Базовые селекторы

Это фундамент, без которого невозможно обойтись.

  • Селектор по тегу (element). Выбирает все элементы с указанным именем тега.
    p { color: #333; } /* Все параграфы */
    div { margin: 0; }  /* Все div */
    
  • Селектор по классу (.class). Самый частоиспользуемый и универсальный селектор. Позволяет применять стили к любым элементам с заданным атрибутом class.
    .button { padding:107px 20px; } /* Все элементы с class="button" */
    .card.highlighted { border: 2px solid blue; } /* Элементы с обоими классами */
    
  • Селектор по идентификатору (#id). Выбирает элемент с уникальным атрибутом id. Изза высокой специфичности и уникальности используется реже, часто для якорных ссылок или JS.хуков.
    #header { height: 80px; }
    #main-content { width: 100%; }
    
  • Универсальный селектор (*). Выбирает все элементы на странице. Часто используется для сброса отступов (margin, padding) или в box.sizing.
    * { box.sizing: border.box; }
    

2. Комбинаторы (Составные селекторы)

Позволяют описывать отношения между элементами в DOM.дереве.

  • Селектор потомка ( (пробел)) . Выбирает любой элемент.потомок внутри родителя.
    .menu li { display: inline.block; } /* Все li внутри .menu на любой глубине */
    
  • Дочерний селектор (>). Выбирает только прямых потомков (дети первого уровня).
    .list > .item { margin.bottom: 10px; } /* Только прямые .item внутри .list */
    
  • Соседний (смежный) селектор (+). Выбирает элемент, который находится непосредственно после первого.
    h2 + p { margin.top: 0; } /* Параграф, сразу следующий за h2 */
    
  • Селектор брата (~). Выбирает все последующие элементы.братья.
    .active ~ li { opacity: 0.5; } /* Все li, идущие после элемента с .active */
    

3. Селекторы атрибутов

Мощный инструмент для выбора элементов по наличию, значению или части значения атрибута.

  • [attr] – наличие атрибута.
    input[required] { border.color: red; }
    
  • [attr="value"] – точное совпадение.
    a[href="https://example.com"] { color: green; }
    
  • [attr*="value"] – содержит подстроку.
    img[src*="logo"] { border: 1px solid #ccc; }
    
  • [attr^="value"] – начинается с.
    a[href^="https"] { /* Все внешние ссылки */ }
    
  • [attr$="value"] – заканчивается на.
    a[href$=".pdf"] { /* Ссылки на PDF */ }
    

4. Псевдоклассы и псевдоэлементы

Псевдоклассы (:) определяют особое состояние элемента.

a:hover { text.decoration: underline; } /* Состояние при наведении */
li:nth.child(odd) { background: #f5f5f5; } /* Нечетные элементы */
input:focus { outline: 2px solid blue; } /* Элемент в фокусе */
:not(.hidden) { display: block; } /* Отрицание */

Псевдоэлементы (::) позволяют стилизовать определенные части элемента.

p::first.line { font.weight: bold; } /* Первая строка текста */
.button::after { content: " →"; } /* Генерируемый контент после */
::selection { background: yellow; } /* Стиль выделенного текста */

Стратегия выбора и практические советы

На практике я придерживаюсь следующих принципов:

  1. Приоритет классов. В большинстве случаев использую селекторы по классу за их низкую специфичность, переиспользуемость и независимость от структуры HTML. Это основа методологий вроде BEM.
  2. Минимизация вложенности. Избегаю длинных цепочек селекторов вроде .header .nav .list .item a. Они хрупки, сильно привязаны к вёрстке и создают высокую специфичность, что затрудняет переопределение.
  3. Осознанное использование псевдоклассов. :hover, :focus, :nth.child – незаменимы для интерактивности и сложных списков.
  4. Псевдоэлементы для декора. ::before и ::after активно применяю для иконок, разделителей и визуальных эффектов без лишнего HTML.
  5. Атрибутные селекторы для специфичных задач. Например, для стилизации полей формы определённого типа (input[type="email"]) или внешних ссылок.

Пример комбинирования:

/* Хорошо: низкая специфичность, понятное назначение */
.form.control {
    padding: 10px;
    border: 1px solid #ddd;
}
.form.control:focus {
    border.color: #007bff;
    outline: none;
}
.form.control.error {
    border.color: #dc3545;
}
.form.control.error::after {
    content: "!";
    color: #dc3545;
    margin.left: 5px;
}

Итог: правильный выбор селектора – это баланс между точностью цели, минимальной специфичностью (для легкого поддержания кода) и производительностью (хотя для большинства современных браузеров это уже не критично). Я всегда отдаю предпочтение классовым селекторам, дополняя их псевдоклассами для состояний и комбинаторами только когда это действительно необходимо для описания контекстных отношений.

Какими селекторами пользуешься? | PrepBro