scss 文件里的特殊符号 - % 百分号和 $美元符号

举报
汪子熙 发表于 2022/10/03 09:18:54 2022/10/03
【摘要】 看一个 SAP Spartacus UI 中的具体例子:第一行的 @import ‘./facet’, 实际上导入的是 _facet.scss 文件。第 11行 的$product-list-allowlist:可以把 $ 即美元符号定义的这个标识符看成是编程语言中的变量。它又被 $product-components-allowlist 引用:这个 mergeAll 的作用:注意 !def...

看一个 SAP Spartacus UI 中的具体例子:

第一行的 @import ‘./facet’, 实际上导入的是 _facet.scss 文件。

第 11行 的$product-list-allowlist:可以把 $ 即美元符号定义的这个标识符看成是编程语言中的变量。

它又被 $product-components-allowlist 引用:

这个 mergeAll 的作用:

注意 !default 的含义:

!default 是一个 Sass 标志,指示对变量的条件赋值 — 它仅在变量先前未定义或为空时才赋值。 考虑这个代码片段:

$variable: 'test' !default;

将 $variable 分配给值“test”,当且仅当 $variable 之前尚未被分配值。

另一个例子:

css $variable: 'hello world'; $variable: 'test' !default; // $variable still containshello world`


运行这两行之后,$variable 的值仍然是第 1 行原始赋值的 'hello world'。在这种情况下,第 2 行的 !default 赋值被忽略,因为已经提供了一个值,并且没有默认值 是需要的。

再来看 scss 文件里的百分号。

起的是占位符,place holder 的作用。

Sass 有一种特殊的选择器,称为“占位符”。 它看起来和行为很像“类选择器”,但它以 % 开头,并且不包含在 CSS 输出中。 事实上,任何包含占位符选择器的复杂选择器(逗号之间的选择器)都不包含在最终输出的 CSS 中。

既然不包含在最后输出的 css 中,那这些占位符选择器有什么用处?答案是作为扩展(extension)之用。

与类选择器不同,占位符如果没有被扩展,就不会污染 CSS,也不会强制库的用户在其 HTML 中使用特定的类名。

看个具体的例子:

```css
%toolbelt {
  box-sizing: border-box;
  border-top: 1px rgba(#000, .12) solid;
  padding: 16px 0;
  width: 100%;

  &:hover { border: 2px rgba(#000, .5) solid; }
}

.action-buttons {
  @extend %toolbelt;
  color: #4285f4;
}

.reset-buttons {
  @extend %toolbelt;
  color: #cddc39;
}

可以看到,我们用 %toolbet 定义了一个占位符,首先这个 %toolbet 的内容,不会出现在最终的 css 输出文件中,但是,我们可以定义新的 css 类,然后使用 @extend 去扩展这个占位符。

上图的 reset-buttons 和 .action-buttons, 就分别扩展了 %toolbet 并且重新定义了 color 的值。

最后生成的 css 代码:

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。