如何在SCSS中利用@each循环批量生成CSS工具类

轻涛酱_1788

轻涛酱_1788

2026-10-24

633人浏览

原创

单层@each生成工具类易出错,因键名含冒号不被识别、断点与值强耦合;应分离断点与颜色数据并嵌套循环,且需确保map键加引号、变量作用域正确、非空初始化。

如何在scss中利用@each循环批量生成css工具类

直接用 @each 遍历 Map 能生成基础工具类,但不加结构设计会立刻卡在响应式、命名冲突和编译静默失败上——这不是语法问题,而是数据组织方式错了。

为什么单层 @each 生成的工具类一加断点就漏变体

常见错误是把断点塞进 Map 键里,比如写 $colors: ("md:text-red": #f00)。SCSS 不允许键名含冒号,这行根本不会被识别为合法 Map,@each 直接跳过,也不报错。更糟的是,这种写法让断点和值强耦合,换一个断点就得重写全部键名。

正确做法是分离两层数据源:

  • $breakpoints: ("md": "min-width: 768px", "lg": "min-width: 1024px")
  • $colors: ("red": #f00, "blue": #00f)

然后用嵌套循环:外层遍历断点生成 @media,内层遍历颜色生成类。这样每个断点只包裹一次媒体查询,CSS 体积可控,且新增断点只需改 $breakpoints 一处。

@each $name, $value in $map 解构失败的三个硬性条件

编译后没输出任何类?大概率栽在这三处:

CSS婚礼策划服务机构宣传网站模板
CSS婚礼策划服务机构宣传网站模板

CSS婚礼策划服务机构宣传网站模板是一款适合提供婚礼策划和婚庆服务机构宣传网站模板下载。提示:本模板调用到谷歌字体库,可能会出现页面打开比较缓慢。

下载
  • Map 的键没加引号:"2": 0.5rem ✅,2: 0.5rem ❌(Sass 把数字字面量当无名键,@each 拿不到 $name)
  • 变量作用域不对:在 .card { $spacings: ("2": 0.5rem); } 里定义,却在外层 @each 中引用——Sass 变量不会自动向上查找
  • Map 初始化为空:$spacings: () !default 后直接 @each,空 Map 导致整个循环静默跳过,连 warning 都没有

生成图标类时 content 显示为空白的真正原因

不是 SCSS 写错了,而是 Unicode 值和字体没对齐。SCSS 只负责原样输出 content: "\e900",它不检查字体文件里有没有这个码点。

必须确认三件事:

  • $icon-map 中的 Unicode 是双反斜杠转义形式:"home": "\e900" ✅,"home": "e900" 或 '\e900' ❌
  • ::before 规则中显式声明 font-family: "icon-font", sans-serif,不能依赖继承
  • 浏览器开发者工具 → Elements → 选中元素 → Computed → 查看 content 是否解析为字符,再核对 font-family 是否命中目标字体名

每次从 IcoMoon / Fontello 导出新字体,$icon-map 必须同步更新,否则旧值还在,新图标永远不显示。

间距工具类里方向组合(x/y)怎么安全展开

写 "x": ("left", "right") 这种嵌套结构时,@each 默认拿不到子项。得用 type-of() 判断类型再分支处理:

@each $dir-key, $dir-prop in $spacing-sides {
  @if type-of($dir-prop) == "list" {
    @each $side in $dir-prop {
      .m#{$dir-key}-#{$size-key} {
        margin-#{$side}: $size-val;
      }
    }
  } @else {
    .m#{$dir-key}-#{$size-key} {
      margin-#{$dir-prop}: $size-val;
    }
  }
}

注意:$dir-prop 是字符串(如 "top")还是列表(如 ("left", "right"))必须区分清楚,否则 margin-("left", "right") 这种无效 CSS 会被编译出来,浏览器直接忽略。

前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

css

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
css
css

css是层叠样式表,用来表现HTML或XML等文件样式的计算机语言,不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

4996

6

css居中
css居中

css居中:1、通过“margin: 0 auto; text-align: center”实现水平居中;2、通过“display:flex”实现水平居中;3、通过“display:table-cell”和“margin-left”实现居中。本专题为大家提供css居中的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.27

1077

5

css如何插入图片
css如何插入图片

cssCSS是层叠样式表(Cascading Style Sheets)的缩写。它是一种用于描述网页或应用程序外观和样式的标记语言。CSS可以控制网页的字体、颜色、布局、大小、背景、边框等方面,使得网页的外观更加美观和易于阅读。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.28

1958

6

css超出显示...
css超出显示...

在CSS中,当文本内容超出容器的宽度或高度时,可以使用省略号来表示被隐藏的文本内容。本专题为大家提供css超出显示...的相关文章,相关教程,供大家免费体验。

2023.08.01

3826

7

css字体颜色
css字体颜色

CSS中,字体颜色可以通过属性color来设置,用于控制文本的前景色,字体颜色在网页设计中起到很重要的作用,具有以下表现作用:1、提升可读性;2、强调重点信息;3、营造氛围和美感;4、用于呈现品牌标识或与品牌形象相符的风格。

2023.08.10

7845

11

什么是css
什么是css

CSS是层叠样式表(Cascading Style Sheets)的缩写,是一种用于描述网页(或其他基于 XML 的文档)样式与布局的标记语言,CSS的作用和意义如下:1、分离样式和内容;2、页面加载速度优化;3、实现响应式设计;4、确保整个网站的风格和样式保持统一。

2023.08.10

6651

7

css三角形怎么写
css三角形怎么写

CSS可以通过多种方式实现三角形形状,本专题为大家提供css三角形怎么写的相关教程,大家可以免费体验。

2023.08.21

2217

9

css设置文字颜色
css设置文字颜色

CSS(层叠样式表)可以用于设置文字颜色,这样做有以下好处和优势:1、增加网页的可视化效果;2、突出显示某些重要的信息或关键字;3、增强品牌识别度;4、提高网页的可访问性;5、引起不同的情感共鸣。

2023.08.22

3171

5

css禁止点击事件
css禁止点击事件

实现css禁止点击事件的方法有使用CSS的pointer-events属性和使用JavaScript禁用点击事件。本专题为大家提供点击事件相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.23

2793

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 1.5万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 6万人学习

CSS教程
CSS教程

共754课时 | 98.5万人学习