DarkMode(5):深色模式不同实现方案切换

sass自定义函数转 sass预处理

在《DarkMode(2):深色模式解决方案——css颜色变量实现Dark Mode》与《DarkMode(3):深色模式解决方案——颜色反转与函数 》,如果使用

@mixin themeify {
  @each $theme-name, $theme-map in $themes {
    $theme-map: $theme-map !global;
    body[data-theme=#{$theme-name}] & {
      @content;
    }
  }
}

@function themed($key) {
  @return map-get($theme-map, $key);
}

这种方案写出来的样式代码,在改为普通模式,非常难搞。

不过推荐使用正则表达式的方式,去替换

正对第一个函数,替换的正则表达式如下:\@include themeify \{\n([\s\w\:\-\"\(\)\;\$\!]*)\}

const reg =/\@include themeify \{\n([\s\w\:\-\"\(\)\;\$\!]*)\}/
const reg = /@include themeify {\n([\s\w:\-"();$!]*)}/;

替换为$1即可

第二个函数正则表达:themed\(\"([\w\-]*)\"\)\;

const reg = /themed\(\"([\w\-]*)\"\)\;/

替换为\$$1

sass变量主题输出切换为css变量主题输出

如果单纯sass变量输出两套主题,切换主题样式,需要刷新页面。如果是css变量,就无需刷新变量

目的无非就是想要输出:

:root {
  --primary-color: #{$primary-color};
}

如果之前直接是声明的,也没有啥好说的

$accent-color: #fbbc04;
:root {
  --accent-color-wrong: $accent-color;
  --accent-color-right: #{$accent-color};
}

其实还是声明一个函数,即可:

$var-element:'--';
$colors: ( 
    -black: #000,
    -blue: #088DC6
);
:root {
    @each $color in $color-variables {
     #{$var-element}#{nth($color, 1)}: #{nth($color, 2)};   
    }
}

如何在把读取 variable.scss 变量,并自动处理成css 变量文件,这个正在研究,等时间空点,再续

这个用sass或者less函数可以直接处理

如果是map 形势的赋值,直接操作

 

 

 

转载本站文章《DarkMode(5):深色模式不同实现方案切换》,
请注明出处:https://www.zhoulujun.cn/html/webfront/style/darkMode/8586.html

相关推荐:

为什么Python单例模式在多线程环境下会失效?

__new__中判空非原子操作会导致多线程重复创建实例;DCL通过无锁初判+加锁后复判解决,需配合__init__幂等防护。 __new__中的if判断不是原子操作 线程A执行到ifcls._instanceisNone时为True,刚准备调用super().__new__(cls),此时被调度挂起...

Python 3.12下的异步ORM方案该如何选择?

encode/orm是Python3.12下最平衡易落地的异步ORM,因其整合SQLAlchemyCore、databases和typesystem,原生适配3.12事件循环策略,无协程泄漏与版本锁问题,安装即用且错误堆栈清晰。 直接说结论:在Python3.12下,encode/orm是目前最平衡...

如何实现Django项目的分表分库方案_利用Python中间件动态切换库

分库分表前须确认三件事:Django版本≥4.2、主键含路由信息(如user_id)、已弃用syncdb类命令;中间件动态切库需安全重绑connections;using()优先级最高,路由器次之,中间件仅预热连接;分表逻辑应收口至Manager层,但需防范并发表名错乱。 分库分表前必须确认的三件事...

如何处理Python测试中大量的Mock对象维护_使用pytest-mock的Spy模式

spy比patch更适合监控已有逻辑,因为它不替换原函数,仅记录调用信息而不干预执行,避免行为脱节和副作用屏蔽;spy不可设return_value,应使用wraps实现监控+控制。 为什么spy比patch更适合监控已有逻辑 当你只是想确认某个函数被调用了、传了什么参数、返回了什么值,但又不想切断...

Python如何处理二进制文件的读写_通过open函数wb与rb模式

必须用rb/wb模式读写二进制文件,否则会触发文本编码/解码导致错误;rb返回bytes,wb要求写入bytes,不可混用文本方法如readline(),应使用read()或read(n)。 用open()读写二进制文件,必须显式指定rb和wb模式 Python默认以文本模式打开文件,哪怕你传入的是...