一步到位:三行CSS代码轻松实现全网站暗黑模式 每日热文
深色模式是一种设计趋势,网站的配色方案被更改为深色背景,配以浅色文字和元素。它也被称为夜间模式或黑暗主题。深色模式的目的是减少低光环境下的眼睛疲劳,节省移动设备的电池寿命,并创造一个时尚现代的美感。
本文由 Mads Stoumann 撰写的博文,主要介绍了如何通过简单的三行CSS代码实现网站的暗黑模式。该博文提到,
关键字一般反映用户、浏览器或操作系统做出的默认颜色选择。这些关键字通常用于浏览器的默认样式表。通过这种方式,我们可以轻松地实现网站的暗黑模式。
(资料图)
在另一篇博文中,Mads Stoumann详细介绍了如何使用SVG和CSS重新创建Apple的暗黑模式图标。这证明了他在此领域的深厚技术和创新能力。
总的来说,这个网站提供了许多关于使用CSS和SVG进行网站设计和开发的有用信息,特别是关于暗黑模式的实现。这对那些希望在自己的网站上实现暗黑模式的开发者来说是非常有价值的资源。
下面是正文~~
深色模式是一种设计趋势,网站的配色方案被更改为深色背景,配以浅色文字和元素。它也被称为夜间模式或黑暗主题。深色模式的目的是减少低光环境下的眼睛疲劳,节省移动设备的电池寿命,并创造一个时尚现代的美感。
许多热门网站和应用程序现在都提供了黑暗模式选项 —— 如 TailwindCSS:
如果您是开发者,您很可能已经知道如何在开发者工具中切换暗黑模式:
如果你想要为操作系统(以及所有支持暗黑模式的应用程序)切换暗黑模式,请转到系统设置。在Mac上,可以在系统设置>外观下找到它:
使用系统颜色的深色模式
首先,我们将创建一个带有标题的简单HTML:
Hello Darkness, My Old Friend
在样式表中,添加:
body { color-scheme: light dark;}
这会告诉浏览器,document可以接受亮色和暗色的color-scheme。
当前如果现在指定为dark浏览器也不会变成黑色。
这是因为user-agent样式表没有设置任何默认颜色。我们可以通过使用系统颜色快速解决这个问题:
body { background-color: Canvas; color: CanvasText; color-scheme: light dark;}
仅用3行CSS代码就能为我们的整个网站实现暗黑模式!
下面,我们更深入地了解系统颜色,来自规范:
一般来说,
关键字反映了用户、浏览器或操作系统做出的默认颜色选择。由于这个原因,它们通常在浏览器默认样式表中使用。
这是一个浅色模式演示,在Safari中展示了可用的系统颜色:
如果我们切换到深色模式,某些颜色会完全改变(就像我们已经遇到的Canvas和CanvasText),而其他颜色只会稍微改变:
使用系统颜色进行黑暗模式是一种简化的黑暗模式体验。是的,它会起作用 — 但是纯黑白有点无聊
我们可以在CSS中使用color-mix来增加趣味性 将CanvasText(黑色或白色)混入 Canvas (白色或黑色)以获得background-color,反之亦然,用于color:
body { background-color: color-mix(in srgb, Canvas, CanvasText 2.5%); color: color-mix(in srgb, CanvasText, Canvas 15%);}
这样看起来会更柔和:
从颜色中减去饱和度,是在深色模式中制作颜色变化的一种广泛使用的方法。
在CSS中使用相对颜色,我们可以做到这一点:
background: hsl(from ActiveText h calc(s - 30%) l);
不幸的是,相对颜色在任何浏览器中都不能与系统颜色一起工作。
注意:系统颜色可以被强制颜色覆盖(尽管很少使用)——所以不要过分依赖这种技术。
我们继续学习另一种技巧,这将使我们能够精细控制我们的暗黑模式颜色。
使用prefers-color-scheme媒体查询
要为亮色和暗色模式指定特定颜色,我建议使用 CSS 自定义属性,然后使用prefers-color-scheme媒体查询更新这些属性。
以浅色模式为默认,我们将颜色添加到:where(body)-部分,将它们与我们的常规 body -样式分开:
/* Properties */:where(body) { --background-color: #FFF; --text-color: #222;}body { background-color: var(--background-color); color: var(--text-color);}
然后,对于暗黑模式,我们将简单地更新这些颜色属性:
@media (prefers-color-scheme: dark) { :where(body) { --background-color: hsl(228, 5%, 15%); --text-color: hsl(228, 5%, 80%); }}
但是,如果我们希望用户根据自己的需求选择我们网站的版本,而不是根据系统设置呢?
他们可能更喜欢将系统设置为深色模式,但我们的网站是浅色模式。让我们创建一个切换器!如果您访问像 TailwindCSS 这样的网站,您会注意到当您从 color-scheme-toggler 中选择“dark”时,会在 html -节点上添加一个 dark -类。这是通过 JavaScript 完成的:
创建颜色方案切换器
如果你用过 TailwindCSS ,你会注意到当你从color-scheme-toggler中选择“dark”时,会在 html -节点上添加一个dark-类。这是通过 JavaScript 完成的:
window.matchMedia("(prefers-color-scheme: dark)").matches)) { document.documentElement.classList.add("dark")} else { document.documentElement.classList.remove("dark")}
Open Props 正在使用类似的方法,但是更新 data-theme 属性,然后在两个块中定义属性:
[data-theme=light] { --nav-icon: var(--gray-7); /* etc */}[data-theme=dark] { --nav-icon: var(--gray-5); /* etc */}
使用 CSS
使用一些全新的CSS技术,我们可以在不使用JavaScript的情况下创建一个切换器。我们将创建一个具有3种状态的切换器:
Light (forced)Auto (system default, could be either light or dark)Dark (forced)首先,一些基本标记:
在添加了一些基本样式后(请参阅下面的Codepen演示),它的呈现效果如下:
我们将在html元素中添加一个–darkmode-属性和container-type:
html { --darkmode: 0; container-name: root; container-type: normal;}
我们使用@container style()-查询,因此我们需要将节点设置为“container”。
既然我们不想观察到inline-size变化,我们只需添加值 normal 。
如果用户选择了一个“强制”值,我们将更新–darkmode:
html:has(#color-scheme-light:checked) { --darkmode: 0; }html:has(#color-scheme-dark:checked) { --darkmode: 1; }
最后,我们将使用容器style()-查询来检查,如果–darkmode设置为 1 :
@container root style(--darkmode: 1) { body { --background-color: hsl(228, 5%, 15%); --text-color: hsl(228, 5%, 80%); }}
注意:@container style() -queries 目前仅在 Chrome 中的 behind-a-flag 下工作,这还是初期阶段,所以不要在生产环境中使用。
现在,在选择“Dark”之后,我们的切换器(和页面)看起来是这样的:
存储状态
如果我们想要存储用户的选择,就需要一点JavaScript!
首先,为
精心推荐
- 上海发布进一步优化调整疫情防控的相关措施-天天快资讯
- 山西汾酒12月6日获沪股通净买入2.19亿-播报
- 去年京津冀工信部门推进签约570多项高端高新项目
- 京津冀区域协同创新指数增长迅速
- 1至2月河北省工业生产平稳开局 规模以上工业增加值同比增长6.0%
- 浙江绍兴15日0-21时新增41例确诊病例
- 沈阳大气优良天数达近5年来最好水平
- 辽宁实行市级政府集中监管 首站定点冷库加强疫情防控
- 辽宁省25个博士后团队冲刺全国博士后创新创业大赛
- 安徽省宿州市埇桥区大营镇大营新村调整为中风险地区
- 云南哀牢山4名地质调查人员因公殉职原因查明
- 全国首部涉及“非现场执法”的法规施行 浦东新区打造引领区数字化城市治理样板
- 杭州一封控小区完成第三轮核酸检测 前两轮检测均为阴性
- 集采未中选药品现在怎么样了?这组数据告诉你
-
(四川统战人说统战事)“海归”博士后王暾:专注灾害预警科技创新 打通灾害预警“最后一公里” 中新网成都12月15日电 (起钰婷)“国
-
中新网福建平和12月15日电 (周晓彬 马淑惠)12月15日,福建省平和县人民法院依法宣判蔡某金等10人涉恶犯罪案件。 法院审理查明,20
-
中新网郑州12月15日电 (记者 韩章云)针对近日网友实名举报中国农业发展银行太康县支行员工夏某华吃空饷一事,中国农业发展银行河南省
-
中新网宿迁12月15日电 (记者 刘林)“房子干净又敞亮,社区漂亮又整洁。”15日,家住江苏宿迁牛角淹社区的袁有亮谈起新家,兴奋的心情
-
中新网通辽12月15日电 (记者 张林虎)15日,记者从内蒙古自治区通辽市科左后旗公安局获悉,该局打掉一个帮助网络犯罪转账的“跑分团队
X 关闭
行业排行
- 1、深圳:积极推进旅游业恢复 扎实推动经济稳定增长
- 2、保定定州提出一系列发展措施 引领体品产业向智能化品牌化高端化迈进
- 3、河北省财政厅充分发挥财政职能作用 促进交通运输事业发展
- 4、太原阳曲人才公寓项目开启施工招标工作 共有1954套人才公寓满足人才居住需求
- 5、山西出口钢构件顺利发货 为企业加强科技创新开辟了更为广阔的发展空间
- 6、上半年泰州姜堰实现新签约亿元和1000万美元以上项目95个 计划总投资208.319亿元
- 7、清华博士非洲修电站 因为他,“内卷”成为网络热词
- 8、内蒙古新增本土确诊病例3例 均在呼伦贝尔满洲里市
- 9、31省份新增新冠肺炎确诊病例67例 其中本土50例
- 10、浙江新增本土确诊病例45例 其中宁波6例、绍兴39例
X 关闭
产业
-
不用跑北京 在家门口也能挂上顶...
日前,我省首个神经疾病会诊中心——首都医科大学宣武医院河北医院...
-
“十四五”期间 河北省将优化快...
从省邮政管理局获悉,十四五期间,我省将优化快递空间布局,着力构...
-
张家口市宣化区:光伏发电站赋能...
3月19日拍摄的张家口市宣化区春光乡曹庄子村光伏发电站。张家口市宣...
-
“张同学”商标被多方抢注 涉及...
“张同学”商标被多方抢注,官方曾点名批评恶意抢注“丁真” ...
-
山东济南“防诈奶奶团”花式反诈...
中新网济南12月15日电 (李明芮)“老有所为 无私奉献 志愿服...
-
广州新增1例境外输入关联无症状...
广州卫健委今日通报,2021年12月15日,在对入境转运专班工作人...
-
西安报告初筛阳性病例转为确诊病例
12月15日10:20,经陕西西安市级专家组会诊,西安市报告新冠病毒...
-
广东东莞新增本土确诊病例2例 ...
(抗击新冠肺炎)广东东莞新增本土确诊病例2例 全市全员核酸检测...
-
中缅边境临沧:民警深夜出击捣毁...
中新网临沧12月15日电 (胡波 邱珺珲)记者15日从云南临沧边境...
-
“土家鼓王”彭承金:致力传承土...
中新网恩施12月15日电 题:“土家鼓王”彭承金:致力传承土家...