获取关键数据修改目标元素样式达到换肤的效果;注意权值
关键数据可以来自:
同样的,修改目标元素的样式,可以通过修改:
说明:本节案例,重在关键数据的获取
获取某个元素的内联样式,修改另外一个元素的内联样式
<div id="red" style="background-color: #ff0f5b; --color: #ff0f5b" data-color='#ff0f5b'>red</div>
获取元素
let body = document.body let colorObj = document.querySelector('#color')
colorObj.addEventListener('click', () => { let color= colorObj.style.backgroundColor body.style.backgroundColor = color })
colorObj.addEventListener('click', (e) => { let color = e.target.style.getPropertyValue('background-color') body.style.backgroundColor = color })
colorObj.addEventListener('click', (e) => { let color = e.target.style.getPropertyValue('--color') body.style.backgroundColor = color })
colorObj.addEventListener('click', (e) => { let color = e.target.dataset.color body.style.backgroundColor = color })
指定不同的类而应用不同的样式
:root { --txt-color: #303133; --bg-color: #f1f1f1; --shadow-color: rgba(0, 0, 0, 0.1); } body.dark { --txt-color: #f1f1f1; --bg-color: #131313; --shadow-color: rgba(255, 255, 255, 0.1); }
单击时,切换主题类
btnTheme.addEventListener('click', () => { body.classList.toggle('dark') })
:root { --txt-color: #303133; --bg-color: #ffffff; } [data-theme="dark"] { --txt-color: #e5eaf3; --bg-color: #131313; }
默认是白天,单击/交互时,<html>添加主题属性,修改为暗夜模式
document.documentElement.setAttribute('data-theme', 'dark');
或:新增加一个变量,保存当前模式;根据当前模式切换主题;可以使用 本地存储 - localStorage 或远端保存用户选择;还可以使用特定设计,如 路径剪切 clip-path 实现过渡效果
document.documentElement.setAttribute('data-theme', isDarkMode.value ? 'dark' : 'light');
比较优雅且现代 - 只需要提供一套变量定义;修改少量关键变量即可实现
:root { --txt-color: #303133; --bg-color: #f1f1f1; --shadow-color: rgba(0, 0, 0, 0.1); }
btnTheme.addEventListener('click', () => { document.documentElement.style.setProperty('--txt-color', '#f1f1f1') document.documentElement.style.setProperty('--bg-color', '#303133') })
:root { --txt-color: #303133; --bg-color: #f1f1f1; --shadow-color: rgba(0, 0, 0, 0.1); } @media (prefers-color-scheme: dark) { :root { --txt-color: #f1f1f1; --bg-color: #131313; --shadow-color: rgba(255, 255, 255, 0.1); } }
更加全局,影响整个文档
可以用于应用全局样式,如字体大小、颜色主题等
在响应式设计中,有时会用 <html> 的类来控制全局的缩放或布局
影响 <body> 内的所有内容,不包括 <head> 部分
适用于页面内容的样式更改,如背景色、字体等
如果样式仅应用于页面可见区域,使用 <body> 可能更合适
html { --txt-color: #303133; --bg-color: #f1f1f1; --shadow-color: rgba(0, 0, 0, 0.1); } html.dark-theme { --txt-color: #f1f1f1; --bg-color: #131313; --shadow-color: rgba(255, 255, 255, 0.1); }
function toggleTheme() { /* html*/ document.documentElement.classList.toggle('dark-theme'); /* 或 body*/ document.body.classList.toggle('dark-theme'); }
/* light theme */ :root { --txt-color: #303133; --bg-color: #f1f1f1; --shadow-color: rgba(0, 0, 0, 0.1); } /* dark theme */ :root[data-theme="dark"] { --txt-color: #f1f1f1; --bg-color: #131313; --shadow-color: rgba(255, 255, 255, 0.1); }
document.documentElement.setAttribute('data-theme', isDarkMode.value ? 'dark' : 'light');