CSS變量和@property

CSS變量 var()

CSS 變量是由CSS作者定義的實體,其中包含要在整個文檔中重復使用的特定值。使用自定義屬性來設置變量名,并使用特定的 var() 來訪問。(比如 color: var(--main-color);)。

基本用法

CSS變量定義的作用域只在定義該變量的元素及其后代元素中有效。如果需要在整個頁面中使用該變量,可以將其定義在:root中

聲明一個局部變量:

element {--main-bg-color: brown;
}

使用一個局部變量:

element {background-color: var(--main-bg-color);
}

Mdn Web Docs

聲明一個?全局?CSS 變量:

:root {--global-color: #666;--pane-padding: 5px 42px;
}

使用一個?全局?CSS 變量:

.demo{color: var(--global-color);}

開始使用CSS變量

讓我們從這個簡單的例子開始,擁有不同類名的元素有相同的顏色:

.one {color: white;background-color: brown;margin: 10px;width: 50px;height: 50px;display: inline-block;
}.two {color: white;background-color: black;margin: 10px;width: 150px;height: 70px;display: inline-block;
}
.three {color: white;background-color: brown;margin: 10px;width: 75px;
}
.four {color: white;background-color: brown;margin: 10px;width: 100px;
}.five {background-color: brown;
}

把它應用到下面這段HTML:

<div><div class="one"></div><div class="two">Text <span class="five">- more text</span></div><input class="three"><textarea class="four">Lorem Ipsum</textarea>
</div>

注意CSS中重復的地方,brown的背景色作用在不同的元素上面。我們可以將背景色定義在更高的層級,然后通過CSS繼承解決這個問題。在某些情況下,這種方法不一定可行。定義一個變量在:root偽類上,使用變量來減少重復的代碼

:root {--main-bg-color: brown;
}.one {color: white;background-color: var(--main-bg-color);margin: 10px;width: 50px;height: 50px;display: inline-block;
}.two {color: white;background-color: black;margin: 10px;width: 150px;height: 70px;display: inline-block;
}
.three {color: white;background-color: var(--main-bg-color);margin: 10px;width: 75px;
}
.four {color: white;background-color: var(--main-bg-color);margin: 10px;width: 100px;
}.five {background-color: var(--main-bg-color);
}

只需要規范地聲明所需的屬性,就能得到和上面例子相同的結果

CSS變量的繼承

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

<div class="one"><div class="two"><div class="three"></div><div class="four"></div><div>
</div>

定義下面的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變量覆蓋的默認值

在JS中修改變量

// 獲取根元素
var r = document.querySelector(':root');// 創建獲取變量值的函數
function myFunction_get() {// Get the styles (properties and values) for the rootvar rs = getComputedStyle(r);// Alert the value of the --blue variablealert("The value of --blue is: " + rs.getPropertyValue('--blue'));
}// 創建設置變量值的函數
function myFunction_set() {// Set the value of variable --blue to another value (in this case "lightblue")r.style.setProperty('--blue', 'lightblue');
}

在Vue中配合數據動態修改css變量

<template><div><span v-for="item in list" :style="{'--text': item.text, '--color': item.color}"></span></div>
</template><script>
export default {name: '',components: {},props: {},data() {return {list: [{ text: '"中"', color: 'red' },{ text: '"華"', color: 'orange' },{ text: '"人"', color: 'yellow' },{ text: '"民"', color: 'orange' },{ text: '"共"', color: 'green' },{ text: '"和"', color: 'cyan' },{ text: '"國"', color: 'blue' }]};}
};
</script><style lang="scss" scoped>
span::after {content: var(--text);background-color: var(--color);
}
</style>

@property

使用模板:

  • @property --property-name 中的 --property-name 就是自定義屬性的名稱,定義后可在 CSS 中通過 var(--property-name) 進行引用

  • syntax:該自定義屬性的語法規則,也可以理解為表示定義的自定義屬性的類型

    • 支持的 syntax 語法類型:

      • length
      • number
      • percentage
      • length-percentage
      • color
      • image
      • url
      • integer
      • angle
      • time
      • resolution
      • transform-list
      • transform-function
      • custom-ident (a custom identifier string)
    • syntax 中的?+#|?符號

      • syntax: '<color>#' :接受逗號分隔的顏色值列表 --img-url:url(img01.png),url(img02.png);
      • syntax: '<length>+' :接受以空格分隔的長度值列表 --padding:0 10px;
      • syntax: '<length> | <length>+':接受單個長度或者以空格分隔的長度值列表
      • syntax: '<percentage> | <angle>';?使用百分比也可以使用角度
  • inherits:是否允許繼承

  • initial-value:初始值

<style>
@property --property-name {syntax: '<color>';inherits: false;initial-value: #fff;
}p {color: var(--property-name);
}
</style>

在?script?中使用?CSS.registerProperty

<script>
CSS.registerProperty({name: "--property-name",syntax: "<color>",inherits: false,initialValue: "#c0ffee"
});
</script>

示例

使用 linear-gradient 實現 transition 效果,但是 transition 并不會對 linear-gradient 生效

原代碼

    <style>.line {margin: 0 auto;width: 300px;height: 24px;border: 1px solid rgba(128, 128, 128, 0.14);border-radius: 12px;box-sizing: border-box;background: linear-gradient(to right, #00ffc8 0, #ffffff 0);transition: all 0.3s;&:hover {background: linear-gradient(to right, #00ffc8 0, #ffffff 260px);}}</style><div class="line"></div>

使用 @property 修改后

    <style>@property --l {syntax: "<length>";inherits: false;initial-value: 0;}.line {--l: 0px;margin: 0 auto;width: 300px;height: 24px;border: 1px solid hsla(0, 0%, 50%, 0.137);border-radius: 12px;box-sizing: border-box;background: linear-gradient(to right, #00ffc8 0, #ffffff var(--l));transition: --l 0.3s;&:hover {--l: 260px;}}</style><div class="line"></div>


CSS變量和@property - 掘金

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/718990.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/718990.shtml
英文地址,請注明出處:http://en.pswp.cn/news/718990.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Kotlin】函數

1 常規函數 1.1 無參函數 fun main() {myFun() }fun myFun() {println("myFun") // 打印: myFun } 1.2 有參函數 1&#xff09;常規調用 fun main() {myFun("myFun") // 打印: myFun }fun myFun(str: String) {println(str) } 2&#xff09;形參指定默…

根據條件查詢下載Excel表單(Java+Vue 及 Vue 兩種方式)

目錄 前言1. 基本知識2. 純前端導入導出&#xff08;Vue&#xff09;3. 前后端&#xff08;Vue Java&#xff09; 前言 如果想要下載好看的Excel推薦閱讀&#xff1a; 詳細講解Java使用EasyExcel函數來操作Excel表&#xff08;附實戰&#xff09;詳細講解Java使用HSSFWorkbo…

23.基于springboot + vue實現的前后端分離-在線旅游網站系統(項目 + 論文PPT)

項目介紹 本旅游網站系統采用的數據庫是MYSQL &#xff0c;使用 JSP 技術開發&#xff0c;在設計過程中&#xff0c;充分保證了系統代碼的良好可讀性、實用性、易擴展性、通用性、便于后期維護、操作方便以及頁面簡潔等特點。 技術選型 后端: SpringBoot Mybatis 數據庫 : MyS…

RK android11 user打開adb調試功能

目錄build/make/core diff --git a/core/main.mk b/core/main.mk --- a/core/main.mk b/core/main.mk -280,7 280,7 ifneq (,$(user_variant)) ADDITIONAL_DEFAULT_PROPERTIES security.perf_harden1 ifeq ($(user_variant),user) - ADDITIONAL_DEFAULT_PROPER…

機器學習:原理、應用與未來展望

第一章 是什么 機器學習&#xff08;Machine Learning&#xff09;是一門跨學科的學科&#xff0c;它使用計算機模擬或實現人類學習行為&#xff0c;通過不斷地獲取新的知識和技能&#xff0c;重新組織已有的知識結構&#xff0c;從而提高自身的性能。機器學習涉及多個學科&am…

wordpress 開源主題

海外就醫wordpress主題 出國看病、海外就醫是越來越多中產家庭的選擇&#xff0c;此wordpress主題適合做相關業務的公司官網。 https://www.jianzhanpress.com/?p5220 防護wordpress外貿主題 個人防護器具wordpress外貿主題&#xff0c;適合做勞動保護的外貿公司使用。 ht…

微信小程序中使用特使字體

1、首先下載字體文件 推薦幾個常用下載字體的網站 https://font.chinaz.com/zhongwenziti.html https://www.hellofont.cn/ 2、轉換字體 使用下面這個網站進行字體轉換 https://transfonter.org/ 點擊add fonts 按鈕進行上傳剛剛下載的字體文件選擇formats格式&#xff1a;可…

關于CSS 優先級布局應用的教程

在前端開發中&#xff0c;CSS 的優先級布局是非常重要的一部分。通過合理地應用 CSS 優先級&#xff0c;我們可以更加靈活地控制頁面的布局和樣式。本教程將向您介紹如何利用 CSS 優先級進行布局&#xff0c;并通過實例展示其應用。 1. 了解 CSS 優先級 在 CSS 樣式表中&…

【生活】程序人生之日常生活篇(附塑料分類標志 常用日常好物)

程序員生活指南之 【生活】程序人生之日常生活篇&#xff08;附塑料分類標志 & 常用日常好物&#xff09; 文章目錄 1、關于本文2、居家相關2.1 蟑螂大戰2.2 房間收納&#xff08;寢室&#xff0c;租房&#xff0c;家里&#xff09;2.3 智能家居2.4 臺燈選購2.5 塑料分類標…

深圳mes系統在智能制造中的重要意義

深圳mes系統在生產中具有重要意義&#xff0c;主要體現在以下幾個方面&#xff1a; 生產計劃可視化和優化&#xff1a;MES系統通過大量收集和分析工廠內部的實時數據&#xff0c;將數據可視化展示給運營和管理層&#xff0c;使企業決策者能夠更加有效地進行生產計劃的制定和…

高級優化理論與方法(二)

高級優化理論與方法&#xff08;二&#xff09; 上節回顧ConstrainedUnconstrainedFONCSONCexample 這節課的內容SOSC定理敘述證明例子 One-dimensional Search MethodsIterative MethodGolden Section SearchMethodIssues方法推理算法描述TimeExample Fibonacci MethodBisecti…

教師觀包括哪些內容是什么

站在講臺上的老師&#xff0c;除了教你知識&#xff0c;還有哪些不為人知的角色和面孔&#xff1f;讓我們一起揭開教師觀的神秘面紗&#xff0c;看看老師們的“千面人生”。 現代教師已不再是單純的知識傳遞者&#xff0c;他們更像是學習旅程中的導游和指南針。他們引導學生發現…

嵌入式Qt 對話框及其類型 QDialog

一.對話框的概念 對話框是與用戶進行簡短交互的頂層窗口。 QDialog是Qt中所有對話框窗口的基類。 QDialog繼承與QWidfet是一種容器類型的組件。 QDialog的意義&#xff1a; QDialog作為一種專業的交互窗口而存在。 QDialog不能作為子部部件嵌入其他容器中。 QDialog是定制…

反函數的理解|反函數到底“反”的是什么?什么是反函數?

理解 將 yex 函數圖像連同整個坐標系繞著 yx 旋轉 180 度&#xff0c;會變成下面的圖像 只是把圖像轉了一下&#xff0c;函數還是那個函數&#xff0c;還是 yex &#xff0c;此時橫軸變成了 y 軸&#xff0c;縱軸變成了 x 軸 根據習慣&#xff0c;一般把縱軸當作因變量、把橫軸…

如何在騰訊云輕量應用服務器上安裝Docker的詳細步驟是什么?

如何在騰訊云輕量應用服務器上安裝Docker的詳細步驟是什么&#xff1f; 登錄騰訊云輕量應用服務器&#xff1a;首先&#xff0c;需要登錄到騰訊云官方網站&#xff0c;并進入輕量應用服務器控制臺。 軟件源設置&#xff1a;在輕量應用服務器控制臺中選擇“更多”>“設置”&…

JavaScript實現的計時器效果

之前做過電商網站倒計時的效果&#xff0c;今天在倒計時的基礎上&#xff0c;把代碼修改了一下&#xff0c;改為計時器效果&#xff0c;實現了以下功能&#xff1a; 1.點擊“開始”后&#xff0c;按秒計時且“開始”文字變為“停止”&#xff1b; 2.點擊“停止”&#xff0c;計…

https【詳解】與http的區別,對稱加密,非對稱加密,證書,解析流程圖

http 和 https 的區別 http 是明文傳輸&#xff0c;敏感信息容易在傳輸過程中被劫持https http加密&#xff0c;劫持了也無法解密 https 用到的加密方式 https 同時使用了對稱加密和非對稱加密&#xff0c;之所以沒有全部使用非對稱加密&#xff0c;是因為非對稱加密的運算更加…

JavaScript:export 和 export default

文章目錄 exportexport defaultexport 和 export default都使用 在JavaScript ES6的模塊系統中&#xff0c;export 和 export default 都是用來導出模塊中對外可見的變量、函數、類或對象的語法&#xff0c;但是它們的作用和使用方式有所不同&#xff1a; export export 關鍵字…

四種垃圾回收算法

1.標記清除算法 該算法先標記&#xff0c;后清除&#xff0c;將所有需要回收的算法進行標記&#xff0c;然后清除&#xff1b;這種算法的缺點是&#xff1a;效率比較低&#xff1b;標記清除后會出現大量不連續的內存碎片&#xff0c;這些碎片太多可能會使存儲大對象會觸發GC回…

【設計模式】觀察者模式及函數式編程的替代C++

本文介紹觀察者模式以及使用函數式編程替代簡單的策略模式。 觀察者模式 觀察者模式是一種行為型設計模式&#xff0c;它定義了一種一對多的依賴關系&#xff0c;當一個對象的狀態發生改變時&#xff0c;其所有依賴者都會收到通知并自動更新。 當對象間存在一對多關系時&#…