React项目动态修改主题颜色的方案
作者:月月鸟pt
这篇文章主要介绍了React项目动态修改主题颜色的方案,文中通过代码示例讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
背景
因为公司是做办公软件的,所以需要适配明亮和暗黑的主题。
不推荐的方案
公司之前就是这种方案,费时费力。
就是在项目的根目录的 public
文件夹下创建一个 dark.css
文件,所有的黑暗样式在这个文件中。
切换主题的方法:
const getTheme = (isDark: boolean) => { const darkStyle: any = document.getElementById('darkTheme'); if (!darkStyle) { var link = document.createElement('link'); link.rel = 'stylesheet'; link.type = 'text/css'; link.id = "darkTheme" link.disabled = false; link.href = './dark.css'; document.getElementsByTagName('head')[0].appendChild(link); } darkStyle.disabled = !!isDark; }
推荐的方案
通过控制 css
变量来展示两种主题,方便简洁。
因为公司是使用的 less
, 所以以下以 less
为例,但是 scss
和 css
是一样的。
1.创建两个主题的文件
在src文件夹下创建theme文件夹,在这个文件夹下创建lightTheme.less
和 darkTheme.less
文件。
lightTheme.less
:root[data-theme="light"] { --primary-text-color: #FFFFFF; --primary-white-color: #2A2A2D; --primary-color: #3591F4; --text-color: #363A45; }
darkTheme.less
:root[data-theme="light"] { --primary-text-color: #FFFFFF; --primary-white-color: #2A2A2D; --primary-color: #3591F4; --text-color: #fff; }
2.在入口的处的 index.less 引入这两个文件
@import './theme/lightTheme.less'; @import './theme/darkTheme.less';
3.在入口处的tsx文件中,能获取到的主题的方法中,调用切换主题的方法
const getDarkTheme = (isDark: boolean) => { const root = document.documentElement; if (!isDark) { // 修改 data-theme 属性的值为 "light" root.setAttribute('data-theme', 'light'); return } // 修改 data-theme 属性的值为 "dark" root.setAttribute('data-theme', 'dark'); } getDarkTheme(theme)
使用例子
.btn { color: var(--primary-color); }
总结
在react项目中,通过这种修改css变量的方法来动态的修改主题颜色。更加方便简洁,只需要在实际的使用中只写一个css变量就好。使得项目的样式文件更好的维护。
以上就是React项目动态修改主题颜色的方案的详细内容,更多关于React修改主题颜色的资料请关注脚本之家其它相关文章!