CSS Preferreds-reduced-transparency

针对喜欢不透明界面的用户进行优化和调整。

Adam Argyle
Adam Argyle

从 Chrome 118 开始,CSS 媒体查询 5 中的新媒体查询功能 prefers-reduced-transparency 已推出。非不透明界面可能会引起头痛,或者导致各类视觉缺陷的视觉疲劳。因此,Windows、macOS 和 iOS 都提供了系统偏好设置,可降低或移除界面的透明度。

浏览器支持

  • Chrome:118.
  • Edge:118。
  • Firefox:需要切换标志才能使用。
  • Safari:不支持。

来源

在浏览器中添加此新媒体查询后,CSS 可以针对希望降低透明度的用户调整界面:

.example {
  --opacity: .5;

  background: hsl(200 100% 50% / var(--opacity));

  @media (prefers-reduced-transparency: reduce) {
    --opacity: .95;
  }
}

在前面的代码示例中,CSS 变量在 50% 处存储不透明度值,然后该值与 HSL 一起用于创建半透明的蓝色背景。嵌套媒体查询会检查用户偏好设置以降低透明度,如果为 true,则会将不透明度变量调整为 95%(近乎不透明的不透明度值)。

此媒体查询与其他偏好媒体查询非常契合,可让设计师和开发者发挥创意,同时为用户进行调整。您可以将这些媒体查询视为汽车座椅,可根据用户自动调整位置;当用户访问您的网站时,系统会自动根据用户调整,而无需用户进行任何操作。太酷了。

降低透明度的用例

接下来的几个部分将重点介绍如何以有意义的方式减少透明度。

图片上的半透明字幕

在图片或视频缩略图上叠加半透明的字幕或摘要非常常见。以下示例展示了处理降低透明度的偏好设置的一种方法。系统会完全移除叠加层,并在图片下方显示相同的字幕内容,而不是叠加显示。

透明模态窗口、通知和弹出式窗口

界面元素叠加内容的另一种方式(通常意味着存在不透明元素)是使用模态窗口、通知和弹出式窗口。在这些情况下,提高不透明度可以遵循用户偏好设置,同时仍允许叠加层后面的颜色微微透出。

.card {
  background: hsl(none none 100% / 20%);

  @media (prefers-reduced-transparency: reduce) {
    background: hsl(none none 0% / 80%);
  }
}

自适应磨砂玻璃

另一种流行的图片叠加样式是磨砂玻璃。在以下示例中,商品图片的镜像反射是标题后面的图片。这样做有两个好处:图片不会被剪裁,并且最终结果中浅色或深色偏好设置的效果会更明显。

.adaptive-glass {
  --glass-lightness: 100%;
  --glass-alpha: 50%;

  background: hsl(0 0% var(--glass-lightness) / var(--glass-alpha));
  backdrop-filter: blur(40px);

  @media (prefers-color-scheme: dark) {
    --glass-lightness: 0%;
  }

  @media (prefers-reduced-transparency: reduce) {
    --glass-alpha: 85%;
  }
}

主标题

常见的首页元素会在循环视频或动画图片上叠加粗体消息。以下示例使用了色彩丰富的半透明渐变叠加层和无限动画背景图片。虽然这可能会吸引许多人的目光,但由于透明度较低且无法控制动作,也会给许多人带来问题。

可以通过以下两个 CSS 媒体查询解决此问题:prefers-reduced-motion 和 preferences-reduced-transparency。在减少动作的媒体查询中,仅当用户对减少动作具有“无偏好”时,您才能应用无限动画,以指示代码此用户可以进行动作。

此外,借助降低透明度的媒体查询,您可以降低不透明度,使叠加层颜色接近 100%。现在,用户可以轻松阅读消息,而不会出现运动分心或有问题的对比度。

将所有这些因素综合起来,您就可以部署富有创意的界面外观,同时确保目标受众群体能够阅读并理解其中的信息。

.Hero img {
  @media (prefers-reduced-motion: no-preference) {
    animation: zoom 30s ease infinite;
  }
}

.Hero .overlay {
  background: hsl(none none 0% / 95%);

  @media (prefers-reduced-transparency: no-preference) {
    background: linear-gradient(
      to top right in oklab,
      oklch(40% 0.3 340 / 70%),
      oklch(40% 0.4 200 / 70%)
    );
  }
}
这个 Pen

对用户偏好加减视角

上面的示例未检查这些用户的偏好降低程度,而是检查无偏好。

@media (prefers-reduced-transparency: no-preference) {
  
}

开发者和设计师通常会根据这些偏好设置,以减法思维“回退”用户体验。这在媒体查询中表现为对“缩减”的检查,此时系统会从界面中移除某些内容。该示例展示了一种增补性思维,即在用户同意的情况下添加动画和透明度。

这种方法有助于您思考一个独立且稳健的健康基准体验。然后,如果用户同意,请添加到体验中。

开发者工具

Chrome 开发者工具可以在“渲染”标签页中模拟此偏好设置,以降低透明度(及其他)。在以下视频中,了解如何切换 prefers-color-scheme 和 prefers-reduced-transparency 媒体查询,以展示磨砂玻璃卡片的浅色、深色、透明和降低透明度的变体。

https://codepen.io/web-dot-dev/pen/dyaojxr