freeCodeCamp/guide/chinese/miscellaneous/sass-syntax-and-tools/index.md

184 lines
9.2 KiB
Markdown
Raw Normal View History

---
title: Sass Syntax and Tools
localeTitle: Sass语法和工具
---
_“艺术家和他的工具一样好。”_
这不一定是真的,但我们使用的工具可以确保我们的生活更轻松,我们的任务更容易管理。想象一下,编写没有键盘快捷键或片段的代码!不是世界末日,而是你得到了主旨。
我们将讨论的“工具”或者更常被称为指令实际上是与Sass捆绑在一起的内置功能可以帮助我们作为开发人员编写DRY-er不要重复自己和更清晰的代码。
_如果您想在自己的文本编辑器中进行操作我建议您安装**Sass语法高亮显示器** 。 Atom和Sublime Text以及其他一些编辑都支持这些。_
## 变量
如果您使用其他编程语言JavaScriptPythonJavaC等编写代码那么您就熟悉变量的概念。如果没有则变量基本上是声明的语句可以存储某种值如数字或字符串。
在Sass中变量的工作方式基本相同并且可以在变量名称旁边用“$”字符声明:
```
$main-color: #CCCCCC;
```
上面的变量是存储灰色调的十六进制颜色代码。我们可以在任何内声明该变量`.scss`或`.sass`我们在正在处理的文件我们还可以将所需的变量标签HTML5标签ID伪选择造型时
```
$main-color: #CCCCCC;
header {
background-color: $main-color;
}
```
在此代码段中,我们已将标题的`background-color`的值分配给存储在`$main-color`的值该值当Sass编译为CSS时输出为
```
header {
background-color: #CCCCCC;
}
```
整齐!但是我们难道不能将`background-color`设置为`#CCCCCC`吗?答案是肯定的,但还有更多。
假设我们为客户设计了一个多页面网站,我们刚刚选择了一个简单的三色“配色方案”。我们的导航栏,页脚是一种颜色,也许我们的文章元素,段落和标题是剩下的两种颜色之一。然后有一天,客户改变了我们选择的配色方案,并希望它改变了。大。
因此,我们的任务是完成我们的多个样式表(如果您愿意,可以使用一个大型样式表)并更改所有这些颜色值。也许我们混在一起。或者我们可能会错过一个并且必须继续修复它们。
使用变量以及我们稍后将讨论的Sass partials的使用我们可以调整变量声明的值并且在我们使用样式表中的变量的任何其他地方值将改变以反映我们更改的变量赋值。这只是Sass中相应使用时方便变量的一个例子。随着我们添加到Sass工具带中变量变得越来越重要。
在那个问题上让我们来解决mixins问题。
## 混入
mixin是一个可重用的代码块可以接受参数就像JavaScript中的函数一样。但是不要将其与Sass中的实际`@function`功能混淆。
通过在“mixin”一词前加上“@”字符然后是mixin的名称来声明Mixins。下面是一个名为btn的mixin示例它接受两个参数并将它们应用于CSS属性
```
@mixin btn($color, $text-color) {
background-color: $color;
color: $text-color;
padding: 1em;
}
```
在写出mixin之后默认情况下不会发生任何事情因为我们没有使用mixin类似于编写函数而不是调用函数。让我们整合我们的mixin。我们将使用`@include`语句将其包含在HTML5 `button`选择器中:
_`@include`语句允许我们将mixin样式引入我们选择的CSS选择器。在这种情况下带有蓝色和白色值的`button`选择器作为参数传入。_
```
button {
@include btn(blue, white);
}
```
如果我们选择我们可以在任何其他HTML选择器中使用。这将编译为
```
button {
background-color: blue;
color: white;
padding: 1em;
}
```
只需使用单行`@include btn(blue, white);`在我们的按钮选择器中我们可以引入我们的mixin中写出的所有代码蓝色和白色作为参数传入。另外我们可以为传递给mixin的参数设置默认值。例如假设我们希望我们的按钮mixin默认为特定的颜色和字体颜色如果调用时没有传递任何值
```
@mixin button($color: green, $text-color: red) {
background-color: $color;
color: $text-color;
padding: 1em;
}
```
通过输入“”后跟我们想要设置的默认值我们将green指定为`$color`参数的默认值将red指定为`$text-color`参数的默认值。
现在如果我们调用我们的mixin而不传递任何值...
```
button {
@include btn;
}
```
这归结为:
```
button {
background-color: green;
color: red;
padding: 1em;
}
```
如果我们想将变量用于mixin我们也可以这样做
```
$main-color: #CCCCCC;
$second-color: #FFFFFF;
@mixin button($color: $main-color, $text-color: $second-color) {
background-color: $color;
color: $text-color;
padding: 1em;
}
```
在上面的示例中,我们使用不同的十六进制颜色值声明两个变量,然后将参数`$color`和`$text-color`为默认为我们的变量(如果没有传递参数)。
为mixin设置默认值通常被认为是一种很好的做法但绝对没有必要。您会发现许多开发人员都有自己的方式来编写代码并对被认为是“最佳”的内容发表意见。
这里的乐趣不会停止。在写出mixins时我们可以执行一些其他有用的技巧以及如何编写它们的无限可能性。从mixin中拿走的重要一点是它们可以作为模块或“对象”我们可以在需要的代码中声明某些样式传递值和重用而不是在设计不同元素时不断重复自己。他们可以帮助我们更加真实地遵守DRY原则。
## 扩展
我们将讨论的最后一个工具是extend指令。 Extends可用于将先前应用的样式复制到另一个元素。然而在实现扩展时幕后会发生更多的事情如果我们不小心这会对我们的样式产生一些意想不到的副作用。
下面是一个使用的扩展指令的示例:
```
.primary-module {
color: red;
}
.another-module {
@extend .primary-module;
}
// This ouputs the following CSS
.primary-module, .another-module {
color: red;
}
```
这里没什么太阴暗了。我们有一个选择器定位`.another-module` ,它使用扩展来克隆应用于选择器`.primary-module`样式。这会输出`color: red;`样式`color: red;`被施加到类`.primary-module`和`.another-module` 。到目前为止的逻辑和一个具有类似效果的工具将mixin包含在需要共享相同样式的几个元素上。
现在让我们仔细看看另一个例子然后选择一个extend指令复杂化的地方
```
.primary-module p {
color: red;
}
.another-module {
@extend .primary-module;
}
// This outputs the following CSS
.primary-module p, .another-module p {
color: red;
}
```
你懂了吗?的选择器`.another-module`是使用在一个延伸`.primary-module p`选择器。请注意,因为`.primary-module`有一个`p` 段落标记的下降选择器当调用extend并编译我们的Sass代码时 `color: red;`的样式为`color: red;`正在应用于`.primary-module p`和`.primary-module p` `.another-module p`
发生的事情是extend指令不仅克隆了`.primary-module p`的样式,而且还克隆了`p`的下降选择器标记并将其添加到`.another-module` 。我们正在复制借来的样式和后代选择器。因此,我们扩展的样式将应用于作为`.another-module`后代的段落元素,而不仅仅是具有`.another-module`类的元素。
如果我们不知道正在做什么,你可以看到这样的东西会变得毛茸茸。
所以我们已经看过延伸的窗帘现在你可能会想到_使用延伸的重点是什么是值得的还是我可以使用mixins_
简短的回答关于这个主题还有很多内容通常扩展将用于有目的地利用应用于其他元素的样式的继承或者特别使用Sass中所谓的**静默类** 。扩展通常可以在小心使用时实现mixins的功能但不应轻率地使用它来代替另一个。实践扩展并将其用于特定目的。
至于静默类这有望在本文即将发布的部分中介绍。现在只知道静默类是Sass中的选择器它们以“”字符为前缀除非通过扩展调用否则根本不会编译。
## 结论
如果你已经完成了本文的结尾你应该获得一些认可。我写这篇文章是希望以一种方式解释Sass我希望当我第一次开始搞乱它时它会被教给我。如果CSS是你挣扎的东西或者总是因为它变得一团糟而感到忧虑那么希望Sass将开始缓解一些挫折。
这篇文章意味着在Sass世界中让你的脚湿透的“速成课程”。仍然有大量的工具和功能使Sass大放异彩以及在**构建样式表并将其分解为部分**时的最佳实践。
我的建议是在你自己的文本编辑器和[Sassmeister中](http://www.sassmeister.com/)开始沙盒,以便更好地[理解](http://www.sassmeister.com/)本文所涵盖的概念。也请关注免费代码营Sass课程即将推出。
走出去升级你的Sass游戏。