主题设置

甚至品牌推广也可以是自适应的。您可以调整网站的呈现方式以匹配用户的偏好。但首先,介绍一下如何扩展网站的品牌推广,使其包含浏览器本身。

自定义浏览器界面

某些浏览器允许您根据网站的调色板建议主题颜色。浏览器的界面会适应您建议的颜色。在页面的 head 中,在名为 theme-colormeta 元素中添加颜色。

<meta name="theme-color" content="#00D494">
Clearleft dot com. Resilient Web Design dot com. The Session dot org.
三个网站在 Safari 浏览器中查看。每个网站都有自己的主题颜色,延伸到浏览器界面。

您可以使用 JavaScript 更新 theme-color 的值。但请明智地使用此功能。如果用户的浏览器配色方案更改过于频繁,可能会让用户感到不知所措。考虑以微妙的方式调整主题颜色。如果更改过于突兀,用户会因恼怒而离开。

您还可以在 Web 应用清单文件中指定主题颜色。这是一个包含网站元数据的 JSON 文件。

从文档的 head 链接到清单文件。使用 rel 值为 manifestlink 元素。

<link rel="manifest" href="/manifest.json">

在清单文件中,使用键/值对列出您的元数据。

{
  "short_name": "Clearleft",
  "name": "Clearleft design agency",
  "start_url": "/",
  "background_color": "#00D494",
  "theme_color": "#00D494",
  "display": "standalone"
}

如果访问者决定将您的网站添加到其主屏幕,浏览器将使用清单文件中的信息来显示相应的快捷方式。

提供深色模式

许多操作系统允许用户指定浅色或深色调色板的偏好,这对于根据用户的主题偏好优化您的网站来说是一个好主意。您可以在名为 prefers-color-scheme 的媒体功能中访问此偏好。

@media (prefers-color-scheme: dark) {
  // Styles for a dark theme.
}

meta 元素中使用 prefers-color-scheme 媒体功能指定主题颜色。

<meta name="theme-color" content="#ffffff" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#000000" media="(prefers-color-scheme: dark)">

您还可以在 SVG 内部使用 prefers-color-scheme 媒体功能。如果您使用 SVG 文件作为网站图标,则可以针对深色模式进行调整。Thomas Steiner 撰写了关于 prefers-color-scheme 在 SVG 网站图标中用于深色模式图标的文章。

使用自定义属性进行主题设置

如果您在整个 CSS 中的多个位置使用相同的颜色值,则在 prefers-color-scheme 媒体查询中重复所有选择器可能会非常繁琐。

body {
  background-color: white;
  color: black;
}
input {
  background-color: white;
  color: black;
  border-color: black;
}
button {
  background-color: black;
  color: white;
}
@media (prefers-color-scheme: dark) {
  body {
    background-color: black;
    color: white;
  }
  input {
    background-color: black;
    color: white;
    border-color: white;
  }
  button {
    background-color: white;
    color: black;
  }
}

使用 CSS 自定义属性来存储您的颜色值。自定义属性的工作方式类似于编程语言中的变量。您可以更新变量的值,而无需更新其名称。

如果您在 prefers-color-scheme 媒体查询中更新自定义属性的值,则无需编写两次所有选择器。

html {
  --page-color: white;
  --ink-color: black;
}
@media (prefers-color-scheme: dark) {
  html {
    --page-color: black;
    --ink-color: white;
  }
}
body {
  background-color: var(--page-color);
  color: var(--ink-color);
}
input {
  background-color: var(--page-color);
  color: var(--ink-color);
  border-color: var(--ink-color);
}
button {
  background-color: var(--ink-color);
  color: var(--page-color);
}

请参阅构建配色方案,了解有关使用自定义属性进行主题设置的更高级示例。

图片

如果您在 HTML 中使用 SVG,您也可以在那里应用自定义属性。

svg {
  stroke: var(--ink-color);
  fill: var(--page-color);
}

现在,您的图标将随页面上的其他元素一起更改颜色。

如果您想在深色模式下显示摄影图像时降低其亮度,可以在 CSS 中应用滤镜。

@media (prefers-color-scheme: dark) {
  img {
    filter: brightness(.8) contrast(1.2);
  }
}
Three photographs at normal brightness. Three photographs with slightly less brightness.
效果很微妙,但您可以降低深色模式下图像的亮度。

对于某些图像,您可能希望在深色模式下完全替换它们。例如,您可能希望显示具有较暗配色方案的地图。使用 <picture> 元素,其中包含带有 prefers-color-scheme 媒体查询的 <source> 元素。

<picture>
  <source srcset="darkimage.png" media="(prefers-color-scheme: dark)">
  <img src="lightimage.png" alt="A description of the image.">
</picture>
Two maps of Broolyn, one using light colors and the other using dark colors.
同一地图的两个版本,一个用于浅色模式,另一个用于深色模式。

表单

浏览器为表单字段提供默认调色板。让浏览器知道您的网站同时提供深色和浅色模式。这样,浏览器可以为表单提供适当的默认样式。

将其添加到您的 CSS

html {
  color-scheme: light;
}
@media (prefers-color-scheme: dark) {
  html {
    color-scheme: dark;
  }
}

您还可以使用 HTML。将其添加到文档的 head

<meta name="supported-color-schemes" content="light dark">

使用 CSS 中的 accent-color 属性来设置复选框、单选按钮和一些其他表单字段的样式。

html {
  accent-color: red;
}

深色主题通常具有柔和的品牌颜色。您可以更新深色模式的 accent-color 值。

html {
  accent-color: red;
}
@media (prefers-color-scheme: dark) {
  html {
    accent-color: pink;
  }
}

为此使用自定义属性是有意义的,这样您就可以将所有颜色声明放在一个位置。

html {
  color-scheme: light;
  --page-color: white;
  --ink-color: black;
  --highlight-color: red;
}
@media (prefers-color-scheme: dark) {
  html {
    color-scheme: dark;
    --page-color: black;
    --ink-color: white;
    --highlight-color: pink;
  }
}
html {
  accent-color: var(--highlight-color);
}
body {
  background-color: var(--page-color);
  color: var(--ink-color);
}

提供深色模式只是使您的网站适应用户偏好的一个示例。接下来,您将学习如何使您的网站适应各种无障碍功能考虑因素。

检查您的理解情况

测试您关于主题设置的知识

要提供影响网页外部浏览器的主题颜色,请使用

CSS
CSS 主题信息可能会导致普通颜色闪烁,这是一种不良的用户体验。
JavaScript
仅当您使用它来更新 'theme-color' <meta> 标记时。
Web 应用清单
manifest.json 可以提供,其中包含用于指定主题颜色的字段,用于为从移动设备主屏幕打开的应用的外观着色。
'theme-color' <meta> 标记
浏览器可以尽快注意到 <head> 标记中的此主题颜色,从而避免不必要的颜色闪烁。

要连接到用户关于浅色或深色主题的系统偏好,请使用

(prefers-color-scheme) 媒体查询
传递您要检查的值(例如浅色或深色),就可以开始了。
JavaScript
然后使用 CSS 媒体查询语法来询问偏好的当前状态。

因此,您支持深色主题,但所有表单输入仍然是浅色主题。您能做什么?

html { color-scheme: light dark; } 添加到您的 CSS 中。
这从 CSS 发出信号,表明表单输入应与系统配色方案匹配。
<meta name="supported-color-schemes" content="light dark"> 添加到您的 HTML <head> 标记中。
这从 HTML 发出信号,表明表单输入应与系统配色方案匹配。
编写大量 CSS 以更改输入的所有默认值。
这也有效,但有点困难。