通过前端界面的选项切换界面的主题比如说dark,light这样的切换,
主要思路是什么?
目前想到的是,写好几种theme主题的css样式,然后js文件里引用一个大的theme变量,加在classname的前缀上,与css文件对应,然后切换变量切换主题,也就是切换了css样式,但是感觉很笨拙,请问有什么更好的方法吗?
通过前端界面的选项切换界面的主题比如说dark,light这样的切换,
主要思路是什么?
目前想到的是,写好几种theme主题的css样式,然后js文件里引用一个大的theme变量,加在classname的前缀上,与css文件对应,然后切换变量切换主题,也就是切换了css样式,但是感觉很笨拙,请问有什么更好的方法吗?
谢邀回答.
以下是我的不成熟的想法。
解决办法我个人认为有两种.
第一种:在皮肤最顶层 做一个classname来标示如 dark
light
.
.dark button {
color: white;
background: dark;
}
.light button {
color: dark;
background: gray;
}
...
这种方式的好处在于, 不用加载额外css
, 只需要改变顶层的classname就可以达到切换皮肤的效果,也就是你所说的。
第二种则是通过动态修改 link
<link href="theme.default.css" />
<link href="theme.dark.css" id="J-theme-link" />
theme.light.css
button {
color: white;
background: dark;
}
theme.dark.css
button {
color: dark;
background: gray;
}
js控制
function changeTheme(type) {
var el = doucment.querySelector('J-theme-link');
el.href = themeUrl + '/theme.' + type + '.css';
}
当然这种方法我还并没有尝试过,仅供参考思路.
第二种的好处在于,用 css 文件名代替了顶层的 命名空间
3 回答1.8k 阅读✓ 已解决
1 回答1.6k 阅读✓ 已解决
4 回答1.6k 阅读✓ 已解决
2 回答2.4k 阅读✓ 已解决
1 回答2.5k 阅读✓ 已解决
5 回答1.9k 阅读
2 回答1.3k 阅读✓ 已解决
有两种方式
更换Css文件
更换body的class名
第一种:
整体布局如
base.css
; 主题类的文件如theme-dark.css
或theme-light.css
第二种:
将所有样式可以写到一起
然后
body
默认是class="base"
;如dark就class="base dark"
;light就class="base light"
;然后所有跟主题挂钩的样式都用如
.dark .logo
或.light .logo
等方式去修改。