原文转载自「刘悦的技术博客」https://v3u.cn/a_id_114

究竟什么是暗黑模式?这个概念起初来源于macOS系统,该系统的mojave版本为用户提供两个主题皮肤,即浅色和深色的皮肤。自从有了这个概念之后,很多网站和系统都会用户提供了相应的两套肤色,便于用户根据自己的习惯或爱好进行切换

从科学的角度讲,低对比度的暗色可以降低屏幕对视网膜的刺激,同时还可以让电子设备更加省电。

在过往的印象之中,最早实现类似的效果,一般都是通过JavaScript来更换Web页面或Web应用程序主题皮肤的.css文件,但是对于维护多套样式是较为痛苦的,特别当你要为你的产品提供更多的皮肤的时候更为堪忧。这个时候你可以借助类似Sass这样的处理器来维护你的主题样式,声明好变量,然后维护对应的变量值。

这就是css3的自定义属性,自定义属性的出现,可以让css样式也使用变量,通过js可以动态的修改变量的值

//现在全局定义
:root{
--theme-color:red;
} //使用的时候
#app{
background-color:var(--theme-color);
} //假如我们没有指定--theme-color这个属性,则可以在使用的时候加上替代值
#app{
background-color:var(--theme-color,black);//没有指定--theme-color则会由black代替
}

通过JS获取和设置自定义的属性

//js中获取--theme-color的值
var styles = getComputedStyle(document.documentElement);
var value = styles.getPropertyValue("--theme-color");
console.log(value);//red //js中更改--theme-color的值
document.documentElement.style.setProperty("--theme-color","black");

明白了这个原理,以我的个人网站为例,我只需要,改变三个颜色属性即可将我的网站改变风格:logo,背景色,和字体色

:root{
--bg-color:#fff;
--a-color:#4A4A4A;
--logo:url(../images/logo.png);
}

然后利用js,实时切换这三个变量即可

function check_model(){

    var _items = [];
var items = document.getElementsByName("switch_default");
for(var i=0;i<items.length;i++) {
if (items[i].checked){_items.push(items[i].value);}
}
if(_items.length==0){ document.documentElement.style.setProperty("--bg-color",'#fff');
document.documentElement.style.setProperty("--a-color",'#4A4A4A');
document.documentElement.style.setProperty("--logo",'url(../images/logo.png)');
localStorage.setItem("mode", "light");
}else{ document.documentElement.style.setProperty("--bg-color",'#292a2d');
document.documentElement.style.setProperty("--a-color",'#a9a9b3');
document.documentElement.style.setProperty("--logo",'url(../images/logo_dark.png)');
localStorage.setItem("mode", "dark"); }

是不是很简单呢,这样就可以实现了,你可能也发现了,我利用webstorage技术来实现风格的状态保存,这样就可以保证用户在切换风格以后,可以记录用户选择的状态

关于webstorage可以参看这篇文章:彻底弄清楚session,cookie,sessionStorage,localStorage的区别及应用场景(面试向)

前端技术虽然博大精深,但是作为一名全栈工程师,掌握前端也是十分必要的,想在互联网行业生存下去就取决于一个人的技术是否全面,我始终对同学的建议就是,不要惧怕前端,要热爱前端,关注前端从而反哺后端,只有不停的探索和学习,才能在技术这条路上走的平稳和长久。

原文转载自「刘悦的技术博客」 https://v3u.cn/a_id_114

利用CSS3自定义属性来为网站添加“暗黑模式”(暗色模式/DarkMode)的更多相关文章

  1. 利用nginx向现有网站添加登录验证功能(不添加修改现有网站代码)

    在不改变现有网站代码的前提下加入验证功能: 1.假设现有网站后端nodejs,端口3000,nginx配置如下 server { listen 80; server_name localhost; l ...

  2. 利用CSS3实现图片无间断轮播图的实现思路

    前言:图片轮播效果现在在各大网站都是非常普遍的,以前我们都是通过postion的left or right来控制dom的移动,这里我要说的是利用css3来制作轮播!相比以前通过postion来移动do ...

  3. 如何利用log4Net自定义属性配置功能记录完整的日志信息

    log4Net作为专业的log记录控件,对于它的强大功能大家一定不陌生.下面我将详细介绍如何利用其自定义属性,让日志信息更完整. 一,创建测试工程,log4Net组件可以自己从网上下载,也可通过Nug ...

  4. Apache:如何利用.htaccess文件对PHP网站或文件进行伪静态处理

    来源:http://www.ido321.com/1123.html 今天get了一招:利用.htaccess文件对PHP网站或文件进行伪静态处理. 一.检查服务器是否支持伪静态处理: 必 须要空间支 ...

  5. 利用CSS3实现页面淡入动画特效

    利用CSS3动画属性"@keyframes "可实现一些动态特效,具体语法和参数可以网上自行学习.这篇文章主要是实践应用一下这个动画属性,实现页面淡入特效,在火狐24版.chrom ...

  6. 为网站添加IE6升级提示

    原文 为网站添加IE6升级提示 IE6的是一款横跨十年的浏览器,作为一枚前端,对其已经失望透顶,但其在中国的市场比仍旧很高,中国大量的PC上安装的都是盗版Windows XP,而Windows XP上 ...

  7. 利用 squid 反向代理提高网站性能(转载)

    本文在介绍 squid 反向代理的工作原理的基础上,指出反向代理技术在提高网站访问速度,增强网站可用性.安全性方面有很好的用途.作者在具体的实验环境下,利用 DNS 轮询和 Squid 反向代理技术, ...

  8. 利用CSS3实现div页面淡入动画特效

    利用CSS3实现页面淡入动画特效   摘要 利用CSS3动画属性"@keyframes "可实现一些动态特效,具体语法和参数可以网上自行学习.这篇文章主要是实践应用一下这个动画属性 ...

  9. 网站添加第三方登陆(PHP版)

    这两周正在写毕业设计,我做的是一个问答网站.先介绍一下这个网站:这是一个关于大学生在线问答的网站,类似知乎和百度知道,不过功能没有人家多,毕竟这个网站我一个人在做.网站部署在阿里云,网站包括API,W ...

随机推荐

  1. 最新管家婆财贸ERP C9 V22.0的应用网页版的财务软件1000用户补丁免狗授权注册机网络版软件下载

    管家婆财贸ERPC9应用价值: 1.多组织独立核算 多种组织形态核算,出具独立的三大财务报表及业务报表,发挥经营管理的积极性,便于专业化运营. 2.兼顾统筹与分权 满足多种集团统管与分权管控模式需求, ...

  2. MOSFET, MOS管, 开关管笔记

    MOSFET, MOS管, 开关管 MOSFET, Metal-Oxide-Semiconductor Field-Effect Transistor, 金属氧化物半导体场效晶体管 常见封装 电路符号 ...

  3. Springboot目录结构分析

    1 src/main/java 存储源码 2 src/main/resource 资源文件夹    (1)src/main/resource/static 用于存放静态资源,如css.js.图片.文件 ...

  4. Proxmox 5.4使用vgpu_unlock,为GTX1060开启vGPU支持

    本文介绍如何为GTX1060显卡开启vGPU功能.消费级显卡不支持nvidia GRID vGPU功能.在2021年初,疫情激发了黑客的创作热情,给出了一个vgpu_unlock的补丁,可以让消费级显 ...

  5. nacos 快速入门

    每日一句 外表可是具有欺骗性的. 每日一句 No victory comes without a price. 凡是成功就要付出代价. 概述 这个快速开始手册是帮忙您快速在您的电脑上,下载.安装并使用 ...

  6. 钉钉登录二维码嵌套在vue页面中

    转自 https://www.csdn.net/tags/OtDacg3sMjQ2NTgtYmxvZwO0O0OO0O0O.html 钉钉登录二维码嵌套在vue页面中 2021-09-04 14:42 ...

  7. BI 如何让SaaS产品具有 “安全感”和“敏锐感”(上)

    SaaS模式一经推出,凭借自身的高性价比.低维护成本,无需软硬件维护.无需运维等明晃晃的优点,得到了爆发式的增长,甚至全面改变了软件的开发模式.各位老总的问候语,不知从什么时候开始,都变成了:&quo ...

  8. Python 3函数的参数冒号注释

    Python 3.7版本,函数的参数可以通过冒号来进行注释 def f(ham: str, eggs: str = 'eggs') -> str : print("Annotation ...

  9. 聊聊 C++ 和 C# 中的 lambda 玩法

    这几天在看 C++ 的 lambda 表达式,挺有意思,这个标准是在 C11标准 加进去的,也就是 2011 年,相比 C# 2007 还晚了个 4 年, Lambda 这东西非常好用,会上瘾,今天我 ...

  10. 开发工具-SVG占位图片

    更新日志 2022年6月10日 初始化链接. https://toolb.cn/imageholder