目錄
CSS變數能幫助我們做什麼
一、什麼是CSS變數
首頁 web前端 css教學 什麼是CSS變數? CSS變數的學習:CSS變數的繼承&作用域

什麼是CSS變數? CSS變數的學習:CSS變數的繼承&作用域

Jul 30, 2018 pm 02:30 PM
css

CSS變數能幫助我們做什麼

在一些命令式程式語言中,像是Java、C 亦然或是JavaScript,透過變數我們能夠追蹤某些狀態。變數是一種符號,關聯著一個特定的值,變數的值能隨著時間的推移而改變。
在像CSS這種宣告式語言中,隨著時間而改變的值並不存在,也就沒有所謂變數的概念了。
CSS 引入了一種層級變數的概念,從而能夠從容應對可維護性的挑戰。這會讓在整個CSS tree 中都可以像徵性的引用一個變數

一、什麼是CSS變數

CSS 變數目前有兩種形式:

##變數,就是擁有合法識別碼和合法的值。可以被使用在任意的地方。可以使用var()函數使用變數。例如:var(--example-variable)會傳回--example-variable所對應的值

自訂屬性。這些屬性使用--
where的特殊格式作為名字。例如--example-variable: 20px;即使一個css宣告語句。意思是將20px賦值給--example-varibale變數

二、變數的宣告

變數的命名
變數宣告使用兩根連接詞線--表示變量, $color是屬於Sass的語法,@color是屬於Less的語法,為避免衝突css原生變數使用--)


注意: 變數名稱大小寫敏感,
--header-color--Header-Color是兩個不同變數

宣告方式
CSS變數宣告的方式非常簡單,如下,宣告了一個名叫color的CSS變數。

  • 在css檔案中寫

  • 寫在html標籤的inline-style裡

  • 用JS給某個元素聲明,方法.style.setProperty

  • body{
      --color: red;
    }
    <body style="--color: red;"></body>
    document.getElementsByTagName(&#39;body&#39;)[0].style.setProperty(&#39;--color&#39;, &#39;red&#39;)
    登入後複製
變數值的類型
如果變數值是一個字串,可以與其他字串拼接

--bar: &#39;hello&#39;;
--foo: var(--bar)&#39; world&#39;;


body:after {
  content: &#39;--screen-category : &#39;var(--screen-category);
}
登入後複製

如果變數值是數值,不能與數值單位直接連用,必須使用calc()函數,將它們連接

.foo {
  --gap: 20;
  /* 无效 */
  margin-top: var(--gap)px;
}

.foo {
  --gap: 20;
  margin-top: calc(var(--gap) * 1px);
}
登入後複製

如果變數值帶有單位,就不能寫成字串

/* 无效 */
.foo {
  --foo: &#39;20px&#39;;
  font-size: var(--foo);
}

/* 有效 */
.foo {
  --foo: 20px;
  font-size: var(--foo);
登入後複製

注意: 變數值只能用作屬性值,不能用作屬性名

.foo {
  --side: margin-top;
  /* 无效 */
  var(--side): 20px;
}
登入後複製

上面程式碼中,變數--side用作屬性名,這是無效的

三、CSS變數的繼承&作用域

自訂屬性同樣支援繼承。一個元素上沒有定義自訂屬性,該自訂屬性的值會繼承其父元素

class="one">
  <p class="two">
    <p class="three">
    </p>
    <p class="four">
    </p>
  <p>
</p>
登入後複製

定義下面的CSS:

.two { --test: 10px; }
.three { --test: 2em; }
登入後複製

在這個範例中,var(--test)的結果是:

  • class="two" 對應的節點: 10px

  • class="three" 對應的節點: element: 2em

  • class="four" 對應的節點: 10px (inherited from its parent)

  • class="one" 對應的節點: 無效值, 即此屬性值為未被自訂css變數覆寫的預設值

最頂層的作用域就是:root

四、回應式

p {
  --color: #7F583F;
  --bg: #F7EFD2;
}

.mediabox {
  color: var(--color);
  background: var(--bg);
}

@media screen and (min-width: 768px) {
  body {
    --color:  #F7EFD2;
    --bg: #7F583F;
  }
}
登入後複製

五、與預處理器的不同

1、預處理器變數不是即時的

$color:#7F583F;

@media screen and (min-width: 768px) {
    $color: #F7EFD2;
}

.mediabox {
      background: $color;
}
登入後複製

編譯結果

.mediabox {
  background: #7F583F; 
}
登入後複製

2、預處理器不能限定作用域

$zcolor:blue;
.ulbox {
    $zcolor:red;
}
ul{
    color: $zcolor;
}
登入後複製

編譯為

ul {
  color: blue; 
}
登入後複製

3、預處理器變數不可互通

原生的CSS自訂屬性可以與任何CSS預處理器或純CSS文件一起使用

六、JS操作變數

CSS 變數可以和JS 互相互動

:root{
  --testMargin:70px;
}
//  读取
var root = getComputedStyle(document.documentElement);
var cssVariable1 = root.getPropertyValue(&#39;--testMargin&#39;).trim();
console.log(cssVariable1); // &#39;70px&#39;
 
// 写入
document.documentElement.style.setProperty(&#39;--testMargin&#39;, &#39;100px&#39;);
var cssVariable2 = root.getPropertyValue(&#39;--testMargin&#39;).trim();
console.log(cssVariable2);  // &#39;100px&#39;

// 删除
document.documentElement.style.removeProperty(&#39;--testMargin&#39;);
var cssVariable3 = root.getPropertyValue(&#39;--testMargin&#39;).trim();
console.log(cssVariable3); // &#39;70px&#39;
登入後複製

七、相容性

偵測瀏覽器是否支援CSS自定義屬性的方法

/*css*/

@supports ( (--a: 0)) {
    /* supported */
}

@supports ( not (--a: 0)) {
    /* not supported */
}
// Js

if (window.CSS && window.CSS.supports && window.CSS.supports(&#39;--a&#39;, 0)) {
    alert(&#39;CSS properties are supported&#39;);
} else {
    alert(&#39;CSS properties are NOT supported&#39;);
}
登入後複製
總結

相較於傳統的LESS 、SASS 等預處理器變量,CSS 變數的優點在於:

  • CSS 變數的動態性,能在頁面運行時更改,而傳統預處理器變數編譯後無法更改

  • CSS 變數能夠繼承,能夠組合使用,具有作用域

  • 配合Javascript 使用,可以方便的從JS 中讀/寫

#相關文章:

PHP的學習- -可變變量,--可變變量

php 學習日誌- 變量作用域,變量

相關影片:

#極客學院CSS及CSS3影片教學

以上是什麼是CSS變數? CSS變數的學習:CSS變數的繼承&作用域的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

vue中怎麼用bootstrap vue中怎麼用bootstrap Apr 07, 2025 pm 11:33 PM

在 Vue.js 中使用 Bootstrap 分為五個步驟:安裝 Bootstrap。在 main.js 中導入 Bootstrap。直接在模板中使用 Bootstrap 組件。可選:自定義樣式。可選:使用插件。

HTML,CSS和JavaScript的角色:核心職責 HTML,CSS和JavaScript的角色:核心職責 Apr 08, 2025 pm 07:05 PM

HTML定義網頁結構,CSS負責樣式和佈局,JavaScript賦予動態交互。三者在網頁開發中各司其職,共同構建豐富多彩的網站。

了解HTML,CSS和JavaScript:初學者指南 了解HTML,CSS和JavaScript:初學者指南 Apr 12, 2025 am 12:02 AM

WebDevelovermentReliesonHtml,CSS和JavaScript:1)HTMLStructuresContent,2)CSSStyleSIT和3)JavaScriptAddSstractivity,形成thebasisofmodernWebemodernWebExexperiences。

bootstrap怎麼設置框架 bootstrap怎麼設置框架 Apr 07, 2025 pm 03:27 PM

要設置 Bootstrap 框架,需要按照以下步驟:1. 通過 CDN 引用 Bootstrap 文件;2. 下載文件並將其託管在自己的服務器上;3. 在 HTML 中包含 Bootstrap 文件;4. 根據需要編譯 Sass/Less;5. 導入定製文件(可選)。設置完成後,即可使用 Bootstrap 的網格系統、組件和样式創建響應式網站和應用程序。

bootstrap怎麼寫分割線 bootstrap怎麼寫分割線 Apr 07, 2025 pm 03:12 PM

創建 Bootstrap 分割線有兩種方法:使用 標籤,可創建水平分割線。使用 CSS border 屬性,可創建自定義樣式的分割線。

bootstrap怎麼插入圖片 bootstrap怎麼插入圖片 Apr 07, 2025 pm 03:30 PM

在 Bootstrap 中插入圖片有以下幾種方法:直接插入圖片,使用 HTML 的 img 標籤。使用 Bootstrap 圖像組件,可以提供響應式圖片和更多樣式。設置圖片大小,使用 img-fluid 類可以使圖片自適應。設置邊框,使用 img-bordered 類。設置圓角,使用 img-rounded 類。設置陰影,使用 shadow 類。調整圖片大小和位置,使用 CSS 樣式。使用背景圖片,使用 background-image CSS 屬性。

bootstrap按鈕怎麼用 bootstrap按鈕怎麼用 Apr 07, 2025 pm 03:09 PM

如何使用 Bootstrap 按鈕?引入 Bootstrap CSS創建按鈕元素並添加 Bootstrap 按鈕類添加按鈕文本

bootstrap怎麼調整大小 bootstrap怎麼調整大小 Apr 07, 2025 pm 03:18 PM

要調整 Bootstrap 中元素大小,可以使用尺寸類,具體包括:調整寬度:.col-、.w-、.mw-調整高度:.h-、.min-h-、.max-h-

See all articles