技术
·
3 min read
·
- Views
React+Tailwindcss实现暗黑模式
Copied
技术
·
3 min read
·
- Views
React+Tailwindcss实现暗黑模式
Copied
最近想用React 来实现一个在线面试的网站, 主要功能大概是协同代码编辑+WebRTC视频通话。 现在先从零开始慢慢做。
现代网站对于暗黑模式切换肯定是必不可少的。当项目使用了tailwindcss后可以很方便的集成暗黑模式
这一步不过多赘述,直接去tailwindcss官网就可以
在config文件中,主要是启用darkMode, 将其设置为’selector’。 文件第一行有这个注释后,修改这个配置文件就会有代码提示,可以发现darkMode有三种模式 ‘class’, ‘media’, ‘selector’
官网中对其有解释, 大致区别就是
media是通过媒体查询@media (prefers-color-scheme: dark) 来自动更改dark或者light, 也就是说使用了media我们代码里就无法手动更改网站主题, 它只能根据系统的主题来自动变换
class 则是需要我们手动给html元素 添加一个class=’dark’或者class=’light’ ,这样暗黑模式才会生效。相对media来说更灵活,不过需要写逻辑来手动切换。
selector 等同于class,官网只说了selector策略取代了tailwindcss v3.4.1 中的class策略。但是我在我最新版的v3.4.3中依然能使用class策略
在.dark 中声明的变量就是dark模式下使用的。
新建文件 /src/components/ThemeProvider.tsx:
这个文件主要逻辑是
useTheme是一个自定义Hook,它可以在任何函数组件中访问主题上下文。如果它在ThemeProvider之外被调用,将抛出一个错误。
封装一个切换Theme的组件
在使用时发现一个问题,很多时候我需要通过theme来渲染不同的svg , 但是当我使用context提供的theme来进行判断时会发现还会存在system 这个值,这导致我无法直接判断。 在next-themes 中有解决这个问题,它会导出一个resolvedTheme来表示最终得到的theme 。所有我们也加一个。
ok现在可以愉快的使用暗黑模式了
在antdesign5+中,可以通过智能算法快速地根据主色来计算出一些状态辅助色。 同样暗黑模式也可以根据智能算法快速切换。
修改一下App.tsx文件
34 篇文章
53 个话题
- 次访问