这样我们的那些变量默认值字符串就添加进了 :root 根元素中:
/* result */ :root{ --color-canvas-default-transparent: 34 39 46; --color-marketing-icon-primary: 108 182 255; --color-marketing-icon-secondary: 49 109 202; --color-diff-blob-addition-num-text: 173 186 199; --color-diff-blob-addition-fg: 173 186 199; --color-diff-blob-addition-num-bg: 87 171 90; --color-diff-blob-addition-line-bg: 70 149 74; --color-diff-blob-addition-word-bg: 70 149 74; --color-diff-blob-deletion-num-text: 173 186 199; ...
但是有了这些 , 没有对应的 class 和 scss 变量 , 我们还是很不好使用这些变量的 , 那么怎么进行工程化来提升我们的开发效率呢?接下来重点来了 。
这里注意全局变量中存储的是字符串 , 并不是颜色变量本身 。
2. scss 与 js通信 , 动态生成 scss 变量与原子化 class
首先编写 export.scss 用于暴露对象给 js 使用:
// export.scss @use './constants.scss' as C; @use './util.scss' as Util; :export { @each $var $color in C.$root-vars { #{$var: Util.getRgbaString($color);
然后利用 webpack sass-loader 中 js 和 scss 的通信方法 , 就可以生成:
- variables.scss (全局scss变量文件)
- extendColors.cjs (tailwindcss colors 配置文件)
通过这种方式 , 我们把生成的结果写入 variables.scss 和 extendColors.cjs 文件内 , 从而便捷把第一步中维护的如此之多的 css变量 , 全部快速方便的转化为同等的 scss变量 和 tailwindcss 配置
3. 全局scss文件变量注入
生成 variables.scss后 , 我们可以配置一下 sass-loader 来让其中的变量无需显式引入 , 即可在全局生效:
// sass-loader { additionalData: '@use \"@/assets/scss/variables.scss\" *;'
这样我们就可以在任意的 vue <style> 或者 .scss 文件内使用到所有 variables.scss 中声明的变量了 。
4. 原子化的 class 生成
生成 extendColors.cjs 后 , 我们在里面添加:
function withOpacityValue(variable) { return ({ opacityValue ) => { if (opacityValue === undefined) { return `rgb(var(${variable))` return `rgb(var(${variable) / ${opacityValue)`
相关经验推荐
- |动态:苹果145元“天价抹布”官方清洁指南发布,你会用吗?
- var|这次我们看重价格!规格全接口齐,教你如何选高性价比电视
- 苹果|苹果的压力确实很大,在众多厂商对标下,苹果13的价格再次调整
- 浏览器|微软正在为 Edge 浏览器增加动态更新率,让滚动更流畅还更省电
- 海信|动态:宏碁笔记本首发Intel Arc独立显卡
- 三星|动态刷新率屏幕+6400万三星+IP68,高端旗舰让路,官方直降1400元
- 微信|微信又做调整:12月28日后,这个功能将要下线,记得导出个人数据
- MIUI|MIUI 13来了!MIUI公告:部分机型开发版公测权限要调整
- 小米科技|国内科技巨头放大招,自研动态自适应刷新率公布,库克压力来了
- 一加科技|媲美iPhone!小米12 Pro提前用上22款旗舰屏,还有智能动态刷新率