跳到主要内容

从 v5.3.0 开始,Bootstrap 现在支持颜色模式或主题。探索我们的默认浅色模式和新的深色模式,或者使用我们的样式作为模板创建你自己的模式。

自己动手试试吧! 下载源代码和使用 Bootstrap 与 Stylelint 的工作示例,以及来自 twbs/examples 仓库 的颜色模式。

深色模式

Bootstrap 现在支持颜色模式,从暗色模式开始! 在 v5.3.0 中,你可以实现你自己的颜色模式切换器(参见下面的 Bootstrap 文档示例),并根据需要应用不同的颜色模式。我们支持浅色模式(默认)和现在的暗色模式。颜色模式可以在 <html> 元素上全局切换,也可以在特定组件和元素上切换,这得益于 data-bs-theme 属性。

另外,你也可以通过我们的颜色模式 mixin 切换到媒体查询实现——详情请参阅使用部分。不过需要注意的是——这会取消你按组件更改主题的能力,如下所示。

示例

例如,要更改下拉菜单的颜色模式,添加 data-bs-theme="light" 或者 data-bs-theme="dark" 给家长 .dropdown现在,无论全局颜色模式如何,这些下拉菜单都会显示指定的主题值。

HTML
<div class="dropdown" data-bs-theme="light">
  <button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButtonLight" data-bs-toggle="dropdown" aria-expanded="false">
    Default dropdown
  </button>
  <ul class="dropdown-menu" aria-labelledby="dropdownMenuButtonLight">
    <li><a class="dropdown-item active" href="#">Action</a></li>
    <li><a class="dropdown-item" href="#">Action</a></li>
    <li><a class="dropdown-item" href="#">Another action</a></li>
    <li><a class="dropdown-item" href="#">Something else here</a></li>
    <li><hr class="dropdown-divider"></li>
    <li><a class="dropdown-item" href="#">Separated link</a></li>
  </ul>
</div>

<div class="dropdown" data-bs-theme="dark"> <button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButtonDark" data-bs-toggle="dropdown" aria-expanded="false"> Dark dropdown </button> <ul class="dropdown-menu" aria-labelledby="dropdownMenuButtonDark"> <li><a class="dropdown-item active" href="#">Action</a></li> <li><a class="dropdown-item" href="#">Action</a></li> <li><a class="dropdown-item" href="#">Another action</a></li> <li><a class="dropdown-item" href="#">Something else here</a></li> <li><hr class="dropdown-divider"></li> <li><a class="dropdown-item" href="#">Separated link</a></li> </ul> </div>

它是如何工作的

  • 如上所示,颜色模式样式由...控制 data-bs-theme 属性。此属性可以应用于 <html> 元素,或任何其他元素或Bootstrap组件。如果应用于 <html> 元素,它将应用于所有内容。如果应用于组件或元素,它将仅限于该特定组件或元素。

  • 对于你希望支持的每种颜色模式,你都需要为共享的全局 CSS 变量添加新的覆盖。我们在我们的中已经这样做了 _root.scss 暗模式的样式表,默认值为亮模式。在编写颜色模式特定的样式时,使用mixin(mixin):

    // Color mode variables in _root.scss
    @include color-mode(dark) {
      // CSS variable overrides here...
    }
    
  • 我们使用自定义 _variables-dark.scss 为那些共享的全局 CSS 变量覆盖提供暗模式支持。这个文件对于你自己的自定义颜色模式不是必需的,但对于我们的暗模式有两个原因是必需的。首先,将全局颜色重置集中在一个地方更好。其次,一些 Sass 变量必须被覆盖,以适应嵌入在我们的 CSS 中的折叠面板、表单组件等的背景图像。

用法

启用暗黑模式

通过将 data-bs-theme="dark" 属性添加到 <html> 元素,可以在整个项目中启用内置暗色模式。这将把暗色模式应用到所有组件和元素,除了那些应用了特定 data-bs-theme 属性的元素。在 快速启动模板 的基础上:

<!doctype html>
<html lang="en" data-bs-theme="dark">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Bootstrap demo</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-sRIl4kxILFvY47J16cr9ZwB07vP4J8+LH7qKQnuqkuIAvNWLzeN8tE5YBujZqJLB" crossorigin="anonymous">
  </head>
  <body>
    <h1>Hello, world!</h1>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/js/bootstrap.bundle.min.js" integrity="sha384-FKyoEForCGlyvwx9Hj09JcYn3nv7wiPVlz7YYwJrWVcXK/BmnVDxM+D2scQbITxI" crossorigin="anonymous"></script>
  </body>
</html>

Bootstrap 还没有自带内置的颜色模式选择器,但如果你愿意,可以使用我们自己文档中的版本。在 JavaScript 部分了解更多。

使用 Sass 构建

我们新的深色模式选项对所有 Bootstrap 用户均可使用,但它是通过数据属性控制的,而非媒体查询,并且不会自动切换你项目的颜色模式。你可以通过在 Sass 中将 $enable-dark-mode 改为 false 完全禁用我们的深色模式。

我们使用自定义的 Sass mixin color-mode() 来帮助你控制 颜色模式 的应用方式。默认情况下,我们使用 data 属性方法,这使你可以创建更用户友好的体验,让访问者可以选择自动暗模式或控制他们的偏好(就像我们自己的文档中一样)。这也是一种简单且可扩展的方法,可以添加不同的主题以及超越亮色和暗色的更多自定义颜色模式。

如果你想使用媒体查询并且只让颜色模式自动化,你可以通过 Sass 变量更改 mixin 的默认类型。请考虑以下代码片段及其编译后的 CSS 输出。

$color-mode-type: data;

@include color-mode(dark) { .element { color: var(--bs-primary-text-emphasis); background-color: var(--bs-primary-bg-subtle); } }

输出到:

[data-bs-theme=dark] .element {
  color: var(--bs-primary-text-emphasis);
  background-color: var(--bs-primary-bg-subtle);
}

当设置为 media-query 时:

$color-mode-type: media-query;

@include color-mode(dark) { .element { color: var(--bs-primary-text-emphasis); background-color: var(--bs-primary-bg-subtle); } }

输出到:

@media (prefers-color-scheme: dark) {
  .element {
    color: var(--bs-primary-text-emphasis);
    background-color: var(--bs-primary-bg-subtle);
  }
}

自定义颜色模式

虽然颜色模式的主要使用场景是浅色模式和深色模式,但自定义颜色模式也是可能的。创建你自己的 data-bs-theme 选择器,并使用自定义值作为颜色模式的名称,然后根据需要修改我们的 Sass 和 CSS 变量。我们选择创建一个单独的 _variables-dark.scss 样式表来存放 Bootstrap 的深色模式专用 Sass 变量,但这对你来说并非必需。

例如,你可以使用选择器data-bs-theme="blue"创建一个“蓝色主题”。在你的自定义 Sass 或 CSS 文件中,添加新的选择器并根据需要覆盖任何全局或组件 CSS 变量。如果你使用的是 Sass,你还可以在 CSS 变量覆盖中使用 Sass 的函数。

[data-bs-theme="blue"] {
  --bs-body-color: var(--bs-white);
  --bs-body-color-rgb: #{to-rgb($white)};
  --bs-body-bg: var(--bs-blue);
  --bs-body-bg-rgb: #{to-rgb($blue)};
  --bs-tertiary-bg: #{$blue-600};

.dropdown-menu { --bs-dropdown-bg: #{mix($blue-500, $blue-600)}; --bs-dropdown-link-active-bg: #{$blue-700}; }

.btn-secondary { --bs-btn-bg: #{mix($gray-600, $blue-400, .5)}; --bs-btn-border-color: #{rgba($white, .25)}; --bs-btn-hover-bg: #{darken(mix($gray-600, $blue-400, .5), 5%)}; --bs-btn-hover-border-color: #{rgba($white, .25)}; --bs-btn-active-bg: #{darken(mix($gray-600, $blue-400, .5), 10%)}; --bs-btn-active-border-color: #{rgba($white, .5)}; --bs-btn-focus-border-color: #{rgba($white, .5)}; --bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(255, 255, 255, .2); } }

示例蓝色主题

一些段落文字,用于展示带有书面内容的蓝色主题可能的效果。


<div data-bs-theme="blue">
  ...
</div>

JavaScript

为了允许访问者或用户切换颜色模式,你需要创建一个切换元素来控制根元素上的data-bs-theme属性,<html>。我们在文档中构建了一个切换器,它最初遵循用户当前的系统颜色模式,但提供一个选项来覆盖该设置并选择特定的颜色模式。

这里展示了驱动它的 JavaScript。欢迎查看我们自己的文档导航栏,了解它是如何使用我们自有组件的 HTML 和 CSS 实现的。建议将 JavaScript 放在页面顶部,以减少网站重新加载时可能出现的屏幕闪烁。请注意,如果你决定为颜色模式使用媒体查询,如果希望使用隐式控制,可能需要修改或移除你的 JavaScript。

/*!
 * Color mode toggler for Bootstrap's docs (https://bs.88fc.cn/)
 * Copyright 2011-2025 The Bootstrap Authors
 * Licensed under the Creative Commons Attribution 3.0 Unported License.
 */

(() => { 'use strict'

const getStoredTheme = () => localStorage.getItem('theme') const setStoredTheme = theme => localStorage.setItem('theme', theme)

const getPreferredTheme = () => { const storedTheme = getStoredTheme() if (storedTheme) { return storedTheme }

<span class="token keyword">return</span> window<span class="token punctuation">.</span><span class="token function">matchMedia</span><span class="token punctuation">(</span><span class="token string">'(prefers-color-scheme: dark)'</span><span class="token punctuation">)</span><span class="token punctuation">.</span>matches <span class="token operator">?</span> <span class="token string">'dark'</span> <span class="token operator">:</span> <span class="token string">'light'</span>

}

const setTheme = theme => { if (theme === 'auto') { document.documentElement.setAttribute('data-bs-theme', (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light')) } else { document.documentElement.setAttribute('data-bs-theme', theme) } }

setTheme(getPreferredTheme())

const showActiveTheme = (theme, focus = false) => { const themeSwitcher = document.querySelector('#bd-theme')

<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>themeSwitcher<span class="token punctuation">)</span> <span class="token punctuation">{</span>
  <span class="token keyword">return</span>
<span class="token punctuation">}</span>

<span class="token keyword">const</span> themeSwitcherText <span class="token operator">=</span> document<span class="token punctuation">.</span><span class="token function">querySelector</span><span class="token punctuation">(</span><span class="token string">'#bd-theme-text'</span><span class="token punctuation">)</span>
<span class="token keyword">const</span> activeThemeIcon <span class="token operator">=</span> document<span class="token punctuation">.</span><span class="token function">querySelector</span><span class="token punctuation">(</span><span class="token string">'.theme-icon-active use'</span><span class="token punctuation">)</span>
<span class="token keyword">const</span> btnToActive <span class="token operator">=</span> document<span class="token punctuation">.</span><span class="token function">querySelector</span><span class="token punctuation">(</span><span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">[data-bs-theme-value="</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>theme<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">"]</span><span class="token template-punctuation string">`</span></span><span class="token punctuation">)</span>
<span class="token keyword">const</span> svgOfActiveBtn <span class="token operator">=</span> btnToActive<span class="token punctuation">.</span><span class="token function">querySelector</span><span class="token punctuation">(</span><span class="token string">'svg use'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getAttribute</span><span class="token punctuation">(</span><span class="token string">'href'</span><span class="token punctuation">)</span>

document<span class="token punctuation">.</span><span class="token function">querySelectorAll</span><span class="token punctuation">(</span><span class="token string">'[data-bs-theme-value]'</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">forEach</span><span class="token punctuation">(</span><span class="token parameter">element</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
  element<span class="token punctuation">.</span>classList<span class="token punctuation">.</span><span class="token function">remove</span><span class="token punctuation">(</span><span class="token string">'active'</span><span class="token punctuation">)</span>
  element<span class="token punctuation">.</span><span class="token function">setAttribute</span><span class="token punctuation">(</span><span class="token string">'aria-pressed'</span><span class="token punctuation">,</span> <span class="token string">'false'</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>

btnToActive<span class="token punctuation">.</span>classList<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span><span class="token string">'active'</span><span class="token punctuation">)</span>
btnToActive<span class="token punctuation">.</span><span class="token function">setAttribute</span><span class="token punctuation">(</span><span class="token string">'aria-pressed'</span><span class="token punctuation">,</span> <span class="token string">'true'</span><span class="token punctuation">)</span>
activeThemeIcon<span class="token punctuation">.</span><span class="token function">setAttribute</span><span class="token punctuation">(</span><span class="token string">'href'</span><span class="token punctuation">,</span> svgOfActiveBtn<span class="token punctuation">)</span>
<span class="token keyword">const</span> themeSwitcherLabel <span class="token operator">=</span> <span class="token template-string"><span class="token template-punctuation string">`</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>themeSwitcherText<span class="token punctuation">.</span>textContent<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string"> (</span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span>btnToActive<span class="token punctuation">.</span>dataset<span class="token punctuation">.</span>bsThemeValue<span class="token interpolation-punctuation punctuation">}</span></span><span class="token string">)</span><span class="token template-punctuation string">`</span></span>
themeSwitcher<span class="token punctuation">.</span><span class="token function">setAttribute</span><span class="token punctuation">(</span><span class="token string">'aria-label'</span><span class="token punctuation">,</span> themeSwitcherLabel<span class="token punctuation">)</span>

<span class="token keyword">if</span> <span class="token punctuation">(</span>focus<span class="token punctuation">)</span> <span class="token punctuation">{</span>
  themeSwitcher<span class="token punctuation">.</span><span class="token function">focus</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token punctuation">}</span>

}

window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => { const storedTheme = getStoredTheme() if (storedTheme !== 'light' && storedTheme !== 'dark') { setTheme(getPreferredTheme()) } })

window.addEventListener('DOMContentLoaded', () => { showActiveTheme(getPreferredTheme())

document<span class="token punctuation">.</span><span class="token function">querySelectorAll</span><span class="token punctuation">(</span><span class="token string">'[data-bs-theme-value]'</span><span class="token punctuation">)</span>
  <span class="token punctuation">.</span><span class="token function">forEach</span><span class="token punctuation">(</span><span class="token parameter">toggle</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
    toggle<span class="token punctuation">.</span><span class="token function">addEventListener</span><span class="token punctuation">(</span><span class="token string">'click'</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span>
      <span class="token keyword">const</span> theme <span class="token operator">=</span> toggle<span class="token punctuation">.</span><span class="token function">getAttribute</span><span class="token punctuation">(</span><span class="token string">'data-bs-theme-value'</span><span class="token punctuation">)</span>
      <span class="token function">setStoredTheme</span><span class="token punctuation">(</span>theme<span class="token punctuation">)</span>
      <span class="token function">setTheme</span><span class="token punctuation">(</span>theme<span class="token punctuation">)</span>
      <span class="token function">showActiveTheme</span><span class="token punctuation">(</span>theme<span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">)</span>
    <span class="token punctuation">}</span><span class="token punctuation">)</span>
  <span class="token punctuation">}</span><span class="token punctuation">)</span>

}) })()

添加主题颜色

在 $theme-colors 中添加新颜色对于我们的一些组件(如 警告框 和 列表组)来说还不够。对于浅色主题,新颜色还必须在 $theme-colors-text、$theme-colors-bg-subtle 和 $theme-colors-border-subtle 中定义;而对于深色主题,也必须在 $theme-colors-text-dark、$theme-colors-bg-subtle-dark 和 $theme-colors-border-subtle-dark 中定义。

这是一个手动过程,因为 Sass 无法从现有变量或映射生成自己的 Sass 变量。在未来版本的 Bootstrap 中,我们将重新考虑此设置以减少重复。

// Required
@import "functions";
@import "variables";
@import "variables-dark";

// Add a custom color to $theme-colors $custom-colors: ( "custom-color": #712cf9 ); $theme-colors: map-merge($theme-colors, $custom-colors);

@import "maps"; @import "mixins"; @import "utilities";

// Add a custom color to new theme maps

// Light mode $custom-colors-text: ("custom-color": #712cf9); $custom-colors-bg-subtle: ("custom-color": #e1d2fe); $custom-colors-border-subtle: ("custom-color": #bfa1fc);

$theme-colors-text: map-merge($theme-colors-text, $custom-colors-text); $theme-colors-bg-subtle: map-merge($theme-colors-bg-subtle, $custom-colors-bg-subtle); $theme-colors-border-subtle: map-merge($theme-colors-border-subtle, $custom-colors-border-subtle);

// Dark mode $custom-colors-text-dark: ("custom-color": #e1d2f2); $custom-colors-bg-subtle-dark: ("custom-color": #8951fa); $custom-colors-border-subtle-dark: ("custom-color": #e1d2f2);

$theme-colors-text-dark: map-merge($theme-colors-text-dark, $custom-colors-text-dark); $theme-colors-bg-subtle-dark: map-merge($theme-colors-bg-subtle-dark, $custom-colors-bg-subtle-dark); $theme-colors-border-subtle-dark: map-merge($theme-colors-border-subtle-dark, $custom-colors-border-subtle-dark);

// Remainder of Bootstrap imports @import "root"; @import "reboot"; // etc

CSS

变量

数十个根级别的 CSS 变量被重复用作深色模式的覆盖。这些变量被作用于颜色模式选择器,默认值为 data-bs-theme,但可以配置为使用 prefers-color-scheme 媒体查询。使用这些变量作为生成你自己的新颜色模式的指南。

--#{$prefix}body-color: #{$body-color-dark};
--#{$prefix}body-color-rgb: #{to-rgb($body-color-dark)};
--#{$prefix}body-bg: #{$body-bg-dark};
--#{$prefix}body-bg-rgb: #{to-rgb($body-bg-dark)};

--#{$prefix}emphasis-color: #{$body-emphasis-color-dark}; --#{$prefix}emphasis-color-rgb: #{to-rgb($body-emphasis-color-dark)};

--#{$prefix}secondary-color: #{$body-secondary-color-dark}; --#{$prefix}secondary-color-rgb: #{to-rgb($body-secondary-color-dark)}; --#{$prefix}secondary-bg: #{$body-secondary-bg-dark}; --#{$prefix}secondary-bg-rgb: #{to-rgb($body-secondary-bg-dark)};

--#{$prefix}tertiary-color: #{$body-tertiary-color-dark}; --#{$prefix}tertiary-color-rgb: #{to-rgb($body-tertiary-color-dark)}; --#{$prefix}tertiary-bg: #{$body-tertiary-bg-dark}; --#{$prefix}tertiary-bg-rgb: #{to-rgb($body-tertiary-bg-dark)};

@each $color, $value in $theme-colors-text-dark { --#{$prefix}#{$color}-text-emphasis: #{$value}; }

@each $color, $value in $theme-colors-bg-subtle-dark { --#{$prefix}#{$color}-bg-subtle: #{$value}; }

@each $color, $value in $theme-colors-border-subtle-dark { --#{$prefix}#{$color}-border-subtle: #{$value}; }

--#{$prefix}heading-color: #{$headings-color-dark};

--#{$prefix}link-color: #{$link-color-dark}; --#{$prefix}link-hover-color: #{$link-hover-color-dark}; --#{$prefix}link-color-rgb: #{to-rgb($link-color-dark)}; --#{$prefix}link-hover-color-rgb: #{to-rgb($link-hover-color-dark)};

--#{$prefix}code-color: #{$code-color-dark}; --#{$prefix}highlight-color: #{$mark-color-dark}; --#{$prefix}highlight-bg: #{$mark-bg-dark};

--#{$prefix}border-color: #{$border-color-dark}; --#{$prefix}border-color-translucent: #{$border-color-translucent-dark};

--#{$prefix}form-valid-color: #{$form-valid-color-dark}; --#{$prefix}form-valid-border-color: #{$form-valid-border-color-dark}; --#{$prefix}form-invalid-color: #{$form-invalid-color-dark}; --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color-dark};

Sass 变量

我们深色模式的 CSS 变量部分是从 _variables-dark.scss 中特定于深色模式的 Sass 变量生成的。这还包括一些用于更改我们组件中使用的嵌入式 SVG 颜色的自定义覆盖。

// scss-docs-start theme-text-dark-variables
$primary-text-emphasis-dark:        tint-color($primary, 40%);
$secondary-text-emphasis-dark:      tint-color($secondary, 40%);
$success-text-emphasis-dark:        tint-color($success, 40%);
$info-text-emphasis-dark:           tint-color($info, 40%);
$warning-text-emphasis-dark:        tint-color($warning, 40%);
$danger-text-emphasis-dark:         tint-color($danger, 40%);
$light-text-emphasis-dark:          $gray-100;
$dark-text-emphasis-dark:           $gray-300;
// scss-docs-end theme-text-dark-variables

// scss-docs-start theme-bg-subtle-dark-variables $primary-bg-subtle-dark: shade-color($primary, 80%); $secondary-bg-subtle-dark: shade-color($secondary, 80%); $success-bg-subtle-dark: shade-color($success, 80%); $info-bg-subtle-dark: shade-color($info, 80%); $warning-bg-subtle-dark: shade-color($warning, 80%); $danger-bg-subtle-dark: shade-color($danger, 80%); $light-bg-subtle-dark: $gray-800; $dark-bg-subtle-dark: mix($gray-800, $black); // scss-docs-end theme-bg-subtle-dark-variables

// scss-docs-start theme-border-subtle-dark-variables $primary-border-subtle-dark: shade-color($primary, 40%); $secondary-border-subtle-dark: shade-color($secondary, 40%); $success-border-subtle-dark: shade-color($success, 40%); $info-border-subtle-dark: shade-color($info, 40%); $warning-border-subtle-dark: shade-color($warning, 40%); $danger-border-subtle-dark: shade-color($danger, 40%); $light-border-subtle-dark: $gray-700; $dark-border-subtle-dark: $gray-800; // scss-docs-end theme-border-subtle-dark-variables

$body-color-dark: $gray-300; $body-bg-dark: $gray-900; $body-secondary-color-dark: rgba($body-color-dark, .75); $body-secondary-bg-dark: $gray-800; $body-tertiary-color-dark: rgba($body-color-dark, .5); $body-tertiary-bg-dark: mix($gray-800, $gray-900, 50%); $body-emphasis-color-dark: $white; $border-color-dark: $gray-700; $border-color-translucent-dark: rgba($white, .15); $headings-color-dark: inherit; $link-color-dark: tint-color($primary, 40%); $link-hover-color-dark: shift-color($link-color-dark, -$link-shade-percentage); $code-color-dark: tint-color($code-color, 40%); $mark-color-dark: $body-color-dark; $mark-bg-dark: $yellow-800;

// // Forms //

$form-select-indicator-color-dark: $body-color-dark; $form-select-indicator-dark: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path fill='none' stroke='#{$form-select-indicator-color-dark}' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/></svg>");

$form-switch-color-dark: rgba($white, .25); $form-switch-bg-image-dark: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'><circle r='3' fill='#{$form-switch-color-dark}'/></svg>");

// scss-docs-start form-validation-colors-dark $form-valid-color-dark: $green-300; $form-valid-border-color-dark: $green-300; $form-invalid-color-dark: $red-300; $form-invalid-border-color-dark: $red-300; // scss-docs-end form-validation-colors-dark

// // Accordion //

$accordion-icon-color-dark: $primary-text-emphasis-dark; $accordion-icon-active-color-dark: $primary-text-emphasis-dark;

$accordion-button-icon-dark: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-color-dark}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/></svg>"); $accordion-button-active-icon-dark: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='#{$accordion-icon-active-color-dark}'><path fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/></svg>");

Sass mixin

深色模式的样式,以及你创建的任何自定义颜色模式,都可以适当地限定到 data-bs-theme 带可自定义的属性选择器或媒体查询 color-mode() mixin。参见 Sass 使用部分 欲了解更多详情。

@mixin color-mode($mode: light, $root: false) {
  @if $color-mode-type == "media-query" {
    @if $root == true {
      @media (prefers-color-scheme: $mode) {
        :root {
          @content;
        }
      }
    } @else {
      @media (prefers-color-scheme: $mode) {
        @content;
      }
    }
  } @else {
    [data-bs-theme="#{$mode}"] {
      @content;
    }
  }
}