SASS `@at-root`
В этой статье объясняется директива SASS @at-root
.
Мы шаг за шагом разберём всё: от базового использования @at-root
до продвинутых примеров.
YouTube Video
О SASS @at-root
@at-root
— это директива SASS, используемая для переноса вложенных селекторов или свойств из текущего уровня вложенности в родительскую область. Используя эту возможность, вы можете контролировать глубину вложенности и эффективнее генерировать нужный CSS.
Базовое использование @at-root
Вложенность в SASS делает код более читаемым, но слишком глубокая вложенность может привести к генерации нежелательного CSS. С помощью @at-root
можно исключать отдельные блоки кода из структуры вложенности.
Базовый синтаксис
1@at-root {
2 // Code to be output at the parent (root) scope
3}
Пример использования
1.nav {
2 color: blue;
3 @at-root {
4 .nav-item {
5 color: red;
6 }
7 }
8}
Скомпилированный CSS
1.nav {
2 color: blue;
3}
4.nav-item {
5 color: red;
6}
- Благодаря
@at-root
селектор.nav-item
выводится вне.nav
.
@at-root во вложенных селекторах
Даже при глубокой вложенности @at-root
позволяет вынести отдельные селекторы на корневой уровень. Это позволяет получать предсказуемый CSS даже в сложных структурах.
Пример использования
1.card {
2 background: white;
3 .card-header {
4 color: black;
5 @at-root .card-title {
6 font-size: 20px;
7 }
8 }
9}
Скомпилированный CSS
1.card {
2 background: white;
3}
4.card .card-header {
5 color: black;
6}
7.card-title {
8 font-size: 20px;
9}
- С помощью
@at-root
селектор.card-title
выводится вне.card-header
.
@at-root с аргументами
Указав аргументы, можно гибче управлять поведением @at-root
.
Аргумент without
При использовании аргумента without
вывод игнорирует указанные области. Иными словами, можно убрать родительские правила или медиазапросы.
Пример использования
1.nav {
2 @media (min-width: 768px) {
3 &__item {
4 @at-root (without: media) {
5 color: red;
6 }
7 }
8 }
9}
Скомпилированный CSS
1.nav__item {
2 color: red;
3}
- В этом случае
@at-root (without: media)
исключает область медиазапроса, и.nav__item
выводится на корневом уровне.
Аргумент with
Аргумент with
оставляет в выводе только указанные области. Полезно, когда нужно вывести на корень, сохранив определённые области.
Пример использования
1.nav {
2 &__item {
3 @media (min-width: 768px) {
4 @at-root (with: media) {
5 &-large {
6 font-size: 18px;
7 }
8 }
9 }
10 }
11}
Скомпилированный CSS
1@media (min-width: 768px) {
2 .nav__item-large {
3 font-size: 18px;
4 }
5}
@at-root (with: media)
переносит селектор на корневой уровень, сохраняя структуру медиазапроса.
Указание нескольких условий
Вы также можете указать несколько областей одновременно, разделив их пробелами.
Пример использования
1.wrapper {
2 @media (min-width: 600px) {
3 @at-root (without: rule media) {
4 .global-style {
5 color: green;
6 }
7 }
8 }
9}
Скомпилированный CSS
1.global-style {
2 color: green;
3}
- В этом примере исключаются и
rule
(обычные селекторы), иmedia
(медиазапросы), поэтому.global-style
не принадлежит никакой области и выводится полностью на корневом уровне. Это полезно, когда вы намеренно хотите определить глобальные стили даже внутри сложной вложенности.
Совмещение с медиазапросами
С помощью @at-root
можно выносить стили на корневой уровень изнутри медиазапросов. Это позволяет задавать адаптивный дизайн на уровне компонентов.
Пример использования
1.container {
2 @media (min-width: 768px) {
3 @at-root {
4 .container-large {
5 width: 80%;
6 }
7 }
8 }
9}
Скомпилированный CSS
1.container-large {
2 width: 80%;
3}
- С помощью
@at-root
можно выводить стили корневого уровня и изнутри медиазапросов. Это упрощает определение независимых глобальных стилей для каждого брейкпоинта.
Сценарии использования @at-root
@at-root
удобна, когда требуется вывести стили на корневом уровне при определённых условиях. Особенно полезна при работе с медиазапросами или стилями, зависящими от темы, внутри компонентов.
Разделение компонентов и тем
С помощью @at-root
можно генерировать независимые глобальные классы даже внутри медиазапросов. Это облегчает организацию тем и состояний для каждого компонента.
Пример использования
1.card {
2 background: white;
3 color: black;
4
5 @media (prefers-color-scheme: dark) {
6 @at-root (with: media) {
7 .card-dark {
8 background: #222;
9 color: white;
10 }
11 }
12 }
13}
Скомпилированный CSS
1.card {
2 background: white;
3 color: black;
4}
5
6@media (prefers-color-scheme: dark) {
7 .card-dark {
8 background: #222;
9 color: white;
10 }
11}
- В этом примере, определяя стили для тёмной темы внутри
.card
,@at-root
создаёт отдельный класс.card-dark
. Это позволяет гибко переключать классы между разными темами.
Примечания
При использовании @at-root
учитывайте следующие моменты.
-
Избегайте чрезмерного использования
@at-root
— мощный инструмент, но его чрезмерное применение может скрыть смысл вашей вложенности. -
Проясняйте намерения Оставляйте комментарии о том, зачем вы используете
@at-root
— так другим разработчикам будет проще понять код. -
Следите за согласованностью областей применимости Перенос вывода на корень может изменить зависимости стилей. Чётко определяйте, к каким элементам это применяется.
-
Комбинируйте с другими возможностями SASS Сочетание
@at-root
с@mixin
и@function
обеспечивает более гибкое проектирование CSS.
Резюме
{^ i18n_speak
@at-root
は、SASSのネスト構文を補完する強力なツールです。不要なネストを解消し、構造を整理することで、より明確で再利用性の高いCSSを生成できます。スコープの理解を深め、目的に応じて使い分けることで、プロジェクト全体の可読性と保守性を高めることができます。^}
Вы можете следовать этой статье, используя Visual Studio Code на нашем YouTube-канале. Пожалуйста, также посмотрите наш YouTube-канал.