成人欧美一区二区三区的电影,日韩一级一欧美一级国产,国产成人国拍亚洲精品,无码人妻精品一区二区三区毛片,伊人久久无码大香线蕉综合

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

CSS 變量 var() 輕松實(shí)現(xiàn)主題換膚功能

freeflydom
2025年10月13日 8:38 本文熱度 677

曾經(jīng)主題切換功能可以作為軟件中亮眼的賣點(diǎn)存在,畢竟那時(shí)候要實(shí)現(xiàn)換膚可不容易,一套主題一套樣式,這代碼的重復(fù)率嗖嗖嗖的就漲上去了~~當(dāng)然也可以借助 CSS 預(yù)編譯 語言編譯出多套 CSS 樣式表。

沒有用覺得我們其實(shí)并不需要多套樣式表實(shí)現(xiàn)換膚?我們只是想要一個(gè)像 JS 設(shè)計(jì)模式中的適配器,約定好規(guī)則,不同的主題按照約定規(guī)則進(jìn)行適配即可。

CSS 變量

什么是變量?

就是在一個(gè)地方定義,可到處使用的東西。遇到不滿意的時(shí)候,也可以隨時(shí)進(jìn)行改變。嘿...不滿意就換這不是理想中的生活嗎?扯遠(yuǎn)了~~

CSS 變量(又稱為自定義屬性),可以讓開發(fā)者集中管理 CSS 中可復(fù)用的值,比如:顏色,間距,字體大小等等一切 CSS 中的屬性值。

變量聲明規(guī)則

在 CSS 中,變量名必須以 -- 開頭,比如:--base-font-size、--base-color 等,需注意,變量名是區(qū)分大小寫的,如 --a 和 --A 是兩個(gè)不同的變量。

雖然變量名的書寫規(guī)范沒強(qiáng)制要求以短橫線 - 分割,但為了與 css 屬性名保持一致,還是建議使用短橫線分割,不建議使用駝峰命名,比如 --baseFontSize 不推薦,但要這么寫代碼也能運(yùn)行。

在聲明一個(gè)變量也可以使用另一個(gè)變量作為變量值。

語法:

--base-font-size: 24px;
--base-color: #333;
--base-shadow: 3px 3px 6px rgba(0, 0, 0, 0.3);
/* 使用另一個(gè)變量,并使用默認(rèn)值 */
--base-border: 2px solid var(--base-color, red);

變量申明位置

如果全局使用的變量,可以使用 :root 選擇器聲明:

:root {
  --base-font-size: 24px;
  --base-color: #333;
  --base-shadow: 3px 3px 6px rgba(0, 0, 0, 0.3);
}

局部變量可以在選擇器中聲明,變量名相同情況下,局部變量會(huì)覆蓋全局變量:

.box {
  --base-font-size: 18px;
  --box-color: #666;
  --box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);
}

變量使用

在 CSS 中,要使用變量必須要用到 var() 函數(shù),var() 函數(shù)的作用就是去獲取變量的值,語法如下:

.box {
  font-size: var(--base-font-size);
  color: var(--base-color);
  box-shadow: var(--base-shadow);
}
/* 以上代碼等價(jià)于 */
.box {
  font-size: 24px;
  color: #333;
  box-shadow: 3px 3px 6px rgba(0, 0, 0, 0.3);
}

示例:

<div class="box">
  box 中的文字內(nèi)容
</div>
<style>
:root {
  --base-font-size: 24px;
  --base-color: #333;
  --base-shadow: 3px 3px 6px rgba(0, 0, 0, 0.3);
}
.box {
  border: 2px solid rgba(255, 71, 87,0.3);
  margin: 20px 0;
  width: 400px;
  height: 120px;
  font-size: var(--base-font-size);
  color: var(--base-color);
  box-shadow: var(--base-shadow);
}
</style>

效果:

var() 默認(rèn)值

var() 的第二個(gè)參數(shù)可以設(shè)置一個(gè)默認(rèn)值,如果獲取的變量沒有設(shè)置,則使用默認(rèn)值進(jìn)行屬性賦值,可以理解為 山中無老虎,猴子稱大王。

示例:

<div class="box">
  box 中的文字內(nèi)容
</div>
<style>
:root {
  --base-font-size: 24px;
  --base-color: #333;
  --base-shadow: 3px 3px 6px rgba(0, 0, 0, 0.3);
}
.box {
  border: 2px solid rgba(255, 71, 87,0.3);
  margin: 20px 0;
  width: 400px;
  height: 120px;
  font-size: var(--base-font-size, 14px); /* 如果沒有設(shè)置 --base-font-size,則使用默認(rèn)值 14px */
  color: var(--base-color, #ff4757); /* 如果沒有設(shè)置 --base-color,則使用默認(rèn)值 #ff4757 */
  box-shadow: var(--base-shadow);
  background-color: var(--base-bg-color, rgba(255, 71, 87,0.1)); /* 如果沒有設(shè)置 --base-bg-color,則使用默認(rèn)值 rgba(255, 71, 87,0.1) */
}
</style>

font-size 和 color 的值都有定義,所以會(huì)使用的定義的值,而 background-color 沒有定義,所以會(huì)使用默認(rèn)值。效果:

變量覆蓋

有時(shí)候可能我們不想要默認(rèn)的變量值,而是需要特殊設(shè)定。比如某些三方組件里面使用 root 聲明了變量,這時(shí)候要想覆蓋 root 聲明的變量,應(yīng)該怎么做?

變量覆蓋規(guī)則:

1、a.css 和 b.css 同時(shí)使用 root 聲明了同一個(gè)變量,那么跟引入兩個(gè) css 文件的順序有關(guān),后引入的文件會(huì)覆蓋前一個(gè)。
2、:root 聲明的變量,可以使用 :root:root 覆蓋。
3、局部變量優(yōu)先級(jí)高于全局變量。

比如有如下兩個(gè) CSS 代碼文件:

a.css 文件:

:root {
  --base-font-size: 24px;
  --base-color: #333;
  --base-shadow: 3px 3px 6px rgba(0, 0, 0, 0.3);
}

b.css 文件:

:root {
  /*
  同時(shí)使用 root 聲明的變量與引入的順序有關(guān)
   */
  --base-color: red;
}
:root:root {
  /*
    此處聲明會(huì)覆蓋 a.css 文件中的 --base-font-size。
    不論 a.css 在前,還是在后,都會(huì)生效。
  */
  --base-font-size: 16px;
}
.box {
  border: 2px solid rgba(255, 71, 87,0.3);
  margin: 20px 0;
  width: 400px;
  height: 120px;
  font-size: var(--base-font-size, 14px);
  color: var(--base-color);
  box-shadow: var(--base-shadow);
  background-color: var(--base-bg-color, rgba(255, 71, 87,0.1));
}
.box:nth-child(1) {
  /*
   局部變量優(yōu)先級(jí)最高
   */
  --base-shadow: 0 0 0 6px rgba(0, 0, 0, 0.3);
}

a.css 在 b.css 之前引入示例:

<link rel="stylesheet" href="./a.css">
<link rel="stylesheet" href="./b.css">
<div class="box">
  box1 中的文字內(nèi)容
</div>
<div class="box">
  box2 中的文字內(nèi)容
</div>

效果:

b.css 在 a.css 之前引入示例:

<link rel="stylesheet" href="./b.css">
<link rel="stylesheet" href="./a.css">
<div class="box">
  box1 中的文字內(nèi)容
</div>
<div class="box">
  box2 中的文字內(nèi)容
</div>

效果:

由于變量的覆蓋特性,所以不建議到處聲明變量,應(yīng)該集中管理,在固定文件中聲明 CSS 變量??!

主題換膚

一個(gè)簡單的換膚示例:

<div class="box">
  box 中的文字內(nèi)容
</div>
<div>
  <!-- 點(diǎn)擊事件將 body class 置空 -->
  <a href="javascript:;" onclick="document.body.className = ''">無主題</a>
  <!-- 點(diǎn)擊事件給 body 添加 class -->
  <a href="javascript:;" onclick="document.body.className = 'theme-1'">主題1</a>
  <!-- 點(diǎn)擊事件給 body 添加 class -->
  <a href="javascript:;" onclick="document.body.className = 'theme-2'">主題2</a>
</div>
<style>
.theme-1 {
  --base-font-size: 24px;
  --base-color: #333;
  --base-shadow: 0 0 0 6px rgba(0, 0, 0, 0.3);
  --base-bg-color: rgba(71, 163, 255, 0.1);
  --base-border: 2px solid rgba(71, 163, 255,0.3);
}
.theme-2 {
  --base-font-size: 18px;
  --base-color: #333;
  --base-shadow: 3px 3px 6px rgba(0, 0, 0, 0.3);
  --base-bg-color: rgba(255, 197, 71, 0.1);
  --base-border: 2px solid rgba(255, 197, 71,0.3);
}
.box {
  margin: 20px 0;
  width: 400px;
  height: 120px;
  border: var(--base-border, 2px solid rgba(255, 71, 87,0.3));
  font-size: var(--base-font-size, 16px);
  color: var(--base-color, #ff4757);
  box-shadow: var(--base-shadow, 3px 3px 6px rgba(0, 0, 0, 0.3));
  background-color: var(--base-bg-color, rgba(255, 71, 87,0.1));
}
</style>

效果:

寫在最后

CSS 變量可以讓我們很方便的進(jìn)行主題換膚,也讓前端可以集中管理重復(fù)的顏色、字體、邊框等屬性,增強(qiáng)了代碼的可維護(hù)性。

轉(zhuǎn)自https://www.cnblogs.com/linx/p/18861016


該文章在 2025/10/13 8:38:58 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲(chǔ)管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved