摘要:你曾想過在頁面加載過后去修改或的變量值么我曾經(jīng)嘗試過但并沒有成功因?yàn)楫?dāng)預(yù)處理的代碼編譯成了它的變量就不再是變量了然而自定義屬性就沒有這樣的限制在該系列的文章中我曾提及過自定義屬性它最牛扳的特性就是它的動態(tài)性它的強(qiáng)大我們一眼就能對比出來預(yù)處理
不用 JS 來更改 CSS 自定義屬性你曾想過在頁面加載過后去修改 Sass 或 Less 的變量值么? 我曾經(jīng)嘗試過, 但并沒有成功, 因?yàn)?b>當(dāng)預(yù)處理的代碼編譯成了 CSS, 它的變量就不再是變量了, 然而, 自定義屬性就沒有這樣的限制.
在該系列的文章中, 我曾提及過自定義屬性它最牛扳的特性就是它的動態(tài)性. 它的強(qiáng)大我們一眼就能對比出來, 預(yù)處理變量在編譯后就成了固定值, 而自定義屬性可以在頁面加載后繼續(xù)更改變量的值.
本篇文章我們將一起來看如何通過用戶交互和 JavaScipt 來做一些帥氣的改變.
大多數(shù)的動態(tài)特效貌似多多少少都需要點(diǎn) JavaScipt, 所以, 我們就從一個簡單的例子入手, 使用自定義屬性改變 :hover 的效果
我們給一個 div 一個 width 和 height, 然后, 定義一個值為 #ccc 的自定義屬性 background. 接著, 我們用 var 函數(shù) 設(shè)置 background-color, 并給它 1s 的 transition
div { width: 15em; height: 15em; --background: #ccc; background-color: var(--background); transition: background-color 1s; }
為了改變 background color, 我們再次定義 --background 的值
div:hover { --background: #cce; }
雖然, 上面的例子不用自定義屬性也可以輕松的實(shí)現(xiàn), 但如果我們的改變增多, 使用自定義屬性書寫的代碼明顯要更干凈, 更可讀
使用 JS 來更改 CSS 自定義屬性用 JavaScipt 來更改自定義屬性的值將會變的特別有趣.
首先, 我們必須要知道如何獲取自定義屬性的值, 和如何設(shè)置
獲取自定義屬性的值要獲取自定義屬性的值, 你要知道兩個 JavaScipt 函數(shù): window.getComputedStyle 和 getPropertyValue, 前者可以獲取元素所有 CSS 屬性的值, 后者可以獲取特定屬性的值.
let style = window.getComputedStyle(element, [pseudoElt]); var value = style.getPropertyValue(property);
如果你是 JavaScipt 方向, 那么上面的代碼你肯定不陌生. 如果你并不熟悉, 可以參考下面的示例
首先, 我們使用 :root 定義一個全局變量
:root { --color: red }
接著, 我們使用 getComputedStyle() 和 getPropertyValue() 方法來讀取 color 的值.
var styles = getComputedStyle(document.documentElement); // 獲取 root 的樣式 var colorValue = styles.getPropertyValue("--color"); // 獲取 --color 的值
現(xiàn)在 colorValue 的值就為 --color 的值, 不信你可以在控制臺中打印
console.log(colorValue); // red如何設(shè)置自定義屬性的值
要設(shè)置自定義屬性的值, 你要用到 style.setProperty 這個方法
style.setProperty(propertyName, value, priority);
setProperty 有三個參數(shù), 前兩個是屬性名稱和屬性的值, 其中, 屬性值可以為空, 第三個 priority 是可選的, 允許你設(shè)置 important, CSS 準(zhǔn)則建議, 盡量不設(shè)置該屬性
設(shè)置一個新值比讀取一個值更簡單, 因?yàn)槟悴恍枰獙⒅当4娴阶兞恐?
document.documentElement.style.setProperty("--color", "green");
事實(shí)上, 在設(shè)置新值前, 該屬性可以不存在. 你可以在 setProperty中初始化自定義屬性.
移除自定義屬性還有一個 removeProperty() 方法可以移除自定義屬性, 如果你不想要了的話
var oldValue = style.removeProperty(property);使用 Color Picker 更改顏色值
接下來, 我們就一起來實(shí)踐一下. 為了便于大家理解, 我們不做忒復(fù)雜.
首先, 我們創(chuàng)建一個空的 div, 用于顯示用戶輸入的顏色
接下來, 我們在全局創(chuàng)建一個 --background 自定義屬性, 初始化為 #ccc, 給 div 一個 width, height 和 margin, 用 var() 函數(shù)給 background 賦值, 然后簡單設(shè)置 input 的樣式.
:root { --background: #ccc; } div { width: 20em; height: 20em; margin: 1em auto; background: var(--background); } input { display: block; width: 10em; margin: 1em auto; }
最后, 我們使用 document.querySelector() 獲取 input 元素, 給該元素添加一個事件監(jiān)聽器, 監(jiān)聽用戶輸入的變化, 然后用 setProperty 將輸入的值賦給自定義屬性 --background.
var colorInput = document.querySelector("#div-bkgd"); colorInput.addEventListener("change", function() { document.documentElement.style.setProperty("--background", this.value); });
大功告成, 你可以在復(fù)制代碼在瀏覽器中運(yùn)行查看效果. 另外值得注意的是, color input 并不支持所有瀏覽器, 像在 IE 和 Safari 中就無法工作.
額外的示例為了便于大家理解, 上面的例子都比較簡單, 下面提供了一些比較復(fù)雜的應(yīng)用, 幫助大家快速掌握.
CSS 變量 demo
Using CSS custom properties for theme previews
總結(jié)將自定義屬性和 JavaScipt 或其他腳本語言結(jié)合, 你會瞬間墜入自定義屬性的愛河
原文鏈接: CSS Custom Properties—Dynamic Changes With And Without Javascript (Steven Bradley)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/112361.html
摘要:前言本文主要介紹屬性事件和插槽這三個基礎(chǔ)概念使用方法及其容易被忽略的一些重要細(xì)節(jié)。至于如何改變,我們接下去詳細(xì)介紹單向數(shù)據(jù)流這個概念出現(xiàn)在組件通信。比如上例中在子組件中修改父組件傳遞過來的數(shù)組從而改變父組件的狀態(tài)。的一個核心思想是數(shù)據(jù)驅(qū)動。 前言 本文主要介紹屬性、事件和插槽這三個vue基礎(chǔ)概念、使用方法及其容易被忽略的一些重要細(xì)節(jié)。如果你閱讀別人寫的組件,也可以從這三個部分展開,它們...
摘要:非常的龐大,而且它是完全為設(shè)計(jì)而生的動效庫。它運(yùn)行于純粹的之上,是目前最強(qiáng)健的動畫資源庫之一。可能是創(chuàng)建滾動特效最好用的工具,它支持大量的瀏覽器,只要它們支持和特性。可以通過安裝吊炸天了,接近現(xiàn)實(shí)生活中的物理運(yùn)動碰撞慣性動畫庫。 收集日期為2019-02-28,★代表當(dāng)時的該項(xiàng)目在github的star數(shù)量 Animate.css 56401 ★ 一個跨瀏覽器的動效基礎(chǔ)庫,是許多基礎(chǔ)動...
摘要:希望在做所有事情之前,操作文檔。不受層級限制子選擇器在給定的父元素下匹配所有子元素。相鄰選擇器匹配所有緊接在元素后的元素。判斷當(dāng)前對象中的某個元素是否包含指定類名,包含返回,不包含返回下標(biāo)過濾器精確選出指定下標(biāo)元素獲取第個元素。 原文鏈接 http://blog.poetries.top/2016... 首先,來了解一下jQuery學(xué)習(xí)的整體思路 showImg(https://seg...
摘要:然而問題是,這個法則在導(dǎo)航條的主體是可行的但是子選單因?yàn)榍懊嫣岬降娜龑忧短讟?gòu)造圓角,已經(jīng)無法減少嵌套了,同時還得考慮到子選單也是嵌套在導(dǎo)航條里的啊。。。同理,反過來進(jìn)入子選單時自然就用來抵消達(dá)到篩選的目的。 0x1setTimeout應(yīng)用 實(shí)現(xiàn)效果:4-01setTimeout應(yīng)用 又見導(dǎo)航條,先看下css,這里用的是雪碧圖背景做出圓角的效果,雖然是經(jīng)典的方法、兼容性好,但這種代碼寫起...
摘要:預(yù)解析聲明告知瀏覽器在全局作用域中有一個變量名為的變量。執(zhí)行代碼的就是棧內(nèi)存,作用域也是棧內(nèi)存。關(guān)鍵字在中主要研究都是函數(shù)中的中的代表的是當(dāng)前行為執(zhí)行的主體方法,函數(shù),事件中的上下文代表的是當(dāng)前行為執(zhí)行的環(huán)境區(qū)域例如小明在沙縣小吃吃蛋炒飯。 基本認(rèn)識 數(shù)據(jù)類型 基本數(shù)據(jù)類型 string, number, null, boolean, undefined 引用數(shù)據(jù)類型 object: ...
閱讀 2847·2021-11-25 09:43
閱讀 2499·2021-10-09 09:44
閱讀 2810·2021-09-22 15:49
閱讀 2585·2021-09-01 11:43
閱讀 2552·2019-08-30 14:16
閱讀 473·2019-08-29 17:24
閱讀 3028·2019-08-29 14:00
閱讀 1393·2019-08-29 13:05