prefers-color-scheme:CSS媒体查询

上的 

我欣赏的一个设备和应用程序功能是能够在亮模式和暗模式之间切换。如果你曾经深夜编码或阅读,你就会知道黑色主题对于防止眼睛疲劳和由此引起的头痛有多么神奇。macOS最近实现了本机暗模式,但该模式不会将网站转换为暗界面,因此无论本机主题如何,您仍然可以获得明亮的网站。如果网站也会根据用户的系统偏好变暗或变亮,这不是很令人惊讶吗?

CSS工作组同意,这就是为什么他们创建了首选颜色方案媒体查询; 一个媒体查询,显示用户的主题偏好,并允许您对站点进行编码以匹配该偏好!

这个首选颜色方案媒体查询有两个有效值,您可以指定:黑暗的:

/*灯光模式*/@媒体(首选颜色模式:浅色){html格式{背景:白色;颜色:黑色;}}/*黑暗模式*/@媒体(首选颜色模式:深色){html格式{背景:黑色;颜色:白色;}}

结合默认站点设计,您可以提供三种不同的设计:默认(无参考)、浅色修改和深色修改。

为了更容易管理每种模式下的颜色,您可以简单地修改媒体查询中的CSS变量:

/*默认值*/:root{--背景色:粉红色;--color-scheme-text-color:红色;}/*灯光模式*/@媒体(首选颜色模式:浅色){:root{--彩色背景:白色;--color-scheme-text-color:黑色;}}/*黑暗模式*/@媒体(首选颜色模式:深色){:root{--配色方案背景:黑色;--color-scheme-text-color:白色;}}/*用法*/html格式{背景:var(--color-scheme-background);color:var(--配色方案文本颜色);}

如果您想使用JavaScript了解用户喜欢哪种模式,可以通过以下方式轻松实现获取CSS变量值:

html格式{内容:“”;/*(ab)使用content属性*/}/*灯光模式*/@媒体(首选颜色模式:浅色){html格式{内容:“轻”;/*(ab)使用内容属性*/}}/*黑暗模式*/@媒体(首选颜色模式:深色){html格式{内容:“深色”;/*(ab)使用content属性*/}}
const模式=getComputedStyle(document.documentElement).getPropertyValue('content');//模式:“暗”

我很高兴有官方媒体查询颜色/主题偏好。作为一个患有轻微头痛和头骨麻木偏头痛的人,我的偏好总是一个黑暗的主题,我很欣赏那些为我提供无痛用户体验而付出额外努力的应用程序。我们已经使用媒体查询来适应打印和不同的视口大小,所以让我们采取额外的步骤,根据用户的偏好提供颜色!

注意:在发布时,只有Safari Preview 68实现了此媒体查询。跟随Bugzilla错误1494034了解Firefox的支持状态。

最近的功能

  • CSS筛选器

    CSS过滤器支持最近在WebKit夜间节目中登陆。CSS筛选器提供一种方法,用于修改基本DOM元素、图像或视频的呈现。CSS过滤器允许模糊、扭曲和修改元素的颜色强度。让我们。。。

  • 9令人震惊的画布演示

    这个<画布>元素对我们队伍中的视觉专家来说是一个启示。画布提供了令人难以置信且高效的动画方式,并增加了无Flash的额外功能;这些开发人员可以展示他们可怕的JavaScript技能。这里有九个令人难以置信的帆布演示。。。

令人难以置信的演示

讨论

  1. 大卫·S·。

    window.matchMedia()不为此工作吗?

  2. 蒂莫西·哈彻

    对,matchMedia(匹配媒体)确实有效。所以这比使用计算样式要好。

    • 巴里·K·。
      matchMedia('(首选颜色模式:深色)').matchesmatchMedia('(prefers-color-scheme:light)').matches

将代码打包<pre class=“{language}”>标签,链接到GitHub要点、JSFiddle提琴或CodePen笔进行嵌入!