惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

AWS News Blog
AWS News Blog
T
Tenable Blog
Project Zero
Project Zero
T
The Exploit Database - CXSecurity.com
L
LINUX DO - 热门话题
T
Threat Research - Cisco Blogs
T
Threatpost
Security Latest
Security Latest
C
Cisco Blogs
L
Lohrmann on Cybersecurity
S
Security @ Cisco Blogs
Google Online Security Blog
Google Online Security Blog
NISL@THU
NISL@THU
AI
AI
V
Vulnerabilities – Threatpost
Google DeepMind News
Google DeepMind News
C
Cyber Attacks, Cyber Crime and Cyber Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
The Last Watchdog
The Last Watchdog
G
GRAHAM CLULEY
Cloudbric
Cloudbric
H
Hackread – Cybersecurity News, Data Breaches, AI and More
H
Hacker News: Front Page
U
Unit 42
A
Arctic Wolf
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
MyScale Blog
MyScale Blog
O
OpenAI News
Scott Helme
Scott Helme
V2EX - 技术
V2EX - 技术
P
Proofpoint News Feed
博客园 - 叶小钗
Hugging Face - Blog
Hugging Face - Blog
云风的 BLOG
云风的 BLOG
V
Visual Studio Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Cyberwarzone
Cyberwarzone
博客园 - 【当耐特】
H
Heimdal Security Blog
S
Schneier on Security
阮一峰的网络日志
阮一峰的网络日志
Help Net Security
Help Net Security
D
DataBreaches.Net
Y
Y Combinator Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
TaoSecurity Blog
TaoSecurity Blog
K
Kaspersky official blog
N
News and Events Feed by Topic
WordPress大学
WordPress大学
P
Palo Alto Networks Blog

张鑫旭-鑫空间-鑫生活

1分钟速度了解text-align match-parent声明 « 张鑫旭-鑫空间-鑫生活 光标的形状也能设置了,就是CSS caret-shape属性 « 张鑫旭-鑫空间-鑫生活 pretext与文字四面环绕效果的实现 « 张鑫旭-鑫空间-鑫生活 JSON.rawJSON方法的作用是什么? « 张鑫旭-鑫空间-鑫生活 如何使用CSS判断鼠标从哪个方向进入元素? « 张鑫旭-鑫空间-鑫生活 借助mediabunny纯JS实现视频水印、剪裁、合成等功能 « 张鑫旭-鑫空间-鑫生活 务必谨慎使用JS WeakRef弱引用 « 张鑫旭-鑫空间-鑫生活 CSS六边形头像的实现与蜂巢布局 « 张鑫旭-鑫空间-鑫生活 CSS corner-shape与背景底纹技术 « 张鑫旭-鑫空间-鑫生活 浅学WebTransport API:下一代Web双向通信技术 « 张鑫旭-鑫空间-鑫生活 HTML dialog元素新支持了closedBy属性 « 张鑫旭-鑫空间-鑫生活 HTML interestfor属性与悬停popover交互效果 « 张鑫旭-鑫空间-鑫生活 CSS3模拟window7炫酷界面效果展示 « 张鑫旭-鑫空间-鑫生活 图片旋转+剪裁js插件(兼容各浏览器) « 张鑫旭-鑫空间-鑫生活 纯js无图片无外链CSS图片幻灯片播放插件 « 张鑫旭-鑫空间-鑫生活 CSS border三角、圆角图形生成技术简介 « 张鑫旭-鑫空间-鑫生活 CSS “渐进增强”在web制作中常见应用举例 « 张鑫旭-鑫空间-鑫生活 让IE6/IE7/IE8浏览器支持CSS3属性 « 张鑫旭-鑫空间-鑫生活 jQuery – 高亮动态显示页面HTML代码插件 « 张鑫旭-鑫空间-鑫生活 翻译 – 逐渐消失的Flash网站 « 张鑫旭-鑫空间-鑫生活 CSS reset的重新审视 – 避免样式重置 « 张鑫旭-鑫空间-鑫生活 新浪微博插入话题后部分文字选中的js实现 « 张鑫旭-鑫空间-鑫生活 JavaScript实现http地址自动检测并添加URL链接 « 张鑫旭-鑫空间-鑫生活 CSS实现兼容性的渐变背景(gradient)效果 « 张鑫旭-鑫空间-鑫生活 CSS content内容生成技术以及应用 « 张鑫旭-鑫空间-鑫生活 CSS gradient渐变之webkit核心浏览器下的使用 « 张鑫旭-鑫空间-鑫生活 CSS渐变之CSS3 gradient在Firefox3.6下的使用 « 张鑫旭-鑫空间-鑫生活 区分IE8/IE7/IE6及其他浏览器-CSS “\9″hack « 张鑫旭-鑫空间-鑫生活 CSS实现跨浏览器兼容性的盒阴影效果 « 张鑫旭-鑫空间-鑫生活 CSS3&HTML5各浏览器支持情况一览表 « 张鑫旭-鑫空间-鑫生活 翻译 – CSS Sprites:实用技术还是生厌之物? « 张鑫旭-鑫空间-鑫生活 纯CSS实现易拉罐3D滚动效果 « 张鑫旭-鑫空间-鑫生活 纯CSS实现侧边栏/分栏高度自动相等 « 张鑫旭-鑫空间-鑫生活 CSS+JavaScript实现页面不同布局的切换 « 张鑫旭-鑫空间-鑫生活 JavaScript实现最简单的拖拽效果 « 张鑫旭-鑫空间-鑫生活 自己写的无图片版jQuery zxxbox弹出框插件 « 张鑫旭-鑫空间-鑫生活 中国古代道家思想与网页重构的思考 « 张鑫旭-鑫空间-鑫生活 让所有浏览器支持HTML5 video视频标签 « 张鑫旭-鑫空间-鑫生活 纯CSS实现各类气球泡泡对话框效果 « 张鑫旭-鑫空间-鑫生活 JS HEX十六进制与RGB, HSL颜色的相互转换 « 张鑫旭-鑫空间-鑫生活 CSS实现兼容性的渐变、高光等文字效果 « 张鑫旭-鑫空间-鑫生活 去除冗余 – 精简您的CSS样式代码 « 张鑫旭-鑫空间-鑫生活 对overflow与zoom”清除浮动”的一些认识 « 张鑫旭-鑫空间-鑫生活 jQuery Pagination Ajax分页插件中文详解 « 张鑫旭-鑫空间-鑫生活 absolute绝对定位的非绝对定位用法 « 张鑫旭-鑫空间-鑫生活 网页布局思想浅议-淘宝新版首页为实例 « 张鑫旭-鑫空间-鑫生活 回流与重绘:CSS性能让JavaScript变慢? « 张鑫旭-鑫空间-鑫生活 CSS float浮动的深入研究、详解及拓展(二) « 张鑫旭-鑫空间-鑫生活 CSS float浮动的深入研究、详解及拓展(一) « 张鑫旭-鑫空间-鑫生活 60个极富创造性的震撼的电影海报设计 « 张鑫旭-鑫空间-鑫生活 jQuery Lightbox(balupton版)图片展示插件讲解 « 张鑫旭-鑫空间-鑫生活 博客内嵌flash音乐播放器代码、下载与使用 « 张鑫旭-鑫空间-鑫生活 CSS3 animate实现图片墙3D翻转效果 « 张鑫旭-鑫空间-鑫生活 图片旋转效果的一些研究、jQuery插件及实例 « 张鑫旭-鑫空间-鑫生活 CSS3 border-image详解、应用及jQuery插件 « 张鑫旭-鑫空间-鑫生活 jQuery-两款不同原理的圆角插件讲解 « 张鑫旭-鑫空间-鑫生活 页面可用性之outline轮廓外框的一些研究 « 张鑫旭-鑫空间-鑫生活 CSS3 transition实现超酷图片墙动画效果 « 张鑫旭-鑫空间-鑫生活 HTML CSS列表元素ul,ol,dl的研究与应用 « 张鑫旭-鑫空间-鑫生活 jQuery图片文本滚动切换插件jCarousel中文翻译与详解 « 张鑫旭-鑫空间-鑫生活 酷酷的jQuery鼠标悬停图片放大切换显示效果 « 张鑫旭-鑫空间-鑫生活 IE6下z-index犯癫不起作用bug的初步研究 « 张鑫旭-鑫空间-鑫生活 checkbox复选框的一些深入研究与理解 « 张鑫旭-鑫空间-鑫生活 jQuery之使用slideToggle实现垂直下拉菜单 « 张鑫旭-鑫空间-鑫生活 jQuery-innerfade内部列表自动淡入淡出插件 « 张鑫旭-鑫空间-鑫生活 jQuery-火焰灯效果导航菜单 « 张鑫旭-鑫空间-鑫生活 IE下css bug集合-翻译自haslayout.net « 张鑫旭-鑫空间-鑫生活 翻译-IE7/8@font-face嵌入字体与文字平滑 « 张鑫旭-鑫空间-鑫生活 jQuery-马化腾产品设计与用户体验的一些技术实现 « 张鑫旭-鑫空间-鑫生活 像素的世界及其在web开发制作中的应用 « 张鑫旭-鑫空间-鑫生活 css行高line-height的一些深入理解及应用 « 张鑫旭-鑫空间-鑫生活 CSS实现圆角六色渐变自适应按钮详解 « 张鑫旭-鑫空间-鑫生活 我熟知的三种三栏网页宽度自适应布局方法 « 张鑫旭-鑫空间-鑫生活 jQuery照片图像剪裁插件Jcrop中文翻译详解 « 张鑫旭-鑫空间-鑫生活 Ajax Upload多文件上传插件翻译及中文演示 « 张鑫旭-鑫空间-鑫生活 告别图片—使用字符实现兼容性的圆角尖角效果beta版 « 张鑫旭-鑫空间-鑫生活 大小不固定的图片、多行文字的水平垂直居中 « 张鑫旭-鑫空间-鑫生活 jQuery boxy弹出层对话框插件中文演示及讲解 « 张鑫旭-鑫空间-鑫生活 JavaScript实现新浪微博文字放大显示动画效果 « 张鑫旭-鑫空间-鑫生活 翻译:让网络更快一些——最小化浏览器中的回流(reflow) « 张鑫旭-鑫空间-鑫生活 jQuery之addClasas与removeClass使用实例 « 张鑫旭-鑫空间-鑫生活 关于Google圆角高光高宽自适应按钮及其拓展 « 张鑫旭-鑫空间-鑫生活 JavaScript实现图片幻灯片滚动播放动画效果 « 张鑫旭-鑫空间-鑫生活 jQuery-鼠标经过显示大图并跟随鼠标效果插件 « 张鑫旭-鑫空间-鑫生活 关于gif图片(或png8)杂边锯齿的问题 « 张鑫旭-鑫空间-鑫生活 对html与body的一些研究与理解 « 张鑫旭-鑫空间-鑫生活 鲜为人知的一个解决兼容性问题的利器——小数 « 张鑫旭-鑫空间-鑫生活 搜狐白社会似iphone短信对话框效果的优化 « 张鑫旭-鑫空间-鑫生活 关于文字内容溢出用点点点(…)省略号表示 « 张鑫旭-鑫空间-鑫生活 jquery之append与insertBefore使用实例 « 张鑫旭-鑫空间-鑫生活 jQuery之图片关联伸缩效果 « 张鑫旭-鑫空间-鑫生活 jquery之图片左右切换动画效果 « 张鑫旭-鑫空间-鑫生活 jQuery之replace字符串替换实现不同尺寸图片切换 « 张鑫旭-鑫空间-鑫生活 jQuery-实现图片的放大镜显示效果 « 张鑫旭-鑫空间-鑫生活 jQuery-单击文字或图片内容放大显示效果插件 « 张鑫旭-鑫空间-鑫生活 reflection.js-实现图片投影倒影效果js插件 « 张鑫旭-鑫空间-鑫生活 jQuery-很酷的弹出层效果js插件 « 张鑫旭-鑫空间-鑫生活 复选框单选框与文字对齐问题的研究与解决 « 张鑫旭-鑫空间-鑫生活 css margin的相关属性,问题及应用 « 张鑫旭-鑫空间-鑫生活 IE6下png背景不透明问题的综合拓展 « 张鑫旭-鑫空间-鑫生活
CSS color-scheme属性与light-dark()颜色函数 « 张鑫旭-鑫空间-鑫生活
张鑫旭,zhangxinxu · 2026-06-24 · via 张鑫旭-鑫空间-鑫生活

by zhangxinxu from https://www.zhangxinxu.com/wordpress/?p=12241
本文可全文转载,但需要保留原作者、出处以及文中链接,AI抓取保留原文地址,任何网站均可摘要聚合,商用请联系授权。

一、从light-dark()颜色函数开始

light-dark()这个 CSS 函数接受两种颜色或两个图像,并根据当前页面的配色方案返回一种颜色或一个图像,无需 prefers-color-scheme 媒体查询进行匹配。

关于prefers-color-scheme

prefers-color-scheme媒体查询在“你不知道的CSS media查询与用户体验”一文中有介绍过,可以匹配系统层面设置的是深色模式,还是浅色模式。

深色模式设置截图

/* 深⾊模式 */
@media (prefers-color-scheme: dark) {}
/* 浅⾊模式 */
@media (prefers-color-scheme: light) {}

这个媒体查询设计初衷是好的,但是落地到实际开发中,却是个鸡肋。

为何?很简单,只有高级用户才会在系统层面设置深色模式还是浅色模式,对于客户端的软件而言(网页也包括在内),对用户体验友好的交互方式应该是在当前的应用程序中直接设置。

比方说我正在看一篇小说,关灯之后,我想保护眼睛,就开启深色模式,此时,最好的方法应该是直接在当前阅读页面唤起深浅模式切换的开关来实现,而不应该让用户千里迢迢跑到系统设置里面去设置(网页没有开关系统设置的权限)。

也就是因为这个实际需求,才CSS才设计了一个名为color-scheme的属性,可以不依赖系统层面的设置,自定义深色还是浅色模式。

二、color-scheme属性简介

color-scheme属性可以改变网页上浏览器内置组件的配色。

要知道,如今的浏览器默认组件其实内置了深浅两套配色,color-scheme属性可以对其进行切换设置。

眼见为实,大家可以选择下面这个下拉框,切换配色方案,就可以看到表单控件样式的变化了:

最关键的代码就是下面这段:

选择深浅模式:<select onchange="document.body.style.colorScheme = this.value">
  <option value="light">浅色主题</option>
  <option value="dark">深色主题</option>
</select>

color-scheme的局限

color-scheme虽然可以设置深浅主题,但是只能改变浏览器内置的控件样式、选区样式等,实际开发肯定不是这个样子,你要进入深色配色,肯定是整体进入,而不是局部,否则你看下面这种样式效果,比小强粑粑还要丑!

深色效果截图示意

怎么办?

使用prefers-color-scheme媒体查询匹配并进行针对性的设置!

等等!

等一下表情包

你刚不是说prefers-color-scheme是鸡肋吗?

哎呀,你急什么急呢,我还没说完。

之前的使用指南确实是prefers-color-scheme进行匹配,虽然我也搞不懂为啥!明明是互相不影响的两个特性。

Component authors must use the prefers-color-scheme media feature to support the color schemes on the rest of the elements.

总而言之,就是在之前,关于颜色主题,CSS设计了不少东西,但就是不实用,还很麻烦,怎一个失败了得!

于是,还未放弃的规范制定者们又设计了一个新的CSS函数,没错,就是本文要介绍的light-dark()颜色函数。

三、细说 light-dark() CSS函数

color-scheme属性与light-dark()颜色函数配合,这才真正意义上把深浅配色的自定义能力完全抓在了开发者手中。

语法

/* 关键颜色值 */
light-dark(black, white);

/* RGB颜色值 */
light-dark(
  rgb(0 0 0),
  rgb(255 255 255)
);

/* 图片 */
light-dark(
  url("light-icon.png"),
  url("dark-icon.png")
);

/* 渐变图像 */
light-dark(
  linear-gradient(135deg, ghostwhite 20%, tomato),
  linear-gradient(45deg, darkslategray 20%, gold)
);

/* 自定义属性 */
light-dark(
  var(--light),
  var(--dark)
);

注意,虽然语法上显示支持图像类型,但是到目前为止,只有Firefox支持图像切换,大多数浏览器仅支持颜色设置。

案例

color-schemelight-dark()才是真正意义上的黄金搭档。

color-scheme用来控制是深色还是浅色,light-dark()基于color-scheme的设置,选择应该渲染哪个颜色。

举个例子:

<section class="section">
  选择深浅模式:<select id="select" onchange="document.body.style.colorScheme = this.value">
    <option value="light">浅色主题</option>
    <option value="dark">深色主题</option>
  </select>
  <p>
    输入框:<input type="text">
    <textarea rows="3">
    滚动条
    滚动条
    滚动条
    滚动条
    滚动条
    </textarea>
  </p>
  选择框:<input type="radio"> <input type="checkbox">
</section>

外部<section>元素通过light-dark()函数设置了深浅配色,CSS如下所示:

.section {
  border:1px dashed light-dark(#ddd, transparent);
  background:light-dark(white, black);
  color: light-dark(black, white); 
  padding: 16px;
}

此时,当选择深色主题的时候,就会有如下所示的渲染效果,明显看起来舒服多了:

深色效果示意

兼容性

light-dark()函数从2024年开始被各大浏览器支持,兼容性还算可以,在一些内部产品中已经可以大胆使用了。

light-dark()兼容性

四、再提一嘴prefers-contrast颜色查询

虽然light-dark()函数的语义是深浅主题切换,但是我们实际开发并不一定要朝着深浅方向走,只要是配色主题都可以使用。

例如,正常配色主题,和高对比度主题。

这就需要提一下prefers-contrast @media 查询语法了。

例如:

/* 如果是高对比度,采用dark配色渲染 */
@media (prefers-contrast: more) {
  :root {
    color-scheme: dark;
  }
}

很棒的用户体验增强处理,如果用户设置了设备是高对比度,那我们就是要dark模式。

只是,在国内,这类与用户体验细节密切相关的特性缺乏关注与市场,所以,我就不进一步展开介绍了,大家了解下有这么个东西就好了。

附上兼容性,还不错。

prefers-contrast媒体查询兼容性

五、最后要不再扯点什么

今天有个同行拉我进了一个群,群名很有意思,叫做“前端夕阳群”,我就是看到这么群名才加入的。

一进群,就看到齐刷刷的“看我的博客成长”这样的言论,顿时内心一阵唏嘘。

他妈的时间过得可真快,一晃,入行都已经16年了,16年了啊,当年在出租屋闭关学习的场景还历历在目,在租住小区外面吃面见到一个倾心妹子迟迟不敢搭讪的经历也历历在目。

眼下早已没了当年一往无前,锐意进取的心态。

学也学习,输出也没停,工作依然积极,AI加持下,四个项目并行都不成问题,只是职业发展肉眼可见的到头,公司也是一直不温不火的,一颗改变世界的心也舍不得就这么算了,行业也不景气,人的心态也开始拧巴了。

目前就处在保持现状,走一步看一步的状态。

嗯,就先说这么多吧,下篇文章继续碎碎念吧。

克莱恩

本文为原创文章,会经常更新知识点以及修正一些错误,因此转载请保留原出处,方便溯源,避免陈旧错误知识的误导,同时有更好的阅读体验。
本文地址:https://www.zhangxinxu.com/wordpress/?p=12241

(本篇完)