当前位置: 首页 > news >正文

sass高阶应用

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


文章目录

    • 一、控制指令(Control Directives)
      • 1. `@if / @else`
      • 2. `@for` 循环
      • 3. `@each` 遍历列表/Map
      • 4. `@while` 循环
    • 二、函数与自定义逻辑
      • 1. 自定义函数
      • 2. 内置函数
    • 三、模块化与命名空间(`@use` / `@forward`)
      • 1. 模块化导入(`@use`)
      • 2. 命名空间别名
      • 3. 转发模块(`@forward`)
    • 四、占位符选择器 `%`
    • 五、动态插值 `#{}`
    • 六、继承与组合(`@extend`)
    • 七、建议

一、控制指令(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 加载不同主题变量文件

相关文章:

  • 触发器与存储过程详解
  • C语言之编译器集合
  • Spring Boot养老院管理系统源码分享
  • Angularjs-Hello
  • 【Java开发日记】基于 Spring Cloud 的微服务架构分析
  • Java开发中常见的数值处理陷阱与规避方法
  • Kafka消息中间件
  • K 值选对,准确率翻倍:KNN 算法调参的黄金法则
  • 【Python进阶】元编程、并发
  • 《STL--stack 和 queue 的使用及其底层实现》
  • 《数据结构初阶》【番外篇:二路归并的外排史诗】
  • 流媒体基础解析:视频清晰度的关键因素
  • 当前用户的Git全局配置情况:git config --global --list
  • MySQL 读懂explain 执行计划
  • 性能优化 - 理论篇:常见指标及切入点
  • M4Pro安装ELK(ElasticSearch+LogStash+Kibana)踩坑记录
  • uniapp调试,设置默认展示的toolbar内容
  • Java 单例模式详解
  • 通过mqtt 点灯
  • 【Kotlin】数字字符串数组集合
  • 哪些网站可以做帮助文档/合肥网络推广
  • 成都旅游网站建设/企业微信营销系统
  • 网站建设心得体会800字/线上营销策划方案
  • wordpress返回上一个页面/武汉seo搜索引擎
  • 珠海网站设计网络优化/企业网络营销
  • 正规刷手机单做任务网站/网页模板建站系统