一篇文章让你完全掌握Sass,不只是学会而已哦!!!

蔚落 2022-12-23 14:24 237阅读 0赞

使用sass变量存储数据

Sass与CSS的不同之处之一是它使用变量。与JavaScript相似,它们被声明并设置为存储数据。

在JavaScript中,使用letconst关键字定义变量。在Sass中,变量以开头,$后跟变量名称。

这是几个例子:

  1. $main-fonts: Arial, sans-serif;
  2. $headings-color: green;
  3. //To use variables:
  4. h1 {
  5. font-family: $main-fonts;
  6. color: $headings-color;
  7. }

变量有用的一个例子是,当多个元素需要使用相同的颜色时。如果该颜色发生更改,唯一的代码编辑位置就是变量值。

使用Sass嵌套CSS

Sass允许嵌套CSS规则,这是组织样式表的一种有用方法。

通常,每个元素都指向不同的行以对其进行样式设置,如下所示:

  1. nav {
  2. background-color: red;
  3. }
  4. nav ul {
  5. list-style: none;
  6. }
  7. nav ul li {
  8. display: inline-block;
  9. }

对于大型项目,CSS文件将具有许多行和规则。在这里,嵌套可以通过将子样式规则放置在各自的父元素中来帮助组织代码:

  1. nav {
  2. background-color: red;
  3. ul {
  4. list-style: none;
  5. li {
  6. display: inline-block;
  7. }
  8. }
  9. }

使用Mixins创建可重用的CSS

在Sass中,mixin是一组CSS声明,可以在整个样式表中重复使用。

较新的CSS功能需要一段时间才能被完全采用并准备在所有浏览器中使用。将功能添加到浏览器后,使用这些功能的CSS规则可能需要供应商前缀。考虑“盒子阴影”:

  1. div {
  2. -webkit-box-shadow: 0px 0px 4px #fff;
  3. -moz-box-shadow: 0px 0px 4px #fff;
  4. -ms-box-shadow: 0px 0px 4px #fff;
  5. box-shadow: 0px 0px 4px #fff;
  6. }

要为所有具有的元素重新编写此规则box-shadow,或者更改每个值以测试不同的效果,需要进行大量键入。Mixins就像CSS的功能。这是如何写一个:

  1. @mixin box-shadow($x, $y, $blur, $c){
  2. -webkit-box-shadow: $x $y $blur $c;
  3. -moz-box-shadow: $x $y $blur $c;
  4. -ms-box-shadow: $x $y $blur $c;
  5. box-shadow: $x $y $blur $c;
  6. }

定义以@mixin自定义名称开头。的参数($x$y$blur,和$c在上面的例子)是可选的。现在box-shadow,只要需要一条规则,仅需一行调用mixin即可替换,而不必键入所有供应商前缀。用@include指令调用mixin :

  1. div {
  2. @include box-shadow(0px, 0px, 4px, #fff);
  3. }

使用@if和@else为样式添加逻辑

@ifSass中的指令对于测试特定情况非常有用-就像ifJavaScript中的语句一样工作。

  1. @mixin make-bold($bool) {
  2. @if $bool == true {
  3. font-weight: bold;
  4. }
  5. }

就像在JavaScript中一样,@else if@else测试更多条件:

  1. @mixin text-effect($val) {
  2. @if $val == danger {
  3. color: red;
  4. }
  5. @else if $val == alert {
  6. color: yellow;
  7. }
  8. @else if $val == success {
  9. color: green;
  10. }
  11. @else {
  12. color: black;
  13. }
  14. }

使用@for创建Sass循环

@for指令在循环中添加样式,与forJavaScript中的循环非常相似。

@for有两种用法:“从头开始”或“从头到尾”。主要区别在于“开始结束”不包括结束号作为计数的一部分,而“开始结束”包括结束号作为计数的一部分。

这里是一个开始通过结束例如:

  1. @for $i from 1 through 12 {
  2. .col-#{$i} { width: 100%/12 * $i; }
  3. }

#{$i}部分是将变量(i)与文本组合成字符串的语法。当Sass文件转换为CSS时,如下所示

  1. .col-1 {
  2. width: 8.33333%;
  3. }
  4. .col-2 {
  5. width: 16.66667%;
  6. }
  7. ...
  8. .col-12 {
  9. width: 100%;
  10. }

这是创建网格布局的有力方法。现在,您有十二个用于CSS类别的列宽选项。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1Nlc3RpZA_size_16_color_FFFFFF_t_70

使用@each映射列表中的项目

最后一个挑战显示了@for指令如何使用起始值和结束值循环一定次数。Sass还提供了@each遍历列表或映射中每个项目的指令。在每次迭代中,变量将从列表或映射中分配给当前值。

  1. @each $color in blue, red, green {
  2. .#{$color}-text {color: $color;}
  3. }

映射的语法略有不同。这是一个例子:

  1. $colors: (color1: blue, color2: red, color3: green);
  2. @each $key, $color in $colors {
  3. .#{$color}-text {color: $color;}
  4. }

请注意,$key需要变量来引用映射中的键。否则,编译后的CSS将有color1color2…在里面。上面的两个代码示例都转换为以下CSS:

  1. .blue-text {
  2. color: blue;
  3. }
  4. .red-text {
  5. color: red;
  6. }
  7. .green-text {
  8. color: green;
  9. }

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1Nlc3RpZA_size_16_color_FFFFFF_t_70 1

应用样式,直到使用@while满足条件为止

@while指令是具有与JavaScriptwhile循环类似功能的选项。它创建CSS规则,直到满足条件为止。

@for挑战举了一个例子来创建一个简单的网格系统。也可以使用@while

  1. $x: 1;
  2. @while $x < 13 {
  3. .col-#{$x} { width: 100%/12 * $x;}
  4. $x: $x + 1;
  5. }

首先,定义一个变量$x并将其设置为1。接着,使用该@while指令来创建网格系统 $x小于13设置CSS规则后width$x加1,以避免无限循环。

" class="reference-link">watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1Nlc3RpZA_size_16_color_FFFFFF_t_70 2

将一组CSS样式扩展到另一个元素

Sass具有一项称为的功能extend,可以轻松地从一个元素借用CSS规则,然后在另一个元素上构建CSS规则。

例如,以下CSS规则块为一个.panel类设置样式。它有一个background-colorheightborder

  1. .panel{
  2. background-color: red;
  3. height: 70px;
  4. border: 2px solid green;
  5. }

现在,您需要另一个名为的面板.big-panel。它具有与相同的基本属性.panel,但还需要widthfont-size。可以从复制和粘贴初始CSS规则.panel,但是随着添加更多类型的面板,代码将变得重复。该extend指令是重用为一个元素编写的规则,然后为另一个元素添加更多规则的简单方法:

  1. .big-panel{
  2. @extend .panel;
  3. width: 150px;
  4. font-size: 2em;
  5. }

.big-panel将具有相同的属性.panel,除了新的风格

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1Nlc3RpZA_size_16_color_FFFFFF_t_70 3

发表评论

表情:
评论列表 (有 0 条评论,237人围观)

还没有评论,来说两句吧...

相关阅读