获取关键数据修改目标元素样式达到换肤的效果;注意权值
关键数据可以来自:
同样的,修改目标元素的样式,可以通过修改:
说明:本节案例,重在关键数据的获取
获取某个元素的内联样式,修改另外一个元素的内联样式
<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');