CSS中關(guān)于變量的基本教程

CSS中的變量給了我們諸多優(yōu)點:方便、代碼重用、更可靠的代碼庫和提升防錯能力。
示例
- :root {
- --base-font-size: 16px;
- --link-color: #6495ed;
- }
- p {
- font-size: var( --base-font-size );
- }
- a {
- font-size: var( --base-font-size );
- color: var( --link-color );
- }
基礎(chǔ)
當使用CSS變量時,你應(yīng)該了解的三個主要組成:
自定義屬性
var()函數(shù)
:root偽類
自定義屬性
你已經(jīng)知道了一些CSS的標準屬性,如color,margin,width和font-size。
下面的示例使用了CSS的color屬性:
- body {
- color: #000000; /* The "color" CSS property */
- }
自定義屬性僅意味著我們(創(chuàng)建CSS文件的人)去定義屬性的名字。
為了自定義一個屬性名,我們需要用--作為前綴。
如果我們要創(chuàng)建一個值為黑色的、名為text-color的自定義屬性,可以這樣做:
- :root {
- --text-color: #000000; /* A custom property named "text-color" */
- }
var()函數(shù)
為了應(yīng)用自定義屬性,需要利用var()函數(shù),否則瀏覽器不知道他們代表什么。
如果想要在p、h1和h2中的樣式中使用--text-color,可以這樣使用var()函數(shù):
- :root {
- --text-color: #000000;
- }
- p {
- color: var( --text-color );
- font-size: 16px;
- }
- h1 {
- color: var( --text-color );
- font-size: 42px;
- }
- h2 {
- color: var( --text-color );
- font-size: 36px;
- }
其等價于:
- p {
- color: #000000;
- font-size: 16px;
- }
- h1 {
- color: #000000;
- font-size: 42px;
- }
- h2 {
- color: #000000;
- font-size: 36px;
- }
:root偽類
我們需要一個地方來放置自定義屬性。雖然可以在任何樣式規(guī)則中指定自定義屬性,但到處定義屬性并不是一個好主意,這對CSS的可維護性和可閱讀性是一個挑戰(zhàn)。
:root 偽類代表了HTML文檔的根元素,這是一個放置自定義屬性的好位置,因為我們可以通過其他更具特異性的選擇器來覆蓋自定義屬性值。
CSS變量的好處
可維護性
在一個Web開發(fā)項目中,我們經(jīng)常重復(fù)使用一個特定的CSS屬性值:
- h1 {
- margin-bottom: 20px;
- font-size: 42px;
- line-height: 120%;
- color: gray;
- }
- p {
- margin-bottom: 20px;
- font-size: 18px;
- line-height: 120%;
- color: gray;
- }
- img {
- margin-bottom: 20px;
- border: 1px solid gray;
- }
- .callout {
- margin-bottom: 20px;
- border: 3px solid gray;
- border-radius: 5px;
- }
當需要改變某些屬性值時,問題就會暴露出來了。
如果我們手動的改變屬性值,尤其是當CSS文件很大時,不僅會花費大量時間,還可能會范一些錯誤。同樣的,如果我們執(zhí)行一個批處理查找和替換,就可能會無意中影響其他樣式規(guī)則。
我們可以使用CSS變量重寫:
- :root {
- --base-bottombottom-margin: 20px;
- --base-line-height: 120%;
- --text-color: gray;
- }
- h1 {
- margin-bottom: var( --base-bottombottom-margin );
- font-size: 42px;
- line-height: var( --base-line-height );
- color: var( --text-color );
- }
- p {
- margin-bottom: var( --base-bottombottom-margin );
- font-size: 18px;
- line-height: var( --base-line-height );
- color: var( --text-color );
- }
- img {
- margin-bottom: var( --base-bottombottom-margin );
- border: 1px solid gray;
- }
- .callout {
- margin-bottom: var( --base-bottombottom-margin );
- border: 1px solid gray;
- border-radius: 5px;
- color: var( --text-color );
- }
假設(shè)你現(xiàn)在的客戶說由于文本顏色太亮,導(dǎo)致文本難以閱讀,想要改變文本顏色,此時,我們只需要更新一行CSS規(guī)則:
- --text-color: black;
提高CSS的可讀性
自定義屬性會使樣式表更加易讀,也會使CSS屬性聲明更有語義。
將這個聲明
- background-color: yellow;
和下面的聲明比較一下
- background-color: var( --highlight-color );
- font-size: var( --base-font-size );
像yellow和18px一類的屬性值并沒有給我們?nèi)魏斡杏玫纳舷挛男畔?,但是當我們閱讀如--base-font-size和--highlight-color一樣的屬性名時,即便在其他人的代碼,我們都能馬上知道這個屬性值是在做什么。
要注意的事
大小寫敏感
自定義屬性是大小寫敏感的(和普通的CSS規(guī)則不一樣)
- :root {
- --main-bg-color: green;
- --MAIN-BG-COLOR: RED;
- }
- .box {
- background-color: var( --main-bg-color ); /* green background */
- }
- .circle {
- BACKGROUND-COLOR: VAR(--MAIN-BG-COLOR ); /* red background */
- border-radius: 9999em;
- }
- .box,
- .circle {
- height: 100px;
- width: 100px;
- margin-top: 25px;
- box-sizing: padding-box;
- padding-top: 40px;
- text-align: center;
- }
自定義屬性值的解析
當重復(fù)聲明自定義屬性時,其賦值遵循通常的CSS層疊和繼承規(guī)則。例如下面的示例:
HTML
- <body>
- <div class="container">
- <a href="">Link</a>
- </div>
- </body>
CSS
- :root {
- --highlight-color: yellow;
- }
- body {
- --highlight-color: green;
- }
- .container {
- --highlight-color: red;
- }
- a {
- color: var( --highlight-color );
- }
當移除.container規(guī)則時,鏈接的顏色值將是green。
回退值
當使用var()函數(shù)時,可以分配一個回退的屬性值,其作為一個額外參數(shù)和第一個參數(shù)用,隔開??聪旅娴氖纠?br />HTML
- <div class="box">A Box</div>
CSS
- div {
- --container-bg-color: black;
- }
- .box {
- width: 100px;
- height: 100px;
- padding-top: 40px;
- box-sizing: padding-box;
- background-color: var( --container-bf-color, red );
- color: white;
- text-align: center;
- }
因為給var()傳遞了一個回退值參數(shù),所以div的背景色最中被渲染成紅色。
無效值
謹防給CSS屬性分配錯誤類型的值。
在下面的示例中,由于自定義屬性--small-button被賦予一個長度單位,它被用在.small-button樣式中是無效的(譯者注:因為color的屬性類型值出錯)
- :root {
- --small-button: 200px;
- }
- .small-button {
- color: var(--small-button);
- }
避免這種情況的一個好方式是想出具有描述性的自定義屬性名稱。例如將上面的自定義屬性命名為--small-button-width
瀏覽器對CSS變量的支持
CSS變量用起來很方便,但是瀏覽器對其支持情況不太好:
相關(guān)文章
- CSS Grid 是一種二維布局系統(tǒng),可以同時控制行和列,相比 Flex(一維布局),更適合用在整體頁面布局或復(fù)雜模塊結(jié)構(gòu)中,這篇文章主要介紹了前端CSS Grid 布局詳解,需要的朋2025-04-16
CSS Padding 和 Margin 區(qū)別全解析
CSS 中的 padding 和 margin 是兩個非常基礎(chǔ)且重要的屬性,它們用于控制元素周圍的空白區(qū)域,本文將詳細介紹 padding 和 margin 的概念、區(qū)別以及如何在實際項目中使用它們2025-04-07- will-change 是一個 CSS 屬性,用于告訴瀏覽器某個元素在未來可能會發(fā)生哪些變化,本文給大家介紹CSS will-change 屬性詳解,感興趣的朋友一起看看吧2025-04-07
- 本文給大家分享在 CSS 中,去除a標簽(超鏈接)的下劃線的幾種方法,本文給大家介紹的非常詳細,感興趣的朋友一起看看吧2025-04-07
- 在前端開發(fā)中,CSS(層疊樣式表)不僅是用來控制網(wǎng)頁的外觀和布局,更是實現(xiàn)復(fù)雜交互和動態(tài)效果的關(guān)鍵技術(shù)之一,隨著前端技術(shù)的不斷發(fā)展,CSS的用法也日益豐富和高級,本文將2025-04-07
css中的 vertical-align與line-height作用詳解
文章詳細介紹了CSS中的`vertical-align`和`line-height`屬性,包括它們的作用、適用元素、屬性值、常見使用場景、常見問題及解決方案,感興趣的朋友跟隨小編一起看看吧2025-03-26淺析CSS 中z - index屬性的作用及在什么情況下會失效
z-index屬性用于控制元素的堆疊順序,值越大,元素越顯示在上層,它需要元素具有定位屬性(如relative、absolute、fixed或sticky),本文給大家介紹CSS 中z - index屬性的作用2025-03-21- 文章詳細介紹了CSS中的打印媒體查詢@mediaprint包括基本語法、常見使用場景和代碼示例,如隱藏非必要元素、調(diào)整字體和顏色、處理鏈接的URL顯示、分頁控制、調(diào)整邊距和背景等2025-03-18
CSS模擬 html 的 title 屬性(鼠標懸浮顯示提示文字效果)
本文介紹了如何使用CSS模擬HTML的title屬性,通過鼠標懸浮顯示提示文字效果,通過設(shè)置`.tipBox`和`.tipBox.tipContent`的樣式,實現(xiàn)了提示內(nèi)容的隱藏和顯示,感興趣的朋友一起2025-03-10前端 CSS 動態(tài)設(shè)置樣式::class、:style 等技巧(推薦)
本文介紹了Vue.js中動態(tài)綁定類名和內(nèi)聯(lián)樣式的兩種方法:對象語法和數(shù)組語法,通過對象語法,可以根據(jù)條件動態(tài)切換類名或樣式;通過數(shù)組語法,可以同時綁定多個類名或樣式,此外2025-02-26