sass高阶应用

发布于:2025-06-02 ⋅ 阅读:(25) ⋅ 点赞:(0)

Sass(尤其是 SCSS 语法)除了基础功能外,还提供了许多高级特性,可以实现更灵活、可维护的样式系统。以下是 Sass 的 高级语法和应用技巧,适合中大型项目或组件库开发。


一、控制指令(Control Directives)

1. @if / @else

用于根据条件生成不同的 CSS。

@mixin button-style($type) {
  background: #ccc;

  @if $type == primary {
    background: #3498db;
    color: white;
  } @else if $type == danger {
    background: #e74c3c;
    color: white;
  } @else {
    background: #ecf0f1;
    color: #333;
  }
}

.btn {
  @include button-style(primary);
}

2. @for 循环

可用于批量生成类名,如网格布局、按钮大小等。

@for $i from 1 through 5 {
  .col-#{$i} {
    width: 20% * $i;
  }
}

3. @each 遍历列表/Map

适用于遍历颜色、字体、断点等配置项。

$colors: (
  primary: #3498db,
  success: #2ecc71,
  danger:  #e74c3c
);

@each $name, $color in $colors {
  .text-#{$name} {
    color: $color;
  }

  .bg-#{$name} {
    background-color: $color;
  }
}

4. @while 循环

虽然不常用,但可以用于特定逻辑。

$i: 6;
@while $i > 0 {
  .item-#{$i} {
    font-size: 10px + $i * 2;
  }
  $i: $i - 2;
}

二、函数与自定义逻辑

1. 自定义函数

使用 @function 创建返回值的函数。

@function calculate-rem($size) {
  $base-font-size: 16px;
  @return $size / $base-font-size * 1rem;
}

body {
  font-size: calculate-rem(14px);
}

2. 内置函数

Sass 提供丰富的内置函数,包括:

  • 颜色操作lighten(), darken(), saturate(), fade-in(), adjust-color()
  • 数学运算percentage(), round(), ceil(), floor()
  • 类型判断type-of(), unit(), variable-exists()

示例:

$color: #3498db;

.button {
  background-color: darken($color, 10%);
  border-color: lighten($color, 10%);
}

三、模块化与命名空间(@use / @forward

推荐使用 Dart Sass,@import 已被弃用。

1. 模块化导入(@use

// _variables.scss
$primary-color: #3498db;

// main.scss
@use 'variables';

body {
  background: variables.$primary-color;
}

2. 命名空间别名

@use 'variables' as vars;

body {
  background: vars.$primary-color;
}

3. 转发模块(@forward

用于创建“工具库”模块,将多个 Mixin/变量统一导出。

// _tools.scss
@forward 'mixins';
@forward 'functions';
@forward 'variables';

四、占位符选择器 %

用于定义不会直接输出到 CSS 中的“抽象类”,只能通过 @extend 使用。

%clearfix {
  &::after {
    content: '';
    display: table;
    clear: both;
  }
}

.container {
  @extend %clearfix;
}

五、动态插值 #{}

用于在选择器、属性或值中插入变量或表达式。

$name: foo;
$attr: margin;

.#{$name} {
  #{$attr}-top: 10px;
}

编译结果:

.foo {
  margin-top: 10px;
}

六、继承与组合(@extend

允许一个选择器继承另一个选择器的样式。

.message {
  padding: 10px;
  border: 1px solid #ccc;
}

.error {
  @extend .message;
  color: red;
}

编译为:

.message, .error {
  padding: 10px;
  border: 1px solid #ccc;
}

.error {
  color: red;
}

七、建议

技术 说明
BEM 命名结合嵌套 .block { &__element { ... } &--modifier { ... } }
设计系统整合 将变量组织为 tokens/_colors.scss, tokens/_spacing.scss
动态响应式断点 使用 Map 定义媒体查询并循环生成
样式重置与 normalize 使用 _reset.scss 统一浏览器默认样式
主题切换机制 使用 @use 加载不同主题变量文件

网站公告

今日签到

点亮在社区的每一天
去签到