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

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 加载不同主题变量文件
http://www.xdnf.cn/news/10256.html

相关文章:

  • 基于Web的濒危野生动物保护信息管理系统设计(源码+定制+开发)濒危野生动物监测与保护平台开发 面向公众参与的野生动物保护与预警信息系统
  • resubmit v1.2.0 新特性支持类级别防止重复提交
  • 深度学习总结(40)
  • 数据集笔记:SeekWorld
  • 【Java笔记】Spring IoC DI
  • YOLOv8 移动端升级:借助 GhostNetv2 主干网络,实现高效特征提取
  • 【CC协议】知识共享许可协议(Creative Commons Licenses)体系解析
  • 注销微软账户
  • android 媒体框架之MediaCodec
  • MySQL中COUNT(*)、COUNT(1)和COUNT(字段名)的深度剖析与实战应用
  • 谷歌:贝叶斯框架优化LLM推理反思
  • CMake指令:list()
  • MySQL(48) 什么是ZEROFILL属性?
  • 宇树机器狗go2添加3d雷达(下)添加velodyne系列雷达
  • 《高等数学》(同济大学·第7版) 第一节《映射与函数》超详细解析
  • 数据库只更新特定字段的两种方式(先读后写 vs. 动态组织 SQL)-golang SQLx 实现代码(动态组织 SQL)
  • 索引的选择与Change Buffer
  • Linux进程信号
  • 车载诊断架构SOVD --- 车辆发现与建连
  • 项目:贪吃蛇实现
  • AI与智能驾驶的关系和原理:技术融合与未来展望-优雅草卓伊凡一、AI大模型基础原理与智能驾驶
  • 【Linux系列】Linux/Unix 系统中的 CPU 使用率
  • C++23 已移除特性解析
  • 电子电路:怎么理解时钟脉冲上升沿这句话?
  • ASP.NET Core SignalR的基本使用
  • 《深入解析SPI协议及其FPGA高效实现》-- 第一篇:SPI协议基础与工作机制
  • Python编程基础(一) | 变量和简单数据类型
  • git下载和安装(完整版)
  • 什么是特性阻抗
  • ArcPy错误处理与调试技巧(2)