当前位置:网站首页>Dynamic adjustment of web theme (2) Extraction
Dynamic adjustment of web theme (2) Extraction
2022-08-03 06:11:00 【ice breaker】
动态调整web主题(2) Extraction
自从写完 动态调整web系统主题? 看这一篇就够了! 这篇文章之后,I've always wanted to distill the ideas in this article,发布成一个 npm
包.
Just had time to write this week tailwind-css-variables-theme-generator
, This package is a summary of the previous ideas,There are more detailed documentation.
Some improvements to previous ideas
原先在 之前那篇文章 里提到过 scss
与 js
通信的方法,主要依靠 webpack
的 :export
关键字,thereby exporting one js
对象.
There is now a more efficient solution.
我们知道 sass
是支持 CustomFunction
的, Then we can declare one js Function
to extract what needs to be exposed sass
变量.
For example, we can write such a method:
// typescript
const exposeAarry: OrderedMap<SassString, SassColor>[] = []
'expose($map)': (args: Value[]) => {
const value = args[0].assertMap('map')
const map = value.contents as OrderedMap<SassString, SassColor>
exposeAarry.push(map)
return value
}
这样我们在 scss
里就可以这样写:
@use './constants.scss' as C;
$other-vars: (
// same name : override ↑ constants map
--color-canvas-default-transparent: rgba(32, 54, 85, 0),
--color-marketing-icon-primary: #053c74,
--color-custom-text-color: #546821
);
// 使用 expose 导出 SassMap
$expose: expose(C.$root-vars);
$expose1: expose($other-vars);
从而将 SassMap
转化为 Js Map
进行处理.
这比使用 Webpack
The export is obviously more free,And a high degree of customization.
tailwind-css-variables-theme-generator
是什么?
This is a file generator,它以一个 scss
文件作为入口,Export the association exposed scss
变量,and use these variables,Generate configuration files through template rendering.
The configuration file is divided into 3
类:
tailwindcss v3
扩展文件extendColors.js
sass-loader
附加文件variables.scss
- Optional tool file
root.scss | export.scss | util.scss
where these files are used,在此不再叙述,Github文档上都有.
Example of the theme color switching of the preset scheme:
:root {
@each $var, $color in C.$root-vars {
#{$var}: Util.getRgbString($color);
}
}
[data-color-mode='light'] {
@each $var, $color in Light.$light-vars {
#{$var}: Util.getRgbString($color);
}
}
[data-color-mode='dark'] {
@each $var, $color in Dark.$dark-vars {
#{$var}: Util.getRgbString($color);
}
}
接下来,只要让 document.documentElement
的 data-color-mode
这个 Attribute
It can be two-way binding with a value in the code,非常简单.(vue
可使用 vue-meta
Bind directly to a value)
The backend controls dynamic switching
CSSStyleDeclaration.setProperty(property: string, value: string, priority?: string): void
可参考ThemeVariablesManager, It is a little bit of packaging.
Demo
Live Demo 右上角切换 Light
/ Dark
模式
边栏推荐
猜你喜欢
Delightful Nuxt3 Tutorial (2): Build a Blog Quickly and Easily
什么是参数化设计,通过实操了解一下? | SOLIDWORKS 操作视频
自监督论文阅读笔记SELF-SUPERVISED SPECTRAL MATCHING NETWORK FOR HYPERSPECTRAL TARGET DETECTION
滚动条 scrollbar 和scrollbar-thumb 样式
What is parametric design, let's understand it through practical operation?| SOLIDWORKS How-To Videos
中空编码器的作用——唯样商城
增强光学系统设计 | Zemax 全新 22.2 版本产品现已发布!
基于南航app直减自动出票
深度学习基本概念
自监督论文阅读笔记Reading and Writing: Discriminative and Generative Modelingfor Self-Supervised Text Recogn
随机推荐
微信小程序 自定义tabBar
ZEMAX | 在设计抬头显示器(HUD)时需要使用哪些工具?
自监督论文阅读笔记Reading and Writing: Discriminative and Generative Modelingfor Self-Supervised Text Recogn
六、对比Vector、ArrayList、LinkedList有何区别?(设计、性能、安全)
enum和enum class的区别
[frp intranet penetration]
AI智能剪辑,仅需2秒一键提取精彩片段
2021-04-30
关于芯片你了解吗?
东南亚跨境电商
block底层探索
进程间通讯 (IPC 技术) - 信号
自监督论文阅读笔记Efficient Self-supervised Vision Pretraining with Local Masked Reconstruction
常见的电子元器件分类介绍-唯样商城
MATLAB给多组条形图添加误差棒
梯度下降、反向传播
优雅的拦截TabLayout的点击事件
Practice of MySql's Sql statement (try how many you can write)
自监督论文阅读笔记 Multi-motion and Appearance Self-Supervised Moving Object Detection
Gradle插件与代理服务器导致Sync Project失败的问题