CSS Variables

来源:https://www.cnblogs.com/ccyinghua/archive/2018/06/02/9124549.html
-Advertisement-
Play Games

CSS原生變數(CSS自定義屬性) 示例地址:https://github.com/ccyinghua/Css-Variables 一、css原生變數的基礎用法 變數聲明使用兩根連詞線"--"表示變數,"$color"是屬於Sass的語法,"@color"是屬於Less的語法,為避免衝突css原生變 ...


CSS原生變數(CSS自定義屬性)

示例地址:https://github.com/ccyinghua/Css-Variables

一、css原生變數的基礎用法

變數聲明使用兩根連詞線"--"表示變數,"$color"是屬於Sass的語法,"@color"是屬於Less的語法,為避免衝突css原生變數使用"--"

// 聲明變數
--color:#000;

// 讀取變數
var(--color)

註:
1、變數聲明不能包含$,[,^,(,%等字元,普通字元局限在只要是“數字[0-9]”“字母[a-zA-Z]”“下劃線_”和“短橫線-”這些組合,但是可以是中文,日文或者韓文 
2、變數的值可以是顏色、字元串、多個值的組合等

示例:

<h3>css variables基礎使用</h3>
<div class="btn_box">
    <button type="button" class="login_btn">登錄</button>
</div>
/* css variables基礎使用 */
:root{
    --content1:"abc";
    --content2:"efg";
    --width:calc(100px + 200px);
    --btn-bg:#279cff;
    --字體:18px;
}
.btn_box:before{
    content:var(--content1)' with add';
    display:block;
    line-height: 50px;
}
.btn_box:after{
    content:var(--content1)','var(--content2);
    display:block;
    line-height: 50px;
}
.login_btn{
    width:var(--width);
    height:50px;
    border-radius:30px;
    border:0;
    background: var(--btn-bg);
    box-shadow: 0 5px 5px rgba(39,156,255,.42);
    text-align: center;
    font-size:var(--字體);
    line-height: 50px;
    color:#fff;
    cursor:pointer;
    outline:none;
}

 

二、作用域

1、變數是遵循CSS語法的優先順序高低的 Id > class > 標簽 > *
2、註意並無!important這種用法;
3、如果變數所在的選擇器和使用變數的元素沒有交集,是沒有效果的。

<div>藍色</div>
<div class="divbox">綠色</div>
<div class="divbox" id="alert">紅色</div>
:root { --color: blue; }
.divbox { --color: green; }
#alert { --color: red; }
div{
    color: var(--color);
    width:300px;
    line-height: 50px;
    text-align: center;
}

三、響應式

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

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

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

四、註意事項

1、屬性名(例:width/height/margin....等)不可以走變數

.divbox {
    --side: margin-top;
    /* 無效 */
    var(--side): 20px;
}

2、var()的完整的寫法是"var(<自定義屬性名> [, <預設值 ]?)",在變數的名字後面可以有一個預設值,如果引用的變數沒有定義(註意,僅限於沒有定義),則使用後面的值作為元素的屬性值

body {
    background:var(--bg,skyblue);
}

3、如果變數值是不合法的,例如下麵設置背景色background只能是色值而不能是像素,則使用背景色屬性的預設值代替。

body {
  --bg: 20px;
  background-color: #369;
  background-color: var(--bg, #cd0000);
}

等同於

body {
    --bg: 20px;
    background-color: #369;
    background-color: transparent;
}

4、CSS變數設置數值

(1)

h3 {
  --size: 30;   
  font-size: var(--size)px;
}

結果h3元素的字體大小就是本身的預設大小 

(2)

h3 {
  --size: 30px;   
  font-size: var(--size);
}

等於
h3 {
    font-size:30px;
}

(3)使用CSS3 calc()計算:

h3 {
  --size: 30;   
  font-size: calc(var(--size) * 1px);
}
等於
h3 {
    font-size:30px;
}

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

/* 無效 */
.divbox {
    --size: '30px';
    font-size: var(--size);
}

/* 有效 */
.divbox {
    --size: 30px;
    font-size: var(--size);
}

6、進行calc()運算時,最好能提供預設值: calc(var(--base-line-height, 0) * 1rem)

7、不能作為媒體查詢值使用:

@media screen and (min-width: var(--desktop-breakpoint) {})

8、圖片地址,如url(var(--image-url)) ,不會生效

五、相容性處理

檢測瀏覽器是否支持CSS自定義屬性的方法。

/*css*/

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

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

if (window.CSS && window.CSS.supports && window.CSS.supports('--a', 0)) {
    alert('CSS properties are supported');
} else {
    alert('CSS properties are NOT supported');
}

六、JS操作變數

CSS 變數可以和 JS 互相交互

:root{
  --testMargin:75px;
}
//  讀取
var root = getComputedStyle(document.documentElement);
var cssVariable1 = root.getPropertyValue('--testMargin').trim();
console.log(cssVariable1); // '75px'
 
// 寫入
document.documentElement.style.setProperty('--testMargin', '100px');
var cssVariable2 = root.getPropertyValue('--testMargin').trim();
console.log(cssVariable2);  // '100px'

// 刪除
document.documentElement.style.removeProperty('--testMargin');
var cssVariable3 = root.getPropertyValue('--testMargin').trim();
console.log(cssVariable3); // '75px'

javascript可以把任意值存入css變數,可以讀取變數的值,實現javascript與css的通信。

七、CSS variables與預處理器的不同

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文件一起使用。

4、總結

  • 相較於傳統的 LESS 、SASS 等預處理器變數,CSS 變數的優點在於:
  • CSS 變數的動態性,能在頁面運行時更改,而傳統預處理器變數編譯後無法更改
  • CSS 變數能夠繼承,能夠組合使用,具有作用域
  • 配合 Javascript 使用,可以方便的從 JS 中讀/寫

八、CSS原生變數的相容性

https://caniuse.com/#search=css%20var

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 截取字元串一般是用js或者後臺語言來實現,其實使用CSS也是可以實現此效果的。 代碼實例如下: 特別註意的是:不能夠省略white-space:nowrap和overflow:hidden,否則截取字元串無效。 原文地址是:CSS3截取字元串實例代碼一章節。 涉及到只是點:CSS3教程。 特別註意的 ...
  • 什麼是嚴格模式? 使JS編碼更加規範化的模式,消除Javascript語法的一些不合理、不嚴謹之處,減少一些怪異行為 怎麼使用? 直接添加下麵的這句字元串就可以了,這種語法可以向後相容,如果是不支持嚴格模式的javascript引擎,就會直接當成是一個未賦值的字元串字面量,會直接忽略,支持的引擎就會 ...
  • #######################################################################################介紹Node.js EventEmitterNode.js 所有的非同步 I/O 操作在完成時都會發送一個事件到事件隊列。Nod ...
  • 1 2 3 4 5 6 7 8 Document 9 10 11 12 13 14 第1個li 15 16 17 第2個li 18 19 20 第3個li ... ...
  • 1 const readline = require('readline-sync')//引用readline-sync 2 //用戶名,密碼 3 let user = [{ 4 username: 'yang', 5 password: 123 6 }, { 7 username: 'kai', ... ...
  • 對於剛剛接觸前端開發或者剛開始學習javascript的同學來說,js能用來做些什麼,它是如何誕生的,它的組成結構是怎麼的,在這些問題上可能都只有一些模糊的概念, js的入門篇 就是希望可以從0開始深入淺出的聊一聊JavaScript這門語言,從而讓剛入門的同學對其有個更加清晰和深入的理解。 首先還 ...
  • 1. break 語句可用於跳出迴圈。 break 語句跳出迴圈後,會繼續執行該迴圈之後的代碼(如果有的話): 2. continue 語句中斷迴圈中的迭代,如果出現了指定的條件,然後繼續迴圈中的下一個迭代。 3. continue 語句(帶有或不帶標簽引用)只能用在迴圈中。 break 語句(不帶 ...
  • 事件委托主要用於一個父容器下麵有很多功能相仿的子容器,這時候就需要將子容器的事件監聽交給父容器來做。父容器之所以能夠幫子容器監聽其原理是事件冒泡,對於子容器的點擊在冒泡時會被父容器捕獲到,然後用e.target來判斷到底是哪個子容器觸發了事件 示例代碼: 點擊第二個li,console輸出<li>2 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...