如何让scss变量能够当做js变量来使用

更新日期: 2020-01-16 阅读: 4.2k 标签: scss

当前我们使用scss变量有两个痛点:

  1. 需要手动导入
  2. 无法与js建立联系或者很难,后续不能在此基础上做一些骚操作 为了解决这两个问题,我们以创建js文件以json格式定义scss变量,然后通过配置webpack的解析规则来达到即能像普通scss一样使用,又能作为js变量使用的目的。


scss变量使用规范

变量创建

所有scss变量在style/variables.scss.js编写,格式要求为:

  1. 只允许使用小写字母
  2. 单词间以下划线"_"连接
  3. 命名应简洁易懂,以一个大的模块或高级别的单词开头_后面跟功能描述单词结尾
const variables = {
  'header_height': '60px',
  'header_background': `#ededed`
}

module.exports = variables;

注意:命名以下划线连接是为了在js文件中能够单个import, 使用中已经在webpack进行转换,必须按照此格式!
在scss变量中使用是正常的scss变量:$header-height
在js中使用是定义时的变量格式:import { header_height } from "@/style/variables.scss.js";

变量使用

配置webpack中sass解析方式,一般来说项目构建者已经处理完毕,项目成员无需关心。
使用时无需引入,直接在样式文件中正常使用即可。

scss中使用示例
.the-nav{
  height: $header-height;
}
js中使用示例
import { header_height } from "@/style/variables.scss.js";

...
data(){
  return {
    header_height: header_height
  }
}
...

配置讲解

vue.config.js 中 cuecli3+
let scssVariables = require('./src/style/variables.scss.js');

module.exports = {
  css: {
    loaderOptions: {
      sass: {
        prependData: Object.keys(scssVariables)
          .map(k => `\$${k.replace('_', '-')}: ${scssVariables[k]};`)
          .join('\n')
      }
    }
  }
};

注意:此处有个坑,新版本的sass-loader更换了api参数prependData但是似乎没有文档说明

老版本的sass-loader vue.config.js 中 cuecli3+
let scssVariables = require('./src/style/variables.scss.js');

module.exports = {
  css: {
    loaderOptions: {
      sass: {
        data: Object.keys(scssVariables)
          .map(k => `\$${k.replace('_', '-')}: ${scssVariables[k]};`)
          .join('\n')
      }
    }
  }
};

老版本data => 新版本 prependData

webpack.config.js中 vuecli2
let scssVariables = require('./src/style/variables.scss.js');

...
{
  test: /\.scss$/,
  use: [
    'css-loader',
    'postcss-loader',
    {
      loader: 'sass-loader',
      options: {
        data: Object.keys(scssVariables)
          .map(k => `\$${k.replace('_', '-')}: ${scssVariables[k]};`)
          .join('\n')
      }
    }
  ]
}
...

经过一番姿势,到这里已经可以成功解锁新世界啦~~~~

GitHub 欢迎交友

本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/7274

常用的5个css代码(scss mixin)

在写css的时候, 很多样式都是很常用但是写起来很麻烦, 虽然现在有很多成熟的ui框架, 但是我们也不能一个简单的活动页也引入那么大个框架吧?在工作中我也攒下了不少常用css, 我把他们封装成了mixin

scss如何编译成css?

SCSS是Sass3版本当中引入的新语法特性,完全兼容CSS3的同时继承了Sass强大的动态功能。scss文件可以编译为css文件,下面我们来看一下将scss编译为css的方法。

scss缩减50%的样式代码

Sass是CSS3语言的扩展,它能帮你更省事地写出更好的样式表,使你摆脱重复劳动,使工作更有创造性。因为你能更快地拥抱变化,你也将敢于在设计上创新。你写出的样式表能够自如地应对修改颜色或修改HTML标签

SCSS 中这些技巧,你可能还不知道!

随着css工程化的普及,sass在前端工程中越来越举足轻重。这篇文章会跟随工程化前端一步一步记录sass中那些不为人知,但是又非常使用的小技巧分享给大家。

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!