css未来:使用light-dark()切换主题色

news2024/11/17 0:32:18

css未来:使用light-dark()切换主题色

要根据使用的是浅色模式还是深色模式来更改颜色,我们通常会使用 prefers-color-scheme 媒体查询。为了让代码实现变得更容易,CSS 现在附带了一个名为 light-dark() 的实用函数。该函数接受两个颜色值作为其参数。根据我们正在使用的配色方案,它将使用第一个或第二个参数。

使用 prefers-color-scheme 切换主题色

要根据所使用的浅色模式或深色模式更改颜色值(或任何其他值),我们通常会使用媒体prefers-color-scheme 查询来更改自定义属性的值:

:root {
  --text-color: #333; /* 浅色主题色 */
}

@media (prefers-color-scheme: dark) {
  :root {
    --text-color: #ccc; /* 深色主题色 */
  }
}

实现深色模式时,通常会得到一堆重复的 CSS 变量,这些变量为每种模式设置值。然后,CSS 的其余部分将这些自定义属性用于实际声明。

body {
  color: var(--text-color);
}

使用 light-dark() 切换主题色

CSS 颜色模块第 5 级规范 的新增功能是 light-dark() 功能。该函数接受两个颜色值作为其参数。根据我们正在使用的颜色方案,它将使用第一个或第二个颜色参数。

light-dark(<color>, <color>);

根据规格:

如果使用的配色方案为 light 或未知,则此函数计算第一种颜色的计算值;如果使用的配色方案为dark,则此函数计算第二个颜色的计算值。

使用的配色方案不仅基于用户的浅色/深色模式设置,还基于属性的值 color-scheme。这类似于系统颜色的计算方式。

color-scheme属性允许元素指示其设计用于渲染的配色方案。这些值是根据用户的偏好进行协商的,从而产生使用的配色方案。

这意味着,为了 light-dark() 起作用,我们还必须包含一份 color-scheme 声明。

:root {
  color-scheme: light dark;
}

:root {
  --text-color: light-dark(#333, #ccc); /* 在浅色模式使用#333,在深色模式使用#ccc */
}

因为 color-scheme 的声明方式,这也意味着我们可以覆盖每个元素的值,以强制其进入某种模式:

.dark {
  color-scheme: dark; /* 在.dark元素上使用 light-dark,.dark元素的所有子元素都是深色模式 */
}

light-dark()看起来跟Chromium 内部的 -internal-light-dark()很类似。基于此功能, CSS 工作组内提出了向作者公开类似功能的提案。结果就诞生了 light-dark()。

-internal-light-dark() 适用于任何类型的值,而 light-dark() 只能用于颜色。

其他非颜色值能否支持

light-dark() 的功能相当有限:它只能处理 light/dark,并且只能处理值。这是正确的,也是非常有意的,因为这是迈向最终解决方案的中间步骤。

正如CSS 工作组问题中所提出的,最终目标是在未来(暂定)有一个命名的函数。该函数功能可以:

  • 响应 color-scheme 的任意值。
  • 返回的不仅仅是 值

它可能看起来像这样:

:root {
  color-scheme: dark light custom;
}

body {
  color: schemed-value(light hotpink, dark lime, custom rebeccapurple);
}

但是,就目前而言,我们“仅”拥有 light-dark(),而且我个人认为这很好,因为它与当今浏览器可以执行的操作的现实相符:

  • 它只支持 light/dark 。因为浏览器现在不支持incolor-scheme,所以现在支持其他值是没有用的。
  • 它只能处理值,因为解析器需要提前知道它正在解析的值的类型。light-dark()被明确定义为一个值。

light-dark() 的名称和语法非常容易记住,易于使用。

当 schemed-value() 成为一个事物时,light-dark()就会成为它的语法糖:

light-dark(<color>, <color>); = schemed-value(light <color>, dark <color>);

浏览器支持

在这里插入图片描述
目前只有 firefox 支持,如果我们想体验这个功能,可以使用firefox进行测试。

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

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

相关文章

国密SSL证书有哪些?一起来看国密SSL证书品牌大合集

早在2011年&#xff0c;我国国家密码管理局就已经对网络安全高度重视&#xff0c;在《关于做好公钥密码算法升级工作的通知》中&#xff0c;明确提出在建和拟建公钥密码基础设施电子认证系统和密钥管理系统应使用国密算法。并随之陆续颁布了《网络安全法》、《密码法》、《关键…

【数据结构(十·树结构的实际应用)】平衡二叉树(5)

文章目录 前言1. 基本概念2. 应用案例2.1. 左旋转(单旋转)2.1.1. 思路分析2.1.2. 代码实现 2.2. 右旋转(单旋转)2.2.1. 思路分析2.2.2. 代码实现 2.3. 双旋转2.3.1. 问题情景2.3.2. 思路分析2.3.3. 代码实现 前言 二叉排序树可能存在的问题&#xff1a; 看一个案例(说明二叉排…

Amazon Connect ,全渠道云联络中心

Amazon Connect &#xff0c;全渠道云联络中心 前言一. Amazon Connect 介绍 &#x1f5fa;️二. Amazon Connect 使用教程 &#x1f5fa;️1.我们打开URl链接找到对应服务2.输入Amazon Connect选中第一个点击进入即可&#xff1b;3.在进入之后我们就开始创建实例&#xff0c;点…

【方法】如何给Word文档添加水印?

想要保护文档内容的原创性&#xff0c;我们可以给文档添加上水印来做个防伪标记&#xff0c;防范文件内容被盗用。 有些小伙伴还不知道Word在哪里设置添加水印&#xff0c;接下来分享一个添加水印的教程&#xff0c;一起学习一下吧。 1. 打开需要添加水印的Word文档&#xff…

【源码复现】《Towards Deeper Graph Neural Networks》

目录 1、论文简介2、论文核心介绍2.1、基本概述2.2、模型介绍 3、源码复现3.1、torch复现3.2、DGL复现 1、论文简介 论文题目——《Towards Deeper Graph Neural Networks》论文作者——Meng Liu, Hongyang Gao & Shuiwang Ji论文地址——Towards Deeper Graph Neural Net…

如何给pycharm配置解释器

目录 给pycharm配置解释器 给pycharm配置解释器 选择show all 选择已经存在的环境 其中的py38是我通过conda创建的虚拟环境。

BearPi Std 板从入门到放弃 - 筑基(1)(RT-Thread 智慧路灯)

简介 使用BearPi IOT Std开发板及其扩展板E53_SC1&#xff0c; SC1上有I2C1 的光照强度传感器BH1750 和 EEPROM AT24C02&#xff0c; 智慧路灯功能, 实现亮度达到对应阈值则开启点灯 主板: 主芯片: STM32L431RCT6LED : PC13 \ 推挽输出\ 高电平点亮串口: Usart1I2C使用 : I2C…

排序算法(二)-冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序

排序算法(二) 前面介绍了排序算法的时间复杂度和空间复杂数据结构与算法—排序算法&#xff08;一&#xff09;时间复杂度和空间复杂度介绍-CSDN博客&#xff0c;这次介绍各种排序算法——冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序。 文章目录 排序算法(二)…

transformer文章翻译【Attention is all you need】

参考博客&#xff1a;https://blog.csdn.net/nocml/article/details/103082600 论文目录 摘要1. Introduction2. Background3. Model Architecture3.1 Encoder and Decoder Stacks3.2 Attention3.2.1 Scaled Dot-Product Attention3.2.2 Multi-Head Attention3.2.3 Application…

实验室移液器配套PFA吸头性能稳定特氟龙吸头特点

PFA吸头是一种高性能移液器配件&#xff0c;由聚全氟丙烯&#xff08;Perfluoroalkoxy&#xff09;材料制成。这种材料具有优异的耐化学品、耐热和电绝缘性能&#xff0c;使得PFA吸头在应用中表现出色。 首先&#xff0c;PFA吸头具有卓越的耐化学腐蚀性能。无论是酸性溶液、碱性…

环境保护:人类生存的最后机会

随着科技的进步和人类文明的不断发展&#xff0c;地球上的自然资源也在以惊人的速度消耗殆尽。人类对于环境的无止境的掠夺&#xff0c;使得我们的地球正面临着前所未有的环境危机。环境污染、全球变暖、大规模灭绝等问题不断困扰着我们&#xff0c;似乎指向了人类生存的最后机…

世微AP5414 锂电池升降压 恒流恒压 LED电源驱动IC

产品简介 AP5414 是一种输入电压范围宽&#xff08;0.8~5.5V&#xff09;&#xff0c;可调恒定电流和限定电流两种模式来 驱动白光 LED 而设计的升压型 DC/DC 变换器。该器件能利用单节或双节干电池驱动单 颗大功率白光 LED&#xff0c;同样可以利用一节锂电池驱动两颗、三颗或…

docker gpu 详细部署 video-retalking(跟着步骤打指令就完事了)

本地操作系统&#xff1a;centos 搞个小塔 1、首先在centos下安装宝塔&#xff08;后面会用到&#xff09; 建个容器 2、根据自己要的python版本修改一下语句&#xff0c;这里拉取的是python3.8.8的镜像 docker run -itd --name video-retalking --gpus all --shm-size&qu…

医院污水处理设备远程监控超标报警解决方案

行业背景 近年来&#xff0c;我国医疗机构建设得到了巨大的发展。根据《2022年我国卫生健康事业发展统计公报》&#xff0c;2022年末&#xff0c;全国医疗卫生机构总数达1032918个。截至2022年10月&#xff0c;根据全国排污许可证管理信息平台&#xff0c;共有 13316家医院核发…

ElasticSearch - networking配置global

版本8.11 单机部署了一个节点 在elasticsearch.yml中 配置了network.host: 8.8.8.8(之前为127.0.0.1) 但启动服务失败 报错信息为: BindTransportException: Failed to bind to 8.8.8.8:[9300-9399] 为啥要配置8.8.8.8 是因为参考的官方说明 Networking | Elasticsearch Gu…

RHEL8_Linux下载ansible

本章内容主要介绍RHEL8中如何安装ansible ansible时如何工作的在RHEL8中安装ansible 1.ansible工作原理 如果管理的服务器很多&#xff0c;如几十台甚至几百台&#xff0c;那么就需要一个自动化管理工具了&#xff0c;ansible就是这样的一种自动化管理工具。 1&…

AWS Ubuntu设置DNS解析(解决resolve.conf被覆盖问题)

众所周知&#xff1a; Ubuntu在域名解析时&#xff0c;最直接使用的是/etc/resolve.conf文件&#xff0c;它是/run/systemd/resolve/resolve.conf的软链接&#xff0c;而对于刚装完的ubuntu系统&#xff0c;该文件的内容如下 ubuntuip-172-31-36-184:/etc$ cat resolv.conf #…

Mysql workbench

下载地址: https://download.csdn.net/download/a876106354/88616595

EasyExcel实现⭐️本地excel数据解析并保存到数据库的脚本编写,附案例实现

目录 前言 一、 EasyExcel 简介 二、实战分析 1.Controller控制层 2. service方法和方法实现 3.EasyExcel相关类 3.1 excel表实体类 3.2 自定义监听器类 4.测试 4.1 准备工作 4.2 断点调试 5.生成脚本文件 三、分析总结 章末 小伙伴们大家好&#xff0c;最近开发的时…

spring 笔记三 Spring与Web环境集成

文章目录 Spring与Web环境集成ApplicationContext应用上下文获取方式导入Spring集成web的坐标置ContextLoaderListener监听器通过工具获得应用上下文对象SpringMVC概述SpringMVC快速入门 Spring与Web环境集成 ApplicationContext应用上下文获取方式 应用上下文对象是通过new …