切换浅色和暗夜模式的vue组件 darkmode-switch-btn

简单方案

第一步 

         在head中声明<meta name="color-scheme" content="light dark">,声明当前页面支持 light 和 dark 两种模式

第二步

        设置不同模式下的全局样式变量,供全局子元素引用,实现模式修改,全局样式一起修改的效果。

注:1.有些属性如background不能实现继承,所以要实现不同元素背景色的统一修改,只能是不同元素使用同一变量。模式修改,变量值会修改,从而实现样式的切换

// 字体
$font-light-color-1: #1b1b1b;$font-dark-color-1: #1b1b1b;//背景
$bg-light-color-1: #fff;$bg-dark-color-1: #1b1b1b;@mixin light-theme {color-scheme: light; // 浏览器提供的元素 UI 中使用的颜色与配色方案的意图相匹配。例如滚动条、拼写检查下划线、表单控件等。--text-primary: #{$font-light-color-1};
}@mixin dark-theme {color-scheme:dark; // 浏览器提供的元素 UI 中使用的颜色与配色方案的意图相匹配。例如滚动条、拼写检查下划线、表单控件等。--text-primary: #{$font-dark-color-1};
}:root{@media (prefers-color-scheme: light) {@include light-theme;}@media (prefers-color-scheme: dark) {@include dark-theme;}
}//颜色较多的情况,建议使用CSS变量对颜色值进行管理

第三步:

        在项目中使用定义的变量,例如

.themeBtn {display: flex;flex-direction: row;justify-content: center;align-items: center;color: var(--text-primary);border: 1px solid var(--border-primary);cursor: pointer;}

 darkmode-switch-btn的实现方案:

        第一步:为html添加meta标签

    const html = document.documentElement;if (window && html) {   // 插入 meta 标签var oMeta = document.createElement("meta");oMeta.content = "light dark";oMeta.name = "color-scheme";document.getElementsByTagName("head")[0].appendChild(oMeta);}

        第二步:初始化时,为html添加class

created(){const theme = window.localStorage.getItem("theme");this.mode=theme;const html = document.documentElement;if (window && html) {html.className = theme;html.style.backgroundColor = "";}},

        第三步:切换主题时,改变html的class,使用不同模式的样式

handleCommand(theme) {const html = document.documentElement;if (window && html) {html.className = theme;html.style.backgroundColor = "";window.localStorage.setItem("theme", theme);this.mode = theme;}},

        第四步:完成不同模式的css

// 字体
$font-light-color-1: #1b1b1b;$font-dark-color-1: #1b1b1b;//背景
$bg-light-color-1: #fff;$bg-dark-color-1: #1b1b1b;@mixin light-theme {color-scheme: light;// 浏览器提供的元素 UI 中使用的颜色与配色方案的意图相匹配。例如滚动条、拼写检查下划线、表单控件等。--nav-bg:$bg-light-color-1
}
@mixin dark-theme {color-scheme: dark;// 浏览器提供的元素 UI 中使用的颜色与配色方案的意图相匹配。例如滚动条、拼写检查下划线、表单控件等。--nav-bg:$bg-dark-color-1
}.light{@include light-theme
}
.dark{@include dark-theme
}
:root:not(.light):not(.dark){@media (prefers-color-scheme: light) {@include light-theme;}@media (prefers-color-scheme: dark) {@include dark-theme;}
}

        第五步:使用css变量

.themeBtn {display: flex;flex-direction: row;justify-content: center;align-items: center;color: var(--text-primary);border: 1px solid var(--border-primary);cursor: pointer;}

        完成!🎉🎉🎉

 参考方案:

  1. 手动设置高亮或者暗夜模式,
    1. 修改访问地址 https://www.naiveui.com/zh-CN/light/components/button
    2. js切换css link地址element-uithemeswitching
    3. 切换class 隔离食用手册
  2. 既可跟随系统,也可以手动设置高亮或者暗夜模式
    1. 参考MDN Web Docs

darkmode-switch-btn

github:https://github.com/startblingbling/darkmode-switch-btn

npm:darkmode-switch-btn - npm

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1379877.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Apache Paimon 流式数据湖 V 0.4 与后续展望

摘要&#xff1a;本文整理自阿里云开源大数据表存储团队负责人、阿里巴巴高级技术专家&#xff0c;Apache Flink PMC&#xff0c;Paimon PPMC 李劲松&#xff08;之信&#xff09;在 Apache Paimon Meetup 的分享。本篇内容主要分为四个部分&#xff1a; 湖存储上的难点深入 Ap…

Ubuntu18.04版本安装ROS及出现错误的处理方法

前面的文章是在已安装的ROS基础上做的一些应用&#xff0c;这里我们从零开始安装ROS机器人操作系统。 机器人操作系统(Robot Operating System,ROS)是一个开发机器人软件的框架&#xff0c;里面包含了一系列的工具&#xff0c;库和惯例&#xff0c;目的在于简化在大量不同种类机…

并发:通道

编程就是把具体实现抽象,屏蔽底层的一些细节。数据就像一条流水线,从一个并发单元传递到另一个并发单元。那么我们怎么传递数据呢?基于内存共享或者基于网络传输? 数据共享方式 同一进程内有不同的并发单元,例如 goroutine A 和 goroutine B,它们可能在不同的物理核上并…

使用Git进行项目版本控制

1、什么是Git&#xff1f; GIT&#xff0c;全称是分布式版本控制系统&#xff0c;git通常在编程中会用到&#xff0c;并且git支持分布式部署&#xff0c;可以有效、高速的处理从很小到非常大的项目版本管理。分布式相比于集中式的最大区别在于开发者可以提交到本地&#xff0c…

Mac钉钉如何添加好友?

钉钉&#xff08;DingTalk&#xff09;是阿里巴巴集团专为中国企业打造的免费沟通和协同的多端平台&#xff0c;支持手机和电脑间文件互传&#xff0c;可以让企业进入高效移动办公时代。那么Mac版的钉钉&#xff0c;是如何添加好友的呢&#xff1f;下面小编给大家带来Mac钉钉添…

Android_基于BMOB的聊天软件_添加好友

之前提过为什么要用BMOB&#xff0c;前段时间完成了用户的注册与登录&#xff0c;现在做添加好友功能&#xff0c;主要 参考BMOB官网 提供的资料。 主要流程就是&#xff0c;输入好友关键字&#xff0c;点击搜索&#xff0c;显示服务器上对应的搜索结果&#xff0c;用BMOB的好…

Android_聊天软件_加好友_与服务器交互

番外篇&#xff1a; 1.在做界面时&#xff0c;总遇到输入键盘不能自己收起&#xff0c;导致需要手动收起键盘&#xff0c;使操作多一步&#xff0c;现在说一下我的流程&#xff0c; 检查键盘是否显示&#xff0c;代码如下&#xff1a; private Context mContext;private Vie…

佛祖保佑,永不宕机,永无bug

当我们的程序编译通过&#xff0c;能预防的bug也都预防了&#xff0c;其它的就只能交给天意了。当然请求佛祖的保佑也是必不可少的。 下面是一些常用的保佑图&#xff1a; 佛祖保佑图 ——————————————————————————————————————————…

Android_聊天软件_添加好友_与服务器交互

上一篇文章介绍了用户A向服务器发送添加B的请求&#xff0c;这篇文章介绍服务器通知用户B&#xff0c;以及用户B同意与否的操作。 好久没有更新文章&#xff0c;主要是前段时间花了2天时间帮别人画了点东西&#xff0c;还有就是充电了&#xff0c;主要是Service、Notification…

wxid转扫一扫添加好友

什么是扫一扫&#xff1f;就是在日益严格的环境下&#xff0c;手动加人超过两天直接被判为营销&#xff0c;添加超过10个对方就收不到消息了&#xff0c;而扫一扫协议刚好就能规避&#xff0c;正常扫一扫添加只有在面对面或者推荐扫码才能添加&#xff0c;而这个就是模拟面对面…

原始套接字编程(AF_PACKET+SOCK_RAW)模拟一个PING

1. 背景 最近看一个客户的代码片段&#xff0c;发现他在用原始套接字编程&#xff0c;一般学习套接字都是流式套接字和数据报套接字&#xff0c;本来也不是搞网络的&#xff0c;原始套接字了解得很少&#xff0c;借着这次机会&#xff0c;自己来学习一下原始套接字编程。 2. …

STL初探

STL简介 STL(standard template libaray - 标准模板库)是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组件库&#xff0c;而且是一个包罗数据结构与算法的软件框架。 STL的一些版本 原始版本 Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本&#xff0c;…

PHP最简单自定义自己的框架实现像TP链式sql语句(六)

1、实现效果&#xff0c;链式sql语句封装 order、where、group、limit等封装 2、数据表构造函数入参&#xff0c;ModelBase.php public $table NULL; public function __construct($table){$this->table$table;if(!$this->table){die("no table" );}$this-&…

AI一键生成数字人

AI一键生成数字人,不玩虚的 阅读时长&#xff1a;10分钟 本文内容&#xff1a; 结合开源AI&#xff0c;一键生成短视频发布到常见的某音&#xff0c;某手平台&#xff0c;狠狠赚一笔 前置知识&#xff1a; 基本的 python 编程知识Jupyter Notebook 使用过Linux 使用过 先上源码…

Wallpaper Engine使用视频壁纸黑屏解决方法(window10)

1.点击电脑左下角开始键>设置>搜索框搜索图形设置 2.浏览>找到wallpaper engine相关程序添加 3.将三个的选项改成节能 4.如果软件还在运行&#xff0c;重新启动

WebView2 通过 PuppeteerSharp 实现爬取 王者 壁纸 (案例版)

王者壁纸自动化获取逻辑分析 其实它的逻辑很简单&#xff0c; 就是王者的官网&#xff0c;打开后&#xff0c;在右下角就看到了皮肤页面部分。 这个时候&#xff0c;点击更多&#xff0c;就会打开全部英雄详情的页面。 这个时候&#xff0c;单点任意一个英雄&#xff0c;就会…

微信小程序短视频去水印,王者查战力,手持弹幕,获取头像壁纸,工具箱源码

短视频在线去水印,无任何广告 王者荣耀查荣耀战力已更新 新增加查看历史上的今天 新增手持弹幕&#xff0c;修复剪辑视频不能保存问题。 新增壁纸&#xff0c;头像&#xff0c;网址转二维码。 【微信小程序】&#xff1a;好野工具 【小程序版本】&#xff1a;5.1.1 【小…

王者壁纸批量爬取

语言&#xff1a;python json格式网站&#xff1a; 爬取网址&#xff1a;王者荣耀壁纸下载-王者荣耀官方网站-腾讯游戏 思路分析&#xff1a; 分析下一页&#xff0c;发现下一页之后是在当前页面的局部重新加载 当然排除可以直接爬取目标url获取当前页面的信息以及后面的所…

C语言案例 阶乘求和-12

题目&#xff1a;求1 2&#xff01;3&#xff01; … 20&#xff01;的和。 程序分析 阶乘相关原理&#xff1a;一个正整数的阶乘是所有小于及等于该数的正整数的积&#xff0c;并且0的阶乘为1。自然数n的阶乘写作n!&#xff0c;任何大于1的自然数n阶乘表示方法&#xff1a;…

5大电脑软件推荐!每一款都是精心挑选,良心推荐!

说起实用的电脑软件&#xff0c;我想你看对地方了&#xff0c;世上最棒最实用的电脑软件推荐&#xff01;每一款都十足良心&#xff01; 是时候表演真正的技术了&#xff01; 1.PotPlayer 超受欢迎的播放器之一。这款播放器可能会成为你的菜&#xff0c;内存占用低并且不卡&a…