Bootstrap 4 dark theme that supports togging dark/light themes as well. There is no fluff, it changes the color of Bootstrap and that's it, no new thing to learn or unlearn, just Bootstrap, but Dark!
Themed Dark | Themed Light |
---|---|
SemVer is used to keep things easy for everyone.
Official builds are available in the public npm registry.
npm install @forevolve/bootstrap-dark --save
The package contains the content of the dist
directory which includes the Bootstrap JavaScript files, for convenience, and the Bootstrap Dark CSS files.
To load the dark theme, <link>
the bootstrap-dark.css
or the bootstrap-dark.min.css
instead of the bootstrap[.min].css
file. You can load the bundled JavaScript files, the original ones or the file from the CDN of your choosing.
Example:
<link rel="stylesheet" href="https://github.com/ForEvolve/bootstrap-dark/blob/master/css/bootstrap-dark.min.css" />
You can also load the files using jsdelivr by following this pattern: https://cdn.jsdelivr.net/npm/@forevolve/bootstrap-dark@{NPM PACKAGE VERSION}/dist/{PATH TO THE FILE}
.
Here is the preceding example using jsdelivr:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@forevolve/bootstrap-dark@1.0.0/dist/css/bootstrap-dark.min.css" />
You can <link>
both the toggle-bootstrap.css
and the toggle-bootstrap-dark.css
files to allow toggling the normal/dark theme based on your page body.
bootstrap
class on your body, like <body class="bootstrap">
.bootstrap-dark
class on your body, like <body class="bootstrap-dark">
.If you want to support print, load the toggle-bootstrap-print.css
or toggle-bootstrap-print.min.css
file after the others.
Example:
<link rel="stylesheet" href="https://github.com/ForEvolve/bootstrap-dark/blob/master/css/toggle-bootstrap.min.css" />
<link rel="stylesheet" href="https://github.com/ForEvolve/bootstrap-dark/blob/master/css/toggle-bootstrap-dark.min.css" />
<link rel="stylesheet" href="https://github.com/ForEvolve/bootstrap-dark/blob/master/css/toggle-bootstrap-print.min.css" />
Using jsdelivr CDN:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@forevolve/bootstrap-dark@1.0.0/dist/css/toggle-bootstrap.min.css" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@forevolve/bootstrap-dark@1.0.0/dist/css/toggle-bootstrap-dark.min.css" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@forevolve/bootstrap-dark@1.0.0/dist/css/toggle-bootstrap-print.min.css" />
Check out the samples app for more info about this feature.
When using the toggle-*
stylesheets, you can create .navbar
that uses the current theme. Light when <body class="bootstrap">
and dark when <body class="bootstrap-dark">
.
Example, instead of navbar-light bg-light
or navbar-dark bg-dark
, use .navbar-themed
, like this:
<nav class="navbar navbar-expand-lg navbar-themed">...</nav>
Check out the samples app for more info about this feature.
From version 1.1, I added two new css files: bootstrap-prefers-dark.css
and bootstrap-prefers-light.css
.
Those two files use prefers-color-scheme
media query instead of relying on a body's css class.
There is also a new bootstrap-light.css
file that is bootstrap, plus the .navbar-themed
light addon.
There is two possible combination:
prefers-color-scheme
specified or prefers-color-scheme: light
): default bootstrap (light), prefers-color-scheme: dark
: bootstrap darkprefers-color-scheme
specified or prefers-color-scheme: dark
): bootstrap dark, prefers-color-scheme: light
: default bootstrap (light)Here is an example for a light default:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@forevolve/bootstrap-dark@1.1.0/dist/css/bootstrap-light.min.css" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@forevolve/bootstrap-dark@1.1.0/dist/css/bootstrap-prefers-dark.min.css" />
See ./samples/html/prefers-dark-default-light.html
for a working example.
Note that the print css is included in
bootstrap-light.min.css
.
Here is an example for a dark default:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@forevolve/bootstrap-dark@1.1.0/dist/css/bootstrap-dark.min.css" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@forevolve/bootstrap-dark@1.1.0/dist/css/bootstrap-prefers-light.min.css" />
See ./samples/html/prefers-light-default-dark.html
for a working example.
Note that the print css is included in
bootstrap-dark.min.css
.
Added in version 1.2 (preview) and 2.0, the stylesheets bootstrap-dark-prefers-light.css
and bootstrap-light-prefers-dark.css
leverage the prefers-color-scheme
CSS media query and allow a default color scheme followed by a preferred color scheme.
Technically, they are a combination of two CSS. Their high-level structure looks like the following:
/*
DEFAULT STYLES (including print styles):
bootstrap-light.css or bootstrap-dark.css
*/
@media (prefers-color-scheme: light|dark) {
/*
SPECIFIC COLOR STYLES:
bootstrap-prefers-light-color-only.css or bootstrap-prefers-dark-color-only.css
*/
}
You can use these by loading one of them like this (ex.: default: light with dark support):
<link rel="stylesheet" href="https://github.com/ForEvolve/bootstrap-dark/blob/master/dist/css/bootstrap-light-prefers-dark.min.css" />
You can also use jsdelivr CDN.
<!-- Bootstrap Dark by default with `prefers: light` support -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@forevolve/bootstrap-dark@2.0.0/dist/css/bootstrap-dark-prefers-light.min.css" />
<!-- OR -->
<!-- Bootstrap (Light) by default with `prefers: dark` support -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@forevolve/bootstrap-dark@2.0.0/dist/css/bootstrap-light-prefers-dark.min.css" />
If you want to build the theme manually, modify it or even contribute, this section explains how.
npm
to build this project; see Node JS for more info.You can also test using the HTML sample, but there are more pages in the .NET app.
npm install
cd samples/razor-pages
)dotnet restore
dotnet run
(from the samples/razor-pages directory) or if you are using VS Code, Start Debugging
will work.npm run watch
in a second terminalOnce you started both server and the watch command, the browser-sync
proxy should open in a browser at the following URI: http://localhost:3000
.
There is a few npm and gulp scripts.
gulp-watch
simply runs gulp watch
browser-sync-proxy
starts browsersync watching for any wwwroot/css/*.css
changeswatch
run both previous scripts in parallelbuild-theme
compile the theme to css.copy-dist-to-razor-pages
copy the content of the dist
folder to samples/razor-pages/wwwroot
(used by the Razor Pages).copy-dist-to-html
copy the content of the dist
folder to samples/html
(used by the HTML sample).copy-dist-to-samples
executes copy-dist-to-html
and copy-dist-to-razor-pages
in parallel.copy-bootstrap-js
copy the bootstrap js files to the dist/js
directory.watch
execute copy-bootstrap-js
then watch to rebuild the theme.default
runs copy-bootstrap-js
and build-theme
then copy-dist-to-samples
.samples
is the samples folders.samples/html
is a plain HTML samples app.samples/razor-pages
is the ASP.NET Core application that is used to test the theme. This directory is not packaged.
Pages
are the ASP.NET Core Razor Pages. That's the preview.
Why .NET Core? Well, I wanted to script some loops, and I know .Net; so I picked Razor Pages to do just that: dynamic pages! Moreover, it is open source and cross-platform.
If you think that something else would be better, feel free to open an issue about it; I would not mind switching to another technology (see the Contribute section below).
Services
are the web pages services; so far it's pretty thin.wwwroot
are the web assets; the dist
files are copied there.assets
are the project assets (like the screenshot in the readme file).dist
are the distributable files; if you want to copy/paste the files into your projects, that's the ones. They also include bootstrap JavaScript files, unaltered.scss
are the source theme files.To contribute, start by opening an issue or reply on an existing issue so we can discuss your feature or bug to find the best way to approach it.
Once we settled on a strategy, you can then Fork/Code/Open a PR.
package.json
contributors
array.Thanks in advance for your contribution.
See Contributing to ForEvolve open source projects and Contributor Covenant Code of Conduct for more information.
Since CI build numbers are automated, it is hard to know in advance what the next deployed build number will be, so the (latest)
version represents that version.
$pre-color
variable to $gray-100
, overriding the default of $gray-900
for the dark theme.No breaking changes expected. This version only change the code/pre color. The major bump is to override the pre-release package that I deprecated recently during the no abandonned PR #63. I was not able to delete the package on NPM, so this should fix the issue.
$colors
and $theme-colors
. This might be a breaking change.$yiq-text-dark
from $gray-900
to $gray-800
and $yiq-text-light
from $gray-400
to $gray-200
so the text looks better with the updated color maps.4.6.2
(from 4.6.0
).bg-themed
(dark: .bg-dark
| Light: .bg-light
).text-themed
(dark: .text-light
| Light: .text-dark
).alert-themed
(dark: .alert-dark
| Light: .alert-light
).bg-themed-inverted
(dark: .bg-light
| Light: .bg-dark
).text-themed-inverted
(dark: .text-dark
| Light: .text-light
).alert-themed-inverted
(dark: .alert-light
| Light: .alert-dark
)bootstrap-dark-prefers-light.css
which default to Bootstrap dark and display the light colors if the user's prefers-color-scheme: light
.bootstrap-light-prefers-dark.css
which default to Bootstrap and display the dark colors if the user's prefers-color-scheme: dark
.bootstrap-prefers-dark-color-only.css
which is only the colors of bootstrap-prefers-dark.css
. This is autogenerated by clean_non_color_attr.js
.bootstrap-prefers-light-color-only.css
which is only the colors of bootstrap-prefers-light.css
. This is autogenerated by clean_non_color_attr.js
.clean_non_color_attr.js
gulp plugin (based on gulp-css-remove-attributes
).The preview versions 1.2.x was ¾ of this. We bumped the version due to the
$card-color
change (see below).
The $card-color
variable has been reverted from $gray-200
(#e9ecef
) to null
(default Bootstrap value) due to a color issue in the dark/light theme.
bootstrap-dark.css
to include the .navbar-themed
class (dark version).bootstrap-light.css
which is bootstrap plus the .navbar-themed
class (light version).bootstrap-prefers-dark.[css|scss]
that is the equivalent of bootstrap-dark.[css|scss]
, without the print, wrapped in a @media (prefers-color-scheme: dark)
media query.bootstrap-prefers-light.[css|scss]
that is the equivalent of bootstrap-light.[css|scss]
, without the print, wrapped in a @media (prefers-color-scheme: light)
media query../samples/html/prefers-dark-default-light.html
and ./samples/html/prefers-light-default-dark.html
samples/razor-pages
directorysamples/html
directory.was-validated
#40p a
text-decoration: underline;
.btn
in p
.Darken the following elements:
<hr />
color$border-color
to $dark
$table-border-color
is based on the new $border-color
$table-color
is based on $body-color
$table-hover-color
is based on $table-color
$jumbotron-bg
color is now used.navbar
component, using the css class .navbar-themed
, that:
body.bootstrap
, the navbar becomes .bg-light
and .navbar-light
.body.bootstrap-dark
, the navbar becomes .bg-dark
and .navbar-dark
..navbar
being display: none
by default when loading the .min.css
stylesheet.A new file is introduced: toggle-bootstrap-print[.min].css
. This stylesheet applies the print styles from bootstrap and has been extracted so it is included only once (not once with the toggle-bootstrap.css
and once with the toggle-bootstrap-dark.css
). If you don't support print, you can omit this file; if you do, include it last. For example:
<link rel="stylesheet" href="https://github.com/ForEvolve/bootstrap-dark/blob/master/css/toggle-bootstrap.min.css" />
<link rel="stylesheet" href="https://github.com/ForEvolve/bootstrap-dark/blob/master/css/toggle-bootstrap-dark.min.css" />
<link rel="stylesheet" href="https://github.com/ForEvolve/bootstrap-dark/blob/master/css/toggle-bootstrap-print.min.css" />
The following project applies bootstrap-dark
to the bootstrap documentation site allowing deeper testing of the theme:
I started this project based on the Bootstrap Theme Kit by Alexander Rechsteiner at Hacker Themes. This allows me to publish a lighter version of the theme; making it easier to be used (compared to the full Bootstrap Jekyll docs).
If you are looking for a Bootstrap 5 alternative, I suggest you look at vinorodrigues/bootstrap-dark-5. @vinorodrigues did a great job already, and whenever I have time to help, I'll do that there. I believe that we better focus on building one solid project than maintaining many. As for Boostrap 4, nothing changes about this project.