elementUI——主題及自定義

說(shuō)明:本文基于element-ui@2.13.0趴捅,源碼詳見(jiàn)element窟坐。

一丁逝、主題相關(guān)代碼結(jié)構(gòu):

packages/theme-chalk

packages/theme-chalk/src下的組件scss文件目錄

可以看出兩點(diǎn):
a. 每個(gè)element ui組件基本都對(duì)應(yīng)有單獨(dú)的scss文件;
b. 單獨(dú)的組件scss文件椰于,支持了組件按需引入時(shí),樣式部分也能按需引入的訴求贮乳;
c.theme-chalk/src/common和theme-chalk/src/mixins目錄下忧换,主要是一些公共樣式的設(shè)置,全局sass變量向拆、工具亚茬、mixin和自定義function等(sass見(jiàn)elementUI中用到哪些sass語(yǔ)法);
d.theme-chalk/src/common/var.scss主要是定義了各組件中會(huì)用到的色彩浓恳、字體刹缝、邊框與圖標(biāo)等(可以參考本文第三節(jié)),各組件具體樣式在theme-chalk/src下各組件scss文件中設(shè)置颈将。

二赞草、主題的構(gòu)建:

"build:theme":  "
  node build/bin/gen-cssfile &&
  gulp build --gulpfile packages/theme-chalk/gulpfile.js &&
  cp-cli packages/theme-chalk/lib lib/theme-chalk"

2.1. 生成入口文件(node build/bin/gen-cssfile)

packages/theme-chalk下放有字體文件,scss相關(guān)變量吆鹤、mixin及公共樣式設(shè)置,各UI組件對(duì)應(yīng)的scss文件洲守;
build/bin/gen-cssfile根據(jù)components.json獲取組件名疑务,找到packages/theme-chalk對(duì)應(yīng)的各組件的scss文件信息,以@import "./組件.scss"的形式梗醇,寫(xiě)入packages/theme-chalk/index.scss文件知允,也就是說(shuō)總的入口文件index.scss可以動(dòng)態(tài)生成。

index.scss

2.2. 構(gòu)建(gulp build --gulpfile packages/theme-chalk/gulpfile.js)

gulp是一種基于流的打包方式叙谨,iviewUI和elementUI等UI庫(kù)都是采用gulp進(jìn)行樣式構(gòu)建的温鸽,參考gulp官方

function compile() {
  return src('./src/*.scss')
    .pipe(sass.sync())
    .pipe(autoprefixer({
      browsers: ['ie > 9', 'last 2 versions'],
      cascade: false
    }))
    .pipe(cssmin())
    .pipe(dest('./lib'));
}

function copyfont() {
  return src('./src/fonts/**')
    .pipe(cssmin())
    .pipe(dest('./lib/fonts'));
}

主要分兩個(gè)步驟:
一是把packages/theme-chalk/src下的各scss文件分別用sass插件處理成css文件并壓縮,輸出到packages/theme-chalk/src/lib目錄下涤垫;
二是把packages/theme-chalk/src/fonts下的字體文件經(jīng)過(guò)壓縮處理姑尺,同樣輸出到packages/theme-chalk/src/lib目錄下;

2.3. 構(gòu)建結(jié)果拷貝到根目錄lib下(cp-cli packages/theme-chalk/lib lib/theme-chalk)

通過(guò)cp-cli(內(nèi)部調(diào)用fs-extra)蝠猬,將packages/theme-chalk/src/lib下文件拷貝到根目錄下的lib目錄中切蟋。
按需引用組件css可以使用類似import 'element-theme-chalk/lib/select.css';的方式引入。

三榆芦、主題的設(shè)計(jì)

色彩:主色柄粹、輔助色、中性色(文本匆绣、背景和邊框顏色)驻右;
字體:字體、字號(hào)崎淳、行高堪夭;
邊框:邊框、圓角凯力、投影茵瘾;
圖標(biāo):iconfont制作的element-icons font family(packages/theme-chalk/src/icon.scss)
Element-UI 技術(shù)揭秘(5)- 色彩、字體咐鹤、邊框與圖標(biāo)

四拗秘、主題的定制

4.1 樣式覆蓋方式

使用element-ui默認(rèn)樣式分兩種:
a. 官方建議的按需引入方式

import { Button } from 'element-ui'

借助babel插件babel-plugin-component,上面代碼會(huì)轉(zhuǎn)換成下面的形式

var button = require('element-ui/lib/button') // lib/button.js即按組件打包后的el-button組件
require('element-ui/lib/theme-chalk/button.css')

可以看到樣式也按需引入了祈惶。
b.后編譯方式按需引入方式
后編譯的思想雕旨,即依賴包提供的源碼,而編譯交給業(yè)務(wù)應(yīng)用處理捧请,如

import  ElButton from 'element-ui/packages/button'  // 或 import  ElButton from 'element-ui/lib/button'
import  'packages/theme-chalk/src/button.scss' 

c.全量引入方式

import 'element-ui/lib/theme-chalk/index.css'

現(xiàn)在需要更改一些全局sass變量凡涩,來(lái)達(dá)到修改主題的目的,例如我們新建一個(gè)sass文件cover.scss

// cover.scss疹蛉,修改element-ui的全局變量
$--color-primary: #5BFF1D !default;

針對(duì)上面三種方式活箕,覆蓋的方式分別是:
a.沒(méi)辦法,因?yàn)橐玫臉邮绞谴虬蟮臉邮娇煽睿瑹o(wú)法覆蓋育韩;
b.可能的方案(待驗(yàn)證)是,在項(xiàng)目中通過(guò)下面的方式可以達(dá)到目的

import 'packages/theme-chalk/src/button.scss'
import 'cover.scss' // 順序很重要闺鲸,這樣可以覆蓋index.scss中的全局變量

c.針對(duì)c方案如下:

import 'packages/theme-chalk/src/index.scss'
import 'cover.scss' // 順序很重要筋讨,這樣可以覆蓋index.scss中的全局變量
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市摸恍,隨后出現(xiàn)的幾起案子悉罕,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件壁袄,死亡現(xiàn)場(chǎng)離奇詭異类早,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)然想,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)莺奔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人变泄,你說(shuō)我怎么就攤上這事令哟。” “怎么了妨蛹?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵屏富,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我蛙卤,道長(zhǎng)狠半,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任颤难,我火速辦了婚禮神年,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘行嗤。我一直安慰自己已日,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布栅屏。 她就那樣靜靜地躺著飘千,像睡著了一般。 火紅的嫁衣襯著肌膚如雪栈雳。 梳的紋絲不亂的頭發(fā)上护奈,一...
    開(kāi)封第一講書(shū)人閱讀 49,007評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音哥纫,去河邊找鬼霉旗。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蛀骇,可吹牛的內(nèi)容都是我干的奖慌。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼松靡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了建椰?” 一聲冷哼從身側(cè)響起雕欺,我...
    開(kāi)封第一講書(shū)人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后屠列,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體啦逆,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年笛洛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了夏志。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡苛让,死狀恐怖沟蔑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情狱杰,我是刑警寧澤瘦材,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站仿畸,受9級(jí)特大地震影響食棕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜错沽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一簿晓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧千埃,春花似錦憔儿、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至吴侦,卻和暖如春屋休,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背备韧。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工劫樟, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人织堂。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓叠艳,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親易阳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子附较,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 說(shuō)明:本文基于element-ui@2.13.0,源碼詳見(jiàn)element潦俺。內(nèi)容目錄: 一拒课、代碼結(jié)構(gòu)及工程化1.1 ...
    videring閱讀 7,078評(píng)論 4 9
  • ElementUI 是一套為開(kāi)發(fā)者徐勃、設(shè)計(jì)師和產(chǎn)品經(jīng)理準(zhǔn)備的基于 Vue 2.0 的桌面端組件庫(kù)。 0早像、前言 老規(guī)矩...
    風(fēng)之化身呀閱讀 1,198評(píng)論 0 1
  • 在現(xiàn)在的前端開(kāi)發(fā)中僻肖,前后端分離、模塊化開(kāi)發(fā)卢鹦、版本控制臀脏、文件合并與壓縮、mock數(shù)據(jù)等等一些原本后端的思想開(kāi)始...
    Charlot閱讀 5,431評(píng)論 1 32
  • 安裝Gulp首先需要安裝Node.js冀自,并在控制臺(tái)輸入$ npm install gulp -gMac端需要寫(xiě)成$...
    LaBaby_閱讀 909評(píng)論 0 1
  • gulpjs是一個(gè)前端構(gòu)建工具揉稚,與gruntjs相比,gulpjs無(wú)需寫(xiě)一大堆繁雜的配置參數(shù)凡纳,API也非常簡(jiǎn)單窃植,學(xué)...
    小裁縫sun閱讀 921評(píng)論 0 3