關(guān)于組件庫(kù)的主題定制

簡(jiǎn)述

這篇博文主要講解前端組件庫(kù)主題定制相關(guān)內(nèi)容,只限于Scss/Sass、Less兩種樣式預(yù)處理語(yǔ)言,這兩種語(yǔ)言能夠簡(jiǎn)化CSS的工作流,使得開(kāi)發(fā)者維護(hù)開(kāi)發(fā)樣式更得心應(yīng)手,便于應(yīng)對(duì)復(fù)雜的樣式需求。

對(duì)組件封裝性好的庫(kù)而我比較熟悉的有兩個(gè),React和Vue,這里我對(duì)這兩個(gè)前端庫(kù)封裝的組件進(jìn)行說(shuō)明,涉及到的組件庫(kù)包括:element-ui、iviewantd、ionic。

主題定制分類(lèi)

組件庫(kù)的編寫(xiě)者一般都會(huì)為開(kāi)發(fā)者設(shè)計(jì)一些主題樣式更換方案,主要是這兩類(lèi):

  1. 復(fù)寫(xiě)全部主題樣式,一次性引入
  2. 通過(guò)預(yù)處理器注入主題變量

這里對(duì)這兩類(lèi)進(jìn)行說(shuō)明。

1. 復(fù)寫(xiě)全部主題樣式

SCSS

這個(gè)在PC端比較常見(jiàn),比如:element-ui中的第二個(gè)方案,雖然說(shuō)是改變SCSS變量,但還是復(fù)寫(xiě)了全部主題樣式。項(xiàng)目初始時(shí)加載全部組件的樣式,這個(gè)場(chǎng)景在PC端并沒(méi)有太大的問(wèn)題。但是從性能優(yōu)化的角度,并不推薦。

/* 改變主題色變量 */
$--color-primary: teal;

/* 改變 icon 字體路徑變量,必需 */
$--font-path: '../node_modules/element-ui/lib/theme-chalk/fonts';

@import "../node_modules/element-ui/packages/theme-chalk/src/index";
Less

此外,iview使用Less作為預(yù)編譯語(yǔ)言,給出的推薦主題定制方案全部都是復(fù)寫(xiě)全部主題樣式的解決辦法,和element-ui一致。

@import '~iview/src/styles/index.less';

// Here are the variables to cover, such as:
@primary-color: #8c0776;

因?yàn)長(zhǎng)ess和Scss變量作用域定義不一樣,上面兩個(gè)@import寫(xiě)法會(huì)有些不同,但都是一個(gè)意思。

需要注意的是,這種方式已經(jīng)載入了所有組件的樣式,不需要也無(wú)法和按需加載插件babel-plugin-importbabel-plugin-component的 style 屬性一起使用。

2. 通過(guò)預(yù)處理器注入主題變量

Less

這里值得一提的是Antd組件庫(kù),這是我強(qiáng)烈推薦使用的組件庫(kù)。它推薦使用修改主題變量的方式定制主題,使用了Less的 modifyVars 的方式來(lái)覆蓋主題變量。比如將主題掛在package.json上:

"theme": {
  "primary-color": "#1DA57A",
},

這個(gè)方案之前在我做的項(xiàng)目中有使用,自己根據(jù)實(shí)現(xiàn)原理寫(xiě)邏輯代碼不是很難。

問(wèn)題點(diǎn)是:每次修改變量都需要重啟dev服務(wù),剛開(kāi)始對(duì)開(kāi)發(fā)者不是很友好。當(dāng)然,主題修改好后,并不是經(jīng)常變動(dòng),這里可以原諒。

SCSS

其實(shí)SCSS也能通過(guò)只修改主題變量的方式更改主題,這個(gè)是在讀IONIC源碼時(shí)發(fā)現(xiàn)的,源碼位置。它是通過(guò)node-sassoptions.data的方式覆蓋主題。比如傳入如下字符串:

'@charset "UTF-8"; @import "/xxx/xxx/project/to/theme/path/variables.scss";'

構(gòu)建時(shí)啟用你定義的樣式變量。我這里簡(jiǎn)單寫(xiě)了一個(gè)變量獲取方式,代碼。

注意,這里需要你樣式組件中的所有變量后都帶上!default修飾,將生效等級(jí)降為最低。這里沒(méi)有Less那樣需要重啟dev-server的問(wèn)題,通過(guò)webpack構(gòu)建,修改了引入的主題文件,項(xiàng)目將自動(dòng)重構(gòu),較為方便。

總結(jié)

建議通過(guò)修改變量的方式來(lái)修改主題我認(rèn)為是比較靠譜的,當(dāng)主題與公司UI不符時(shí),再使用樣式復(fù)寫(xiě)的方式處理。

個(gè)人還是比較喜歡SCSS的處理方式。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,002評(píng)論 6 542
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,400評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事?!?“怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 178,136評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,714評(píng)論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,452評(píng)論 6 412
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,818評(píng)論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,812評(píng)論 3 446
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,997評(píng)論 0 290
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,552評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,292評(píng)論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,510評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,035評(píng)論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,721評(píng)論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 35,121評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,429評(píng)論 1 294
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,235評(píng)論 3 398
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,480評(píng)論 2 379

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,725評(píng)論 25 708
  • 再談CSS 預(yù)處理器2016-09-09 Justineo JavaScript轉(zhuǎn)自:http://efe.bai...
    抓住時(shí)間的尾巴吧閱讀 1,593評(píng)論 0 2
  • 夜深常常夢(mèng)穎著這樣的一個(gè)年齡,纏綿這那樣的一樣歲月!卻被一個(gè)個(gè)標(biāo)簽所折磨,因另一個(gè)標(biāo)簽而為之心動(dòng)。在不經(jīng)意之間,潛...
    6e547d8c7be5閱讀 150評(píng)論 0 0
  • 今天班主任周老師不在家,我們?cè)缟献x英語(yǔ)的時(shí)候,有一大部分的同學(xué)表現(xiàn)的很好,有一些人表現(xiàn)的不好,因?yàn)樵?..
    丁子涵閱讀 269評(píng)論 0 0
  • 如果把西游記倒過(guò)來(lái)看,其實(shí)更精彩。 如來(lái)派師徒四人帶上八部天書(shū)和小白龍去東土大唐傳教,在一路上遇到了各種妖怪,打來(lái)...
    sunny林林林閱讀 226評(píng)論 0 0