SCSS 进阶语法

css

SCSS 进阶语法

在 CSS 属性的基础上 Sass 提供了一些名为 SassScript 的新功能,类似于脚本语言,可以实现条件语句、循环语句等功能, SassScript 可作用于任何属性,允许属性使用变量、算数运算等额外功能。通过 interpolation,SassScript 甚至可以生成选择器或属性名,这一点对编写 mixin 有很大帮助。

Map

Tip

SCSS Maps 是一种由键值对组成的数据结构,各键值对之间通过 , 来分割,这些键值对通过括号 () 包围起来,结合 SassScript(Sass 提供了一些内置的方法)对其进行分析和信息提取。

scss
$mapName: (
  keyName: value,
  nextkey: nextvalue
);
Tip

sass map 需要在 sass 版本是 3.3 以上才可以使用,在终端使用命令 sass -v 查询当前系统编译所使用的 sass 版本。

使用方法 map-get($mapName, keyName) 读取 Map 特定键的值

scss
$map: (
  key: value,
  nextkey: nextvalue
);

.element:before {
  content: map-get($map, key);
}

🔨 编译结果

css
.element:before {
  content: value
}
Tip

通过 @each 遍历 Map 键值对,可以创建与 Bootstrap 相似的类属性结构,并填充相应的样式

scss
// Map 存储按钮的不同状态的样式值(嵌套结构,类似 JSON)
$btn-config:(
    default:(
        class: 'default',
        color: #333,
        bg: #fff,
        border-color: #ccc
    ),
    primary:(
        class: 'primary',
        color: #fff,
        bg: $brand-primary,
        border-color: darken($brand-primary, 0)
    ),
    danger:(
        class: 'danger',
        color: #fff,
        bg: $brand-danger,
        border-color: darken($brand-danger, 0)
    )
);

// 用 @each 遍历 Map 键值对
@each $name, $value in $btn-config {
  // 用方法 map-get() 取出各个属性值
  $class: map-get($value, class);
  $color: map-get($value, color);
  $bg: map-get($value, bg);
  $border-color: map-get($value, border-color);

  // 构建类属性,并填充相应的样式值
  .btn-#{$class}{
    color: $color;
    background-color: $bg;
    border-color: $border-color;
    &:hover{
      background-color: darken($bg, 5%);
      border-color: darken($border-color, 5%);
    }
  }
}

Copyright © 2024 Ben

Theme BlogiNote

Icons from Icônes