加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

什么是 @-Rules

发布时间:2023-05-26 13:41:02 所属栏目:教程 来源:
导读:什么是 @-Rules 呢?其实就是以 @ 开头的一些规则,在 CSS 中有很多 @-Rules 是你经常用的,比如 @media 、@font-face 等等;那么在 Sass 中除了支持 CSS 所有的 @-Rules 外,Sass 还提供了一些扩展的 @ 规则,前面的
什么是 @-Rules 呢?其实就是以 @ 开头的一些规则,在 CSS 中有很多 @-Rules 是你经常用的,比如 @media 、@font-face 等等;那么在 Sass 中除了支持 CSS 所有的 @-Rules 外,Sass 还提供了一些扩展的 @ 规则,前面的章节我们已经讲了很多了,比如 @if 、@for、@mixin 等等。

使用场景
在 Sass 中不同的 @-Rules 有不同的语法和使用场景,我们结合使用场景来过一遍 Sass 中的 @-Rules 。

@use 和 @import
在前面的章节中我们讲过 @use 和 @import ,回忆一下,它们都是用于加载文件内容的(包括文件中的 mixin 、函数和变量等),还记不记得我们建议使用 @use 来替代 @import,所以说 @use 承载了 @import 的功能,它的语法如下:

@use 'my/a';
@use 'my/b';

@forward
@forward 的工作原理和 @use 基本相同,都是用于加载文件内容的,不过 @forward 可以跨多个文件来组成一个 Sass 库,一般在写一个开源的 Sass 样式库的时候你可能会用到它,在项目中是不常用的。

在这里我们举个简单的例子来感受下,假如我在 src/a.scss 中定义了一个 mixin ,代码如下所示:

// src/a.scss 
@mixin bor {
    width: px;
    height: px;
}
然后我在 b.scss 中使用 @forward 来导入它,代码如下所示:

// b.scss
@forward 'src/a';
最终呢,我是想在和 b.scss 同级的 c.scss 文件中使用 a.scss 中的 mixin,那么在 c.scss 中我们可以不直接导入 a.scss,我们通过导入 b.scss 也可以实现,c.scss 中的代码如下所示:

// c.scss
@use "b";
li {
    // 应用 a.scss 文件中的 mixin
    @include bbor;
}
从上面的代码中可以看出来我们可以通过 @forward 来组合多个文件的内容,然后提供给其他的样式中使用,类似于转发的功能,同时它还可以控制某些成员的私有访问等,不过这个一般是写大型的样式库才会用到,在入门教程中我们不做过多的探讨。

@mixin 和 @include
@mixin 我们在之前的 Sass 混合指令章节 做了详细的讲解,混合指令的出现使你可以定义在样式表中重复使用的样式,这可以使你免去编写过多重复的样式,而且在混合指令 @mixin 中你也可以做一些逻辑处理。而 @include 是用来引用混合指令的。

@function
@function 在前面的 Sass 函数指令章节中我们也做了详细的讲解,回忆一下,它也叫自定义函数让你可以容易的处理各种逻辑和定义复杂的操作,而且你可以在任何需要的地方复用函数,这使得我们可以抽离出来一些常见的公式或者逻辑。

@extend
@extend 就是我们说的 Sass 中的继承,在 Sass 继承章节,回忆一下,在我们编写样式的时候,很多情况下我们几个不同的类会有相同的样式代码,同时这几个类又有其自己的样式代码,这是我们就可以通过 Sass 提供的继承 @extend 来实现。

@error
@error 规则在此处是第一次讲解,它是干嘛用的呢?在编写 Sass 函数或者 mixin 的时候,通常需要确保这些能提供正确的类型或者格式,如果没有的时候需要通知用户并停止函数或 mixin 的运行,这时就用到的 @error ,我的理解是它就像我们写 javascript 时用到的 throw new Error() 。我们举个简单的例子看下:

@function my($str) {
    @if $str != 'a' || $str != 'b'  {
        // 此处会抛出错误信息并停止函数的运行
        @error "This is a error!"
    }
}

@warn
上面我们讲了 @error ,@warn 和它的使用方式是相同的,不同的是 @warn 是打印信息,以及指示当前的函数或 mixin 的调用堆栈追踪,并不会停止函数或 mixin 的运行,它的写法如下:

@function my($str) {
    @if $str != 'a' || $str != 'b'  {
        // 此处不会停止函数的运行
        @warn "This is a message!"
    }
}

@debug
一看这个 debug 我们就知道,它是用来调试的,在 javascript 中也是这样。在 Sass 中我们可以使用 @debug 来打印表达式的值以及文件名和行号,这仅是在你开发时期调试用,对实际的样式并没有什么太大的帮助,你只要记住需要调试 Sass 代码就用它,不过一般我们在实际的项目中使用它是很少很少的。

@at-root
回一下前面的章节中我们讲解的 Sass 嵌套,很常用的功能。在使用嵌套的时候你可以使用 @at-root 取消嵌套规则,我们举个例子看下:

.a {
  width: px;
  .b {
    width: px;
  }
  .c {
    width: px;
    // 取消嵌套规则
    @at-root f {
      width: px;
    }
  }
  // 取消嵌套规则
  @at-root e {
    width: px;
  }
}
上面这段代码将会被转换为如下的 CSS 代码:

.a {
  width: px;
}
.a .b {
  width: px;
}
.a .c {
  width: px;
}
.f {
  width: px;
}
.e {
  width: px;
}
通过上面的代码我们可以看出来,在 .f 和 .e 处我使用了 @at-root ,那么就不会对它们俩应用嵌套规则,@at-root 的使用场景视情况而定,灵活使用。

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章