Files
frontend-docs/docs/html-css/05-selectors.md
2025-03-06 13:07:51 +03:00

53 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
sidebar_position: 5
---
# Селекторы, специфичность
Источник: DeepSeek
**Специфичность селекторов** в CSS — это механизм, который определяет, какие стили будут применены к элементу, если на него влияют несколько конфликтующих правил. Специфичность рассчитывается на основе типа селекторов, и чем выше специфичность, тем выше приоритет стиля.
## Как работает специфичность?
Специфичность рассчитывается как числовое значение, состоящее из четырех частей: `a, b, c, d,` где:
- `a` — стили, указанные в атрибуте `style` (инлайновые стили).
- `b` — количество ID-селекторов.
- `c` — количество классов, псевдоклассов и атрибутов.
- `d` — количество элементов и псевдоэлементов.
Чем больше значение в каждой части, тем выше специфичность. Например:
- Селектор `#id` имеет специфичность `0, 1, 0, 0`.
- Селектор `.class` имеет специфичность `0, 0, 1, 0`.
- Селектор `div` имеет специфичность `0, 0, 0, 1`.
## Правила расчета специфичности
1. **Инлайновые стили** (в атрибуте `style`) имеют наивысшую специфичность: `1, 0, 0, 0`.
2. **ID-селекторы** (`#id`) имеют специфичность: `0, 1, 0, 0`.
3. **Классы, псевдоклассы и атрибуты** (`.class`, `:hover`, `[type="text"]`) имеют специфичность: `0, 0, 1, 0`.
4. **Элементы и псевдоэлементы** (`div`, `::before`) имеют специфичность: `0, 0, 0, 1`.
5. **Универсальный селектор** (`*`) и комбинаторы (например, `>`, `+`, `~`) не увеличивают специфичность.
## Приоритеты
1. **Инлайновые стили** (`style="..."`) всегда имеют наивысший приоритет.
2. **Селекторы с `!important`:**
- Если к стилю добавлено !important, он переопределяет все остальные правила, независимо от специфичности.
- Пример: `color: red !important;`.
3. **Специфичность:**
- Если нет `!important`, применяется правило с наибольшей специфичностью.
4. **Порядок в коде:**
- Если специфичность одинакова, применяется последнее объявленное правило.
## Как управлять специфичностью?
1. **Избегайте избыточных селекторов:**
- Используйте минимально необходимую специфичность.
- Например, вместо div#content используйте #content.
2. **Используйте классы:**
- Классы имеют умеренную специфичность и легко переопределяются.
3. **Осторожно с `!important`:**
- Используйте !important только в крайних случаях, так как это усложняет поддержку кода.
4. **Порядок объявления:**
- Если специфичность одинакова, последнее объявленное правило имеет приоритет.
## Вывод
- Специфичность определяет приоритет CSS-правил.
- Инлайновые стили и !important имеют наивысший приоритет.
- Используйте классы и избегайте избыточной специфичности для поддержания чистоты кода.