在開發本身的小項目過程當中,臨時起意想作一個光暗主題切換,因而就開始各類查資料搗鼓,看看 less
怎麼辦,再找找 scss
怎麼整。偶然發現知乎上有一篇對國外大神文章的翻譯,介紹了使用 css
實現的主題切換。因而在本身的項目中動手試一試~javascript
知乎連接css
原文連接vue
css
自定義屬性--
開頭的屬性,另外 scss
是以 $
開頭,less
是以 @
開頭var()
使用變量:root
選擇器中定義, 能夠做用於全局文檔中的全部元素光暗主題配色參考
github
~java
// style/variable.css
/* 默認dark主題 */
:root {
--bg-color: #0d1117;
--text-color: #f0f6fc;
}
/* light主題 */
:root[theme='light'] {
--bg-color: #fff;
--text-color: #2c3e50;
}
複製代碼
// App.vue
#app {
/* 字體顏色 */
color: var(--text-color);
/* 背景顏色 */
background-color: var(--bg-color);
}
/* tips: 根據實際配置,我我的參考 github 作的是 hedaer 是保持顏色不變,只改變 content 部分 */
/* 使用方法一致 */
複製代碼
js
屬性切換switch
標籤的 change
事件切換document.documentElement
引用文檔的根元素 DOM
,即 <HTML>
元素theme
屬性達到切換 css
的目的// val: true - 暗, false - 光
const handleThemeChange = (val: Boolean) => {
if (!val) {
document.documentElement.setAttribute('theme', 'light')
} else {
document.documentElement.removeAttribute('theme')
}
}
複製代碼