Sass - 占位符选择器(%placeholder)

前言

如果你已经了解了 @extend指令 则直接阅读即可,否则你需要先学习:传送门


%占位符选择器语法:

占位选择器看起来很像普通的 class 和 id 选择器,只是 # 或 . 被替换成了 %,他可以像 class 或者 id 选择器那样使用,需要注意的是,它本身的规则不会被编译到 CSS 文件中。

%demo {
  /* 一些规则 */
}

初识占位符选择器

它取代以前 CSS 中的基类造成的代码冗余的情形,因为 %placeholder 声明的代码,如果不被 @extend 调用的话,不会产生任何代码,来看下面这个例子:

%demo1 {
    border-radius:50%;
}

%demo2 {
    background:red;
}

编译为CSS:

null(空)

可以看到,正如上面所说,不被 @extend 调用的话,不会有任何规则代码产生!


使用 @extend 调用:

%demo1 {
    border-radius:50%;
}

%demo2 {
    background:red;
}

/* 调用 */
a{
    @extend %demo1;
    @extend %demo2;
}

编译为CSS:

a { border-radius: 50%; }
a { background: red; }

可以看到,$demo1 与 $demo2没有被编译,只有被 @extend 调用才会产生相关规则代码!

通过 @extend 调用的占位符,编译出来的代码会将相同的代码合并在一起。

其他用处

有时候你只会想写一个 @extend 扩展样式类,而且不想直接在你的HTML中使用。在写一个 Sass 样式库时,这是特别有用,如果他们需要,在这里你可以提供 @extend 扩展样式给用户,如果他们不需要,直接被忽视。

对于上面这种情况,如果使用普通的样式类,在最终生成的样式表中会有很多额外的CSS,并且在HTML被使用时,很容易和其他样式类结合的时造成冲突。

选择器占位符的限制

使用 @extend 调用定义好的选择器占位符 %placeholder 有所限制,他不能在不同的 @media 中运行:

%demo1 {
    border-radius:50%;
}

%demo2 {
    background:red;
}

/* 调用 */
@media screen {
    a{ @extend %demo2; }
    div{ @extend %demo1; }
}

抛出错误:
在这里插入图片描述
Error解释:

因为@extend是将一个选择器样式扩展到另一个选择器当中,而实际上在不同的@media中却无需复制这些样式。


在 @media 块中定义选择器占位符,在 @extend 调用时,将会将整个样式包含在 @media 区块中:

@media screen {
    %demo1{border-radius:50%;}
    %demo2{background:red;}
}

a{
    @extend %demo1;
}

div{
    @extend %demo2;
}

编译为CSS代码:

@media screen {
  a { border-radius: 50%; }
  div { background: red; } 
}

在某些情况下,@extend 可以大大的减化 CSS 输出,并显著提高你的 CSS 性能!

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
根据你的问题,以下是 Sass、node-sasssass-loader 和 Node.js 版本之间的对照关系: - SassSass 是一种 CSS 预处理器,用于编写更灵活、可维护的 CSS 代码。它可以通过命令行工具或者集成到构建工具中使用。 - node-sass:node-sass 是一个将 Sass 编译为 CSS 的 Node.js 模块。它使用 LibSass 库来进行编译,提供了更快的编译速度。你可以在项目中使用 npm 或者 yarn 安装它。 - sass-loader:sass-loader 是一个 Webpack 的加载器,用于将 Sass 文件编译为 CSS,并将其应用于你的项目中。它依赖于 node-sass 来进行编译。 - Node.js 版本:Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。它允许你在服务器端运行 JavaScript 代码。你可以通过运行 `node -v` 命令来查看当前安装的 Node.js 版本。 注意:以下是一些常见的版本对照关系,但具体的版本要求还需根据实际情况来确定: - Sass 版本与 node-sass 版本没有直接的对照关系,但一般来说,node-sass 应该支持较新版本的 Sass。 - sass-loader 的版本通常与 webpack 版本关联较密切,你需要根据你正在使用的 webpack 版本来选择合适的 sass-loader 版本。 - Node.js 版本要求可能会因为不同的库和工具而有所不同。你可以查阅它们的官方文档或者 GitHub 页面来获取更详细的信息。 希望这些信息能对你有所帮助!如果你有任何其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王佳斌

请作者喝杯咖啡 :)

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值