浅色和深色主题#

您可以使用内置的“深色”和“浅色”模式更改此主题的主要背景/前景颜色。这些由导航标题中的按钮控制,具有以下选项

  • 一个 light 主题,具有明亮的背景和深色文本/UI 元素

  • 一个 dark 主题,具有深色背景和浅色文本/UI 元素

  • auto: 文档主题将遵循您设置的系统默认值

配置默认主题模式#

默认情况下,访问您文档的访问者将使用 auto 主题模式。这将根据用户的系统设置选择一个主题,如果未找到系统设置,则默认为 light

如果您希望使用其他默认主题模式,请将 default_mode 配置设置为 autodarklight 之一。例如

html_context = {
   # ...
   "default_mode": "light"
}

有关更多信息,请参阅 浅色和深色主题.

提示

要完全删除主题管理,请在您的文档中将 default_mode 配置为您想要的 value (lightdark),然后从标题导航栏配置的 navbar_end 部分中删除主题切换器

html_theme_options {
    ...
    # Note we have omitted `theme-switcher` below
    "navbar_end": ["navbar-icon-links"]
}

自定义浅色和深色主题的 CSS#

危险

主题仍然是一个 Beta 功能,因此与颜色主题相关的变量将来可能会更改。对自定义进行的更改不保证向后兼容。

要以依赖于主题的方式自定义页面元素的 CSS,请使用 html[data-theme='<THEME>'] CSS 选择器。例如,要为浅色和深色主题定义不同的背景颜色

/* anything related to the light theme */
html[data-theme="light"] {

    /* whatever you want to change */
    background-color: white;
}

/* anything related to the dark theme */
html[data-theme="dark"] {

    /* whatever you want to change */
    background-color: black;
}

可以在 CSS 样式部分 中找到此主题中使用的所有颜色的完整列表。

主题依赖的图像和内容#

可以使用不同的内容用于浅色和深色模式,以便内容仅在特定主题处于活动状态时显示。这对于您的内容依赖于主题样式的情况很有用,例如具有浅色或深色背景的 PNG 图像。

有 **两个 CSS 辅助类** 用于将页面上的项目指定为特定于主题。这些是

  • only-dark: 仅在深色主题处于活动状态时显示元素。

  • only-light 仅在浅色主题处于活动状态时显示元素。

例如,以下页面内容定义了两个图像,每个图像都使用上述不同的类之一。更改主题,应该显示新的图像。

.. image:: https://source.unsplash.com/200x200/daily?cute+cat
    :class: only-dark

.. image:: https://source.unsplash.com/200x200/daily?cute+dog
    :class: only-light
```{image} https://source.unsplash.com/200x200/daily?cute+cat
:class: only-dark
```

```{image} https://source.unsplash.com/200x200/daily?cute+dog
:class: only-light
```
https://source.unsplash.com/200x200/daily?cute+cat https://source.unsplash.com/200x200/daily?cute+dog

在两种主题中都可以使用的图像和内容#

当 **深色主题** 激活时,不支持深色模式的图像将自动添加白色背景以确保图像内容可见,并且其亮度将通过过滤器降低。

如果您的图像适合深色主题,请添加 CSS 类 only-dark,如上所述。如果您的图像适合浅色和深色主题,请添加 CSS 类 dark-light 以使您的图像与主题无关。

例如,以下是一个没有添加此辅助类的图像。更改为深色主题,将出现灰色背景。

.. image:: https://source.unsplash.com/200x200/daily?cute+cat
    :class: p-2
```{image} https://source.unsplash.com/200x200/daily?cute+cat
:class: p-2
```
https://source.unsplash.com/200x200/daily?cute+cat

以下是添加此类的同一图像

.. image:: https://source.unsplash.com/200x200/daily?cute+cat
    :class: dark-light
```{image} https://source.unsplash.com/200x200/daily?cute+cat
:class: dark-light p-2
```
https://source.unsplash.com/200x200/daily?cute+cat

定义自定义 JavaScript 来响应主题更改#

您可以定义一个 JavaScript 事件钩子,该钩子将在每次主题更改时运行您的代码。如果您需要更改无法通过 CSS 规则定义的页面元素,这很有用。例如,要更改 data-theme 更改时图像源(例如,徽标),可以使用这样的代码段

.. raw:: html

    <script type="text/javascript">
    var observer = new MutationObserver(function(mutations) {
        const dark = document.documentElement.dataset.theme == 'dark';
        document.getElementsByClassName('mainlogo')[0].src = dark ? '_static/my_logo_dark.svg' : "_static/my_logo_light.svg";
    })
    observer.observe(document.documentElement, {attributes: true, attributeFilter: ['data-theme']});
    </script>
    <link rel="preload" href="_static/my_logo_dark.svg" as="image">

.. image:: _static/my_logo_light.svg
    :alt: My Logo
    :class: logo, mainlogo
    :align: center
<script type="text/javascript">
var observer = new MutationObserver(function(mutations) {
    const dark = document.documentElement.dataset.theme == 'dark';
    document.getElementsByClassName('mainlogo')[0].src = dark ? '_static/my_logo_dark.svg' : "_static/my_logo_light.svg";
})
observer.observe(document.documentElement, {attributes: true, attributeFilter: ['data-theme']});
</script>
<link rel="preload" href="_static/my_logo_dark.svg" as="image">

```{image} _static/my_logo_light.svg
:alt: My Logo
:class: logo, mainlogo
:align: center
```

JavaScript 响应 data-theme 更改以更改 img,并且 link 用于预加载深色图像。有关更多信息,请参阅 MutationObserver 文档