前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DarkMode(5):深色模式不同实现方案切换

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

原创
作者头像
周陆军
发布2020-12-11 22:57:19
8880
发布2020-12-11 22:57:19
举报
文章被收录于专栏:前端架构

sass自定义函数转 sass预处理

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

代码语言:javascript
复制
@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\:\-\"\(\)\;\$\!]*)\}

代码语言:javascript
复制
const reg =/\@include themeify \{\n([\s\w\:\-\"\(\)\;\$\!]*)\}/
const reg = /@include themeify {\n([\s\w:\-"();$!]*)}/;
正则表达式匹配暗黑模式
正则表达式匹配暗黑模式

替换为$1即可

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

代码语言:javascript
复制
const reg = /themed\(\"([\w\-]*)\"\)\;/

替换为\$$1

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

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

目的无非就是想要输出:

代码语言:javascript
复制
:root {
  --primary-color: #{$primary-color};
}

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

代码语言:javascript
复制
$accent-color: #fbbc04;
:root {
  --accent-color-wrong: $accent-color;
  --accent-color-right: #{$accent-color};
}

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

代码语言:javascript
复制
$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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • sass自定义函数转 sass预处理
  • sass变量主题输出切换为css变量主题输出
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档