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を生成できます。スコープの理解を深め、目的に応じて使い分けることで、プロジェクト全体の可読性と保守性を高めることができます。^}
您可以在我们的YouTube频道上使用Visual Studio Code跟随上述文章进行学习。 请也查看我们的YouTube频道。