This is a solution for handling dark theme with Bootstrap. There are not many options for dynamic color shifting. There are some CSS variables that you can use, but Bootstrap Extensions advanced usage creates options like .bg-base-1
or .border-base-1
that will gracefully swap to the negative instance when switching themes.
@import "node_modules/@ngblaylock/bootstrap-extensions/src/scss/_base-theme.scss";
/*
Default Sass Variables:
$bse-prefix: "bse-" !default;
$base-1-light: $body-bg !default;
$base-2-light: shade-color($base-1-light, 3%) !default;
$base-3-light: shade-color($base-2-light, 3%) !default;
$base-4-light: shade-color($base-3-light, 3%) !default;
$base-i1-light: $body-color !default;
$base-i2-light: tint-color($base-i1-light, 9%) !default;
$base-i3-light: tint-color($base-i2-light, 9%) !default;
$base-i4-light: tint-color($base-i3-light, 9%) !default;
$base-1-dark: $body-bg-dark !default;
$base-2-dark: tint-color($base-1-dark, 3%) !default;
$base-3-dark: tint-color($base-2-dark, 3%) !default;
$base-4-dark: tint-color($base-3-dark, 3%) !default;
$base-i1-dark: $body-color-dark !default;
$base-i2-dark: shade-color($base-i1-dark, 9%) !default;
$base-i3-dark: shade-color($base-i2-dark, 9%) !default;
$base-i4-dark: shade-color($base-i3-dark, 9%) !default;
$enable-btn-base: true !default;
*/
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/@ngblaylock/bootstrap-extensions@0.1.1/dist/css/base-theme.min.css"
/>
base-1
uses the default background color, so light on light theme and dark on dark theme.base-i1
uses the default body color, so dark on light theme and light on dark theme. The i
stands for "Inverse".Name | Light Theme | Dark Theme | |
---|---|---|---|
base-1 | #ffffff | #212529 | |
base-2 | #f7f7f7 | #282c2f | |
base-3 | #f0f0f0 | #2e3235 | |
base-4 | #e9e9e9 | #34383b | |
base-i1 | #212529 | #dee2e6 | |
base-i2 | #282c2f | #d7dbdf | |
base-i3 | #2e3235 | #d1d4d8 | |
base-i4 | #34383b | #cbced2 |
<div class="vstack flex-wrap">
<a href="#" class="link-base-1">link base-1</a>
<a href="#" class="link-base-2">link base-2</a>
<a href="#" class="link-base-3">link base-3</a>
<a href="#" class="link-base-4">link base-4</a>
<a href="#" class="link-base-i1">link base-i1</a>
<a href="#" class="link-base-i2">link base-i2</a>
<a href="#" class="link-base-i3">link base-i3</a>
<a href="#" class="link-base-i4">link base-i4</a>
</div>
You can either use .bg-base-1
or .text-bg-base-1
.
<div class="hstack flex-wrap">
<div class="p-3 text-bg-base-1">base-1</div>
<div class="p-3 text-bg-base-2">base-2</div>
<div class="p-3 text-bg-base-3">base-3</div>
<div class="p-3 text-bg-base-4">base-4</div>
<div class="p-3 text-bg-base-i1">base-i1</div>
<div class="p-3 text-bg-base-i2">base-i2</div>
<div class="p-3 text-bg-base-i3">base-i3</div>
<div class="p-3 text-bg-base-i4">base-i4</div>
</div>
One issue in general with Bootstrap is using buttons with themes. For example, in light mode you might have a .btn-outline-dark
which looks and functions perfectly fine. If you switch to dark mode, it is invisible. Bootstrap Extensions provides additional buttons to respond to theme changes.
Toggle the theme to see how these buttons respond.
<div class="vstack gap-3 p-3 bg-base-1">
<div class="hstack gap-3">
<button class="btn btn-base-1">Button</button>
<button class="btn btn-base-1" disabled>Disabled</button>
<button class="btn btn-outline-base-1">Button</button>
<button class="btn btn-outline-base-1" disabled>Disabled</button>
</div>
<div class="hstack gap-3">
<button class="btn btn-base-2">Button</button>
<button class="btn btn-base-2" disabled>Disabled</button>
<button class="btn btn-outline-base-2">Button</button>
<button class="btn btn-outline-base-2" disabled>Disabled</button>
</div>
<div class="hstack gap-3">
<button class="btn btn-base-3">Button</button>
<button class="btn btn-base-3" disabled>Disabled</button>
<button class="btn btn-outline-base-3">Button</button>
<button class="btn btn-outline-base-3" disabled>Disabled</button>
</div>
<div class="hstack gap-3">
<button class="btn btn-base-4">Button</button>
<button class="btn btn-base-4" disabled>Disabled</button>
<button class="btn btn-outline-base-4">Button</button>
<button class="btn btn-outline-base-4" disabled>Disabled</button>
</div>
<div class="hstack gap-3">
<button class="btn btn-base-i1">Button</button>
<button class="btn btn-base-i1" disabled>Disabled</button>
<button class="btn btn-outline-base-i1">Button</button>
<button class="btn btn-outline-base-i1" disabled>Disabled</button>
</div>
<div class="hstack gap-3">
<button class="btn btn-base-i2">Button</button>
<button class="btn btn-base-i2" disabled>Disabled</button>
<button class="btn btn-outline-base-i2">Button</button>
<button class="btn btn-outline-base-i2" disabled>Disabled</button>
</div>
<div class="hstack gap-3">
<button class="btn btn-base-i3">Button</button>
<button class="btn btn-base-i3" disabled>Disabled</button>
<button class="btn btn-outline-base-i3">Button</button>
<button class="btn btn-outline-base-i3" disabled>Disabled</button>
</div>
<div class="hstack gap-3">
<button class="btn btn-base-i4">Button</button>
<button class="btn btn-base-i4" disabled>Disabled</button>
<button class="btn btn-outline-base-i4">Button</button>
<button class="btn btn-outline-base-i4" disabled>Disabled</button>
</div>
<div class="hstack gap-3">
<button class="btn btn-primary">Button</button>
<button class="btn btn-primary" disabled>Disabled</button>
<button class="btn btn-outline-primary">Button</button>
<button class="btn btn-outline-primary" disabled>Disabled</button>
</div>
</div>
These are classes where *
can be either base-{1-4}
or base-i{1-4}
. More may be added as needed.
bg-*
border-*
btn-*
btn-outline-*
link-*
link-underline-*
text-*
text-bg-*
--bse-base-1
--bse-base-2
--bse-base-3
--bse-base-4
--bse-base-i1
--bse-base-i2
--bse-base-i3
--bse-base-i4
--bse-base-1-rgb
--bse-base-2-rgb
--bse-base-3-rgb
--bse-base-4-rgb
--bse-base-i1-rgb
--bse-base-i2-rgb
--bse-base-i3-rgb
--bse-base-i4-rgb
--bse-base-1-hover
--bse-base-2-hover
--bse-base-3-hover
--bse-base-4-hover
--bse-base-i1-hover
--bse-base-i2-hover
--bse-base-i3-hover
--bse-base-i4-hover
--bse-base-1-active
--bse-base-2-active
--bse-base-3-active
--bse-base-4-active
--bse-base-i1-active
--bse-base-i2-active
--bse-base-i3-active
--bse-base-i4-active