【发布时间】:2020-05-04 08:34:45
【问题描述】:
在我的项目中,我使用带有 Less 的 CSS 模块,这意味着我可以两全其美。
我的src 文件夹如下所示:
components/
[all components]
theme/
themes/
lightTheme.less
darkTheme.less
palette.less
palette.less:
@import './themes/lightTheme.less';
然后,在每个想要使用主题颜色的组件中,我都会这样做:
component.module.less:
@import '../../theme/palette.less';
.element {
background-color: @primary;
}
这个结构让我可以编辑palette.less 来导入我想使用的主题。问题是我想让用户自己选择他们喜欢的主题。主题应该可以在运行时切换,这意味着我需要编译两个主题。
我认为完美的解决方案是这样的:
app.less
body {
@theme: @light-theme;
&.dark-theme {
@theme: @dark-theme;
}
}
然后以某种方式在每个组件中导入这个@theme 变量并从中读取属性(即@theme[primary])。
不幸的是,Less 变量的作用域不能像这样工作。
我对任何使用 Less 模块的解决方案持开放态度。
谢谢!
【问题讨论】:
-
你应该在 light-theme 之前添加@include
-
@Ranjithv 这只是一些伪代码来展示我的想法
-
最好的解决方案是
css in js,比如样式组件、情感等。然后使用ThemeProvider,可以很容易地以编程方式切换多个主题 -
Ahalan @gaditzkhori,我们不想使用 styled-components,因为它使我们的 CSS 方式更加混乱(那些
.styled.js文件,一切都是组件,但它们绝对不是...... )
标签: css reactjs less themes css-modules