Javascript如何與Sass,Less,Css之間共享變量?

原博文地址,此博文首次發於csdn,原創css

前段時間遇到網站換膚的需求,本想挺簡單的,直接用 Sass 或者 Less 設置變量就行了,結果致使的問題就是 js 中設置的樣式html

得單獨設置,好麻煩。vue

本文章代碼gitHub地址 https://github.com/l-x-f/variables-css-less-sass-js node

這個時候若是能讓樣式文件和 js 文件實現變量共享,那這個問題就解決了。查了好多資料,最終的解決方案以下:webpack

1.原理介紹:經過 webpack 和 css module,咱們能夠在 js 中使用樣式 Sass,Less,Css 文件中定義的變量。git

2.環境: node: v8.10.0 vue-cli:3.5.3 github

3.package.json ( scss和less及其loader等先安裝,vue-cli:3.5.3 下webpack已配置)web

{
  "name": "Javascript 如何 Sass,Less,Css 之間共享變量",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint"
  },
  "dependencies": {
    "core-js": "^2.6.5",
    "vue": "^2.6.6",
    "vue-router": "^3.0.1",
    "vuex": "^3.0.1"
  },
  "devDependencies": {
    "@vue/cli-plugin-babel": "^3.5.0",
    "@vue/cli-plugin-eslint": "^3.5.0",
    "@vue/cli-service": "^3.5.0",
    "babel-eslint": "^10.0.1",
    "eslint": "^5.8.0",
    "eslint-plugin-vue": "^5.0.0",
    "less": "^3.9.0",
    "less-loader": "^4.1.0",
    "node-sass": "^4.9.0",
    "sass-loader": "^7.1.0",
    "vue-template-compiler": "^2.5.21"
  }
}

4.文件目錄
在這裏插入圖片描述vue-router

5.variables文件夾下代碼(核心代碼)
css.css文件vuex

/* @value 定義變量,而後使用。

@value bgcColor: red;   會導出@ 後面的變量,
在:export {}  能夠取到該變量,也能夠導出
他們在功能上等同於 ES6 的關鍵字export,即導出一個 js 對象。*/

@value bgcColor: red;
@value fontSize: 10px;

/*   這裏能夠直接使用
.demo { 
  background-color: bgcColor;
  font-size: fontSize;
} */


/*  CSS Module  導出 
 :export {
  cssExportBgcColor: bgcColor;
}
 */

less.less文件

@mainColor: #398bd0;
@fontSize: 100px;

// CSS Module 有一個:export關鍵字,它在功能上等同於 ES6 的關鍵字export,即導出一個 js 對象。
:export {
  name: "less";
  mainColor: @mainColor;
  fontSize: @fontSize;
}

scss.scss文件

$primaryColor: #f4d020;
$fontSize: 11px;

// CSS Module 有一個:export關鍵字,它在功能上等同於 ES6 的關鍵字export,即導出一個 js 對象。
:export {
  name: "scss"; 
  primaryColor: $primaryColor;
  fontSize: $fontSize;
}

index.js文件

import variablesScss from "./scss.scss";
import variablesLess from "./less.less";
import variablesCss from "./css.css";

// 導出變量
export default {
  variablesScss,
  variablesLess,
  variablesCss
};

6.styles文件夾下代碼(樣式文件中使用變量)

css-use.css文件

@value variables: "../variables/css.css"; /* 導入變量*/
@value bgcColor, fontSize from variables;/* 取出變量*/

.box {
  name: "css"; /* 此屬性錯誤,僅用於區分,可忽略*/
  background-color: bgcColor;
  font-size: fontSize;
}

less-use.less文件

@import "../variables/less.less";

.box {
  name: "less";/* 此屬性錯誤,僅用於區分,可忽略*/
  background-color: @mainColor;
  font-size:  @fontSize;
 
}

scss-use.scss文件

@import "../variables/scss.scss";

.box {
  name: "scss"; /* 此屬性錯誤,僅用於區分,可忽略*/
  background-color: $primaryColor;
  font-size: $fontSize;
 
}

7.main.js代碼

import Vue from "vue";
import App from "./App.vue";
Vue.config.productionTip = false;
import variables from "./variables";

console.log(variables, "main-variables");

new Vue({
  render: h => h(App)
}).$mount("#app");

8.App.vue文件代碼

<template>
  <div id="app" class="box"></div>
</template>

<script>
// variables in  js
import variables from "./variables";
export default {
  name: "home",
  components: {},
  data() {
    return {
      variables: { ...variables }
    };
  },
  created() {
    console.log(this.variables, "App-this.variables");
  }
};
</script>

<!--css -->
<style lang="css">
#app {
  height: 500px;
}
@import "./styles/css-use.css";
</style>


<!--scss -->
<style lang="scss">
@import "./styles/scss-use.scss";
</style>

<!-- less-->
<style lang="less">
@import "./styles/less-use.less";
</style>

9.最後的效果
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
如圖咱們在js文件(或vue 文件)中取到樣式變量,最後引用第三個資料中的一句話結束本文章

環境之間共享變量是編程的聖盃

參考資料
http://www.ruanyifeng.com/blo...
https://github.com/css-module...
https://www.bluematador.com/b...
https://github.com/css-module...
https://github.com/css-module...

相關文章
相關標籤/搜索