zoukankan      html  css  js  c++  java
  • 如何让scss变量能够当做js变量来使用

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

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

    豌豆资源搜索网站https://55wd.com 广州vi设计公司http://www.maiqicn.com

    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('
    ')
          }
        }
      }
    };
    
    

    注意:此处有个坑,新版本的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('
    ')
          }
        }
      }
    };
    

    老版本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('
    ')
          }
        }
      ]
    }
    ...
    

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

  • 相关阅读:
    C#中自动增量字段值的获取方法
    Mio改造第一步
    酒后
    阳朔自驾行-行程篇
    如何在C#中获取新插入的identity列值
    格格生了
    扯皮
    nPdl的翻译
    asp.net和asp的互相调用
    NetBPM前进了一步,解决了上一个问题
  • 原文地址:https://www.cnblogs.com/xiaonian8/p/13740181.html
Copyright © 2011-2022 走看看