关于萨斯你可能不知道的 10 件事

关于萨斯你可能不知道的 10 件事

原文:https://medium.com/hackernoon/10-things-you-probably-didnt-know-about-syntactically-awesome-style-sheets-d94bc5c137e6

高级 Sass

从我开始开发的那天起,我就使用 Sass,无法想象没有它的前端编码。但事实是,我总是只知道它的顶部是什么,它允许做什么。

1.萨斯对 SCSS

第一个惊喜是最初的 Sass 语法没有使用分号和花括号:

$font-stack: Helvetica**,** sans-serif body
  **font**: 100% $font-stack;

另一个是我们熟悉的,叫做 SCSS 的——需要花括号和分号,允许在一个文件中混合普通 CSS 和 Sass。

$font-stack: Helvetica**,** sans-serif;

body {
  **font**: 100% $font-stack;
}

这让我们有机会通过简单地将旧的文件扩展名从.css改为.scss来开始编写 Sass。

2.变量有作用域!

另一个惊喜是变量有范围。如果我们在规则内部定义变量,它将只在规则内部可用,而不会扩大全局范围。

甚至更多——如果我们不确定变量已经在某个地方定义了,我们在声明中使用!default关键字,意思是——如果值存在于外部作用域中,那么使用它,否则请使用这个新值。在下面的评论中检查要点。

(所有示例在第一帧中显示 SCSS,在第二帧中显示生成的 CSS。)

3.首选 Mixin 以扩展

下一个功能是干原理支持。Sass 提供了两种实现方式:extendmixin

我不确定这场圣战是否还在继续,但即使在 Sass 引入了一个使用 extend with placeholder selector的伟大选项之后,它也允许在不污染全局选择器名称空间的情况下创建规则(现在我们污染了占位符选择器名称空间):

mixins对我来说似乎仍然是赢家,因为当我们扩展深度选择器时,它们不会导致生成巨大的 CSS,与使用extend的样式相比,它们实际上会生成更小的 gzip 文件(证据:https://tech . belly card . com/blog/sass-mixins-vs-extends-the-data/)。

因此,在接下来的章节中,我将重点介绍mixins,因为它们包含了许多优秀的特性。

4.Mixin — null作为默认参数值

好的,mixin接受一些输入参数,并把定义在其中的声明放在你想放的地方。

这使我们能够将include放在我们想要的地方,而不是多次复制/粘贴相同的代码,关于mixin参数有趣的事情是:

  • 它们既可以是命名的,也可以是未命名的——所以当include调用mixin时,我们可以省略其中的一些
  • 每个参数都可以有一个默认值——所以如果参数的默认值是我们真正想要的,我们可以省略它
  • 默认值可以是null——这是一个非常有趣的例子。这意味着如果我们不指定参数并且它的默认值为 null,那么使用这个参数作为值的整个声明将从生成的 CSS 中删除。这为我们节省了编写 if/else 子句或稍后重置意外声明的时间,并减小了最终文件的大小😌

5.可变参数

另一个mixin的参数特征是variable declaration,其行为与 ES6 扩展操作符相同。它允许我们传递一个list或一个map(其中 map 类似于 JS 对象)而不是将每个参数单独传递给mixin,值将被自动分配。

这就是我们如何利用这些知识,例如,定义黑暗和光明主题:

很酷,对吧?是的。

另一个“酷,对”是我们可以传递参数,这样mixin的输入就变成了其内部mixin的输入。如果我们想要扩展一个供应商实用程序,比如说 Foundation 的“三角形”mixin来使其绝对定位,这可能是有帮助的:

6.N ice Media Queries with Mixin @内容

所以mixins给了我们传递声明值(inline,block,#fffff 等)甚至属性名(margin-right,color…)的好机会,但是如果我们想传递整个 SCSS 块,而不仅仅是它的一部分呢?我们可以使用content关键字。

让我们看看如何为媒体查询做这件事,这样当我们想用所需的媒体查询条件包装我们的代码时,就可以使用mixin:

这里最酷的是,每当我想将媒体查询语法复制并粘贴到代码中时,它实际上允许我停止在 IDE 中搜索“媒体”字符串。我不再需要它了。

7.再次范围

关于content需要记住的一件重要事情是,传递给mixin的内容块是在定义块的范围内计算的,而不是在mixin的范围内。

所以我们作为参数传递给mixin的变量不能在内容块中使用:

8.每个操作员

ifforwhile一起,我们可以使用each运算符,这在声明图标时非常有用:

9.命名

虽然不是非常有用,但是知道像mixinplaceholder selector名字这样的 Sass 标识符可以互换使用连字符和下划线还是有好处的。这意味着 Sass 中的dark-themedark_theme是相同的。还有这两个人:

༼ つ ◕_◕ ༽つ和༼ つ ◕-◕ ༽つ

嗯:)很遗憾,我们无法验证最后两个,因为它们是无效的标识符,抱歉:)

10.鼓励自己

最后我想分享的是,Sass 官方文档很短。

因为 CSS 不是一种编程语言,所以我低估了它所包含的工具的力量。后来我只花了几个小时浏览 Sass 文档,尽管如此,这给了我一大堆关于如何使代码更干净、更可读和更有性能的见解。

祝你编码愉快;)


本站为非盈利网站,作品由网友提供上传,如无意中有侵犯您的版权,请联系删除