詳解web如何改變主題配色方法示例
正文

自從蘋果系統(tǒng)支持了暗色主題之后,越來越多的網(wǎng)站開始支持暗色模式,來改善用戶夜晚使用網(wǎng)站的舒適度,那么一般都是如何處理的呢.
在開始一個項(xiàng)目時,我們通常會將用到的主題色,和一些全局配置,通過css變量定義在根元素,注意,變量必須以"--"開頭
:root {
--color-primary: white;
}
以下是可以改變主題的幾種方式
一、通過在根元素定義選擇器來改變主題
定義class
html.dark {
--docsearch-modal-background: #23272f;
--docsearch-hit-background: #23272f;
--docsearch-highlight-color: #149eca;
}
<html class="dark"></html>
定義dateset
:root[data-theme='dark'] {
--color-primary: #3C7EFF;
}
<html date-theme='dark'></html>
// 設(shè)置頁面根元素的 dataset const doc = document.documentElement; const newTheme = theme === 'light' ? 'dark' : 'light'; doc.dataset.theme = newTheme;
自定義標(biāo)簽屬性
:root[arco-theme='dark'] {
--color-primary: #3C7EFF;
}
<html arco-theme='dark'></html>
// 設(shè)置頁面根元素的 dataset
const [theme, setTheme] = useStorage('arco-theme', 'light');
const doc = document.documentElement;
doc.setAttribute('arco-theme', 'dark');
樣式一般定義在:root中,當(dāng)然也可以定義在html、body標(biāo)簽中,目的是為了能夠在全局使用
二、通過prefers-color-scheme來改變主題
通過媒體查詢,獲取系統(tǒng)主題,來改變網(wǎng)站主題. scheme有三個可選值,分別是light、dark 和 no-preference,代表著亮色主題、暗色主題和未知,大部分瀏覽器都支持該特性,可以在這里查看 caniuse.
:root {
--font-color: black;
}
@media (prefers-color-scheme: dark) {
:root {
--font-color: white;
}
}
獲取主題色
const theme = window.matchMedia('(prefers-color-scheme: dark)');
if (theme.matches) { } else { }
通過通知,監(jiān)聽主題色的變化
// handleChange(event) { if (event.matches) {} else {} }
const theme = window.matchMedia('(prefers-color-scheme: dark)');
theme.addListener(handleChange);
theme.removeListener(handleChange);
三、通過顏色反轉(zhuǎn)來改變主題
這種filter方式,就是所謂的一行代碼改變主題的方式,加入如下代碼即可,不過這種一刀切的方式不夠靈活,有些元素不需要顏色反轉(zhuǎn),還需要再加一層hue-rotate(180deg)反轉(zhuǎn)回來,不推薦使用.
// 顏色反轉(zhuǎn),色調(diào)反轉(zhuǎn) filter: invert(1) hue-rotate(180deg);
特殊紀(jì)念日,網(wǎng)站置灰,也是用filter來實(shí)現(xiàn)的
filter: grayscale(1);
總結(jié)
以上就是三種改變主題的方法,不過通常我們做法是使用dateset + media(prefers-color-scheme)結(jié)合的方式來處理. 優(yōu)先使用dateset,如果用戶沒有設(shè)置dateset,就使用media來獲取系統(tǒng)主題,然后設(shè)置即可,更多關(guān)于web改變主題配色的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
js編寫trim()函數(shù)及正則表達(dá)式的運(yùn)用
js中本身是沒有trim函數(shù)的,不過你可以自己寫一個,下面的實(shí)現(xiàn)方法是用到了正則表達(dá)式,效率不錯,并把這三個方法加入String對象的內(nèi)置方法中去2013-10-10
JavaScript實(shí)現(xiàn)圖像壓縮的方法
使用 JavaScript 和 canvas 壓縮圖像可以使用 canvas 的 drawImage() 方法將圖像繪制到 canvas 上,然后使用 toDataURL() 方法將圖像轉(zhuǎn)換為 Data URL 形式,這篇文章主要介紹了JavaScript 圖像壓縮的相關(guān)資料,需要的朋友可以參考下2023-01-01
javascript阻止scroll事件多次執(zhí)行的思路及實(shí)現(xiàn)
阻止scroll事件多次執(zhí)行主要是為了解決一些常見網(wǎng)頁特效在js解析時預(yù)期與效果不同,感興趣的朋友可以了解下2013-11-11
原生JS實(shí)現(xiàn)的多個彩色小球跟隨鼠標(biāo)移動動畫效果示例
這篇文章主要介紹了原生JS實(shí)現(xiàn)的多個彩色小球跟隨鼠標(biāo)移動動畫效果,涉及javascript事件響應(yīng)、頁面元素屬性動態(tài)修改及隨機(jī)數(shù)應(yīng)用等相關(guān)操作技巧,需要的朋友可以參考下2018-02-02
javascript跟隨滾動效果插件代碼(javascript Follow Plugin)
這篇文章介紹了javascript跟隨滾動效果插件代碼(javascript Follow Plugin),有需要的朋友可以參考一下2013-08-08
JS+JSP通過img標(biāo)簽調(diào)用實(shí)現(xiàn)靜態(tài)頁面訪問次數(shù)統(tǒng)計的方法
這篇文章主要介紹了JS+JSP通過img標(biāo)簽調(diào)用實(shí)現(xiàn)靜態(tài)頁面訪問次數(shù)統(tǒng)計的方法,基于JavaScript動態(tài)調(diào)用jsp頁面通過對TXT文本文件的讀寫實(shí)現(xiàn)統(tǒng)計訪問次數(shù)的功能,需要的朋友可以參考下2015-12-12
動態(tài)載入/刪除/更新外部 JavaScript/Css 文件的代碼
動態(tài)載入/刪除/更新外部 JavaScript/Css 文件的代碼2010-07-07

