foundation
Cascade
Разрешайте конкурирующие объявления через origin, importance, cascade layers, specificity, scope и порядок в источнике.
Cascade выбирает одно победившее declaration, когда несколько правил нацелены на одно свойство. Порядок разрешения важен: сначала origin и importance, затем cascade layer, specificity, scoping proximity и source order.
| Шаг | Что побеждает | |-----|---------------| | 1 | Origin (user agent < author < user) | | 2 | Importance (`!important` внутри origin) | | 3 | Cascade layer (порядок @layer) | | 4 | Specificity | | 5 | Source order (позже — сильнее) |
@layer reset, components, utilities;
@layer components {
.card { padding: 1rem; }
}
@layer utilities {
.p-0 { padding: 0 !important; } /* layer + important побеждает обычное правило компонента */
}
На интервью: объясните, почему стиль не применяется, пройдя шаги cascade — а не добавляя селекторы.
Типовые ошибки: эскалация specificity скрывает проблему владения; `!important` как постоянный костыль; unlayered стили сильнее layered normal rules при миграции.
Компромисс: быстрые фиксы против предсказуемой архитектуры — layers и локальное владение снижают конфликт лучше, чем тяжёлые селекторы.
Чеклист:
- Сначала origin и importance.
- Сравните layer order до specificity.
- Архитектура с меньшим конфликтом важнее override wars.
- Документируйте, где utilities могут использовать !important.