mkdocs-material/docs/setup/changing-the-colors.md

335 lines
12 KiB
Markdown
Raw Normal View History

---
template: overrides/main.html
---
2020-07-21 17:01:22 +03:00
# Changing the colors
2020-07-26 15:46:09 +03:00
As any proper Material Design implementation, Material for MkDocs supports
2021-10-10 18:39:53 +03:00
Google's original [color palette], which can be easily configured through
`mkdocs.yml`. Furthermore, colors can be customized with a few lines of CSS to
2021-10-10 18:39:53 +03:00
fit your brand's identity by using [CSS variables][custom colors].
2021-10-10 18:39:53 +03:00
[color palette]: http://www.materialui.co/colors
[custom colors]: #custom-colors
## Configuration
### Color palette
#### Color scheme
2021-10-10 18:39:53 +03:00
[:octicons-tag-24: 5.2.0][palette.scheme support] ·
:octicons-milestone-24: Default: `default`
2021-10-10 18:39:53 +03:00
Material for MkDocs supports two color schemes: a light mode, which is just
called `default`, and a dark mode, which is called `slate`. The color scheme
can be set via `mkdocs.yml`:
``` yaml
theme:
palette:
scheme: default
```
2021-10-10 18:39:53 +03:00
Click on a tile to change the color scheme:
<div class="mdx-switch">
<button data-md-color-scheme="default"><code>default</code></button>
<button data-md-color-scheme="slate"><code>slate</code></button>
</div>
<script>
var buttons = document.querySelectorAll("button[data-md-color-scheme]")
buttons.forEach(function(button) {
button.addEventListener("click", function() {
var attr = this.getAttribute("data-md-color-scheme")
document.body.setAttribute("data-md-color-scheme", attr)
var name = document.querySelector("#__code_1 code span:nth-child(7)")
name.textContent = attr
})
})
</script>
2021-10-10 18:39:53 +03:00
[palette.scheme support]: https://github.com/squidfunk/mkdocs-material/releases/tag/5.2.0
2020-07-17 00:05:57 +03:00
#### Primary color
2021-10-10 18:39:53 +03:00
[:octicons-tag-24: 0.2.0][palette.primary support] ·
:octicons-milestone-24: Default: `indigo`
2021-10-10 18:39:53 +03:00
The primary color is used for the header, the sidebar, text links and several
other components. In order to change the primary color, set the following value
in `mkdocs.yml` to a valid color name:
``` yaml
theme:
palette:
primary: indigo
```
2021-10-10 18:39:53 +03:00
Click on a tile to change the primary color:
<div class="mdx-switch">
<button data-md-color-primary="red"><code>red</code></button>
<button data-md-color-primary="pink"><code>pink</code></button>
<button data-md-color-primary="purple"><code>purple</code></button>
<button data-md-color-primary="deep-purple"><code>deep purple</code></button>
<button data-md-color-primary="indigo"><code>indigo</code></button>
<button data-md-color-primary="blue"><code>blue</code></button>
<button data-md-color-primary="light-blue"><code>light blue</code></button>
<button data-md-color-primary="cyan"><code>cyan</code></button>
<button data-md-color-primary="teal"><code>teal</code></button>
<button data-md-color-primary="green"><code>green</code></button>
<button data-md-color-primary="light-green"><code>light green</code></button>
<button data-md-color-primary="lime"><code>lime</code></button>
<button data-md-color-primary="yellow"><code>yellow</code></button>
<button data-md-color-primary="amber"><code>amber</code></button>
<button data-md-color-primary="orange"><code>orange</code></button>
<button data-md-color-primary="deep-orange"><code>deep orange</code></button>
<button data-md-color-primary="brown"><code>brown</code></button>
<button data-md-color-primary="grey"><code>grey</code></button>
<button data-md-color-primary="blue-grey"><code>blue grey</code></button>
<button data-md-color-primary="black"><code>black</code></button>
<button data-md-color-primary="white"><code>white</code></button>
</div>
<script>
var buttons = document.querySelectorAll("button[data-md-color-primary]")
buttons.forEach(function(button) {
button.addEventListener("click", function() {
var attr = this.getAttribute("data-md-color-primary")
document.body.setAttribute("data-md-color-primary", attr)
var name = document.querySelector("#__code_2 code span:nth-child(7)")
name.textContent = attr.replace("-", " ")
})
})
</script>
2021-10-10 18:39:53 +03:00
[palette.primary support]: https://github.com/squidfunk/mkdocs-material/releases/tag/0.2.0
2020-07-17 00:05:57 +03:00
#### Accent color
2021-10-10 18:39:53 +03:00
[:octicons-tag-24: 0.2.0][palette.accent support] ·
:octicons-milestone-24: Default: `indigo`
2021-10-10 18:39:53 +03:00
The accent color is used to denote elements that can be interacted with, e.g.
hovered links, buttons and scrollbars. It can be changed in `mkdocs.yml` by
2020-07-26 15:46:09 +03:00
choosing a valid color name:
``` yaml
theme:
palette:
accent: indigo
```
2021-10-10 18:39:53 +03:00
Click on a tile to change the accent color:
<style>
.md-typeset button[data-md-color-accent] > code {
background-color: var(--md-code-bg-color);
color: var(--md-accent-fg-color);
}
</style>
<div class="mdx-switch">
<button data-md-color-accent="red"><code>red</code></button>
<button data-md-color-accent="pink"><code>pink</code></button>
<button data-md-color-accent="purple"><code>purple</code></button>
<button data-md-color-accent="deep-purple"><code>deep purple</code></button>
<button data-md-color-accent="indigo"><code>indigo</code></button>
<button data-md-color-accent="blue"><code>blue</code></button>
<button data-md-color-accent="light-blue"><code>light blue</code></button>
<button data-md-color-accent="cyan"><code>cyan</code></button>
<button data-md-color-accent="teal"><code>teal</code></button>
<button data-md-color-accent="green"><code>green</code></button>
<button data-md-color-accent="light-green"><code>light green</code></button>
<button data-md-color-accent="lime"><code>lime</code></button>
<button data-md-color-accent="yellow"><code>yellow</code></button>
<button data-md-color-accent="amber"><code>amber</code></button>
<button data-md-color-accent="orange"><code>orange</code></button>
<button data-md-color-accent="deep-orange"><code>deep orange</code></button>
</div>
<script>
var buttons = document.querySelectorAll("button[data-md-color-accent]")
buttons.forEach(function(button) {
button.addEventListener("click", function() {
var attr = this.getAttribute("data-md-color-accent")
document.body.setAttribute("data-md-color-accent", attr)
var name = document.querySelector("#__code_3 code span:nth-child(7)")
name.textContent = attr.replace("-", " ")
})
})
</script>
2021-10-10 18:39:53 +03:00
[palette.accent support]: https://github.com/squidfunk/mkdocs-material/releases/tag/0.2.0
2020-07-17 00:05:57 +03:00
### Color palette toggle
2021-10-10 18:39:53 +03:00
[:octicons-tag-24: 7.1.0][palette.toggle support] ·
:octicons-milestone-24: Default: _none_
2021-04-18 17:19:39 +03:00
It's also possible to offer a list of color palettes to the user, each of which
2021-10-10 18:39:53 +03:00
can include a [`scheme`][palette.scheme], [`primary`][palette.primary] and
[`accent`][palette.accent] color each. The user can toggle between those color
palettes:
2021-04-18 17:19:39 +03:00
2021-10-10 18:39:53 +03:00
``` yaml
theme:
2021-10-10 18:39:53 +03:00
palette: # (1)
2021-04-18 17:19:39 +03:00
- scheme: default
toggle:
2021-02-24 20:59:12 +03:00
icon: material/toggle-switch-off-outline
name: Switch to dark mode
2021-10-10 18:39:53 +03:00
- scheme: slate # (2)
toggle:
2021-02-24 20:59:12 +03:00
icon: material/toggle-switch
name: Switch to light mode
```
2021-10-10 18:39:53 +03:00
1. Note that the `theme.palette` setting is now defined as a list.
2. With __2__ (color schemes) __x 21__ (primary colors) __x 17__ (accent color)
= __714__ combinations, it's impossible to ensure that all configurations
provide a good user experience (e.g. _yellow on light background_). Make
sure that the color combination of your choosing provides enough contrast
and tweak CSS variables where necessary.
The following properties must be set for each toggle:
2021-10-10 18:39:53 +03:00
`icon`{ #toggle-icon }
: :octicons-milestone-24: Default: _none_ · :octicons-alert-24: Required
This property must point to a valid icon path referencing [any icon bundled
2021-10-10 18:39:53 +03:00
with the theme][custom icons], or the build will not succeed. Some popular
combinations:
* :material-toggle-switch-off-outline: + :material-toggle-switch: `material/toggle-switch-off-outline` + `material/toggle-switch`
* :material-weather-sunny: + :material-weather-night: `material/weather-sunny` + `material/weather-night`
* :material-eye-outline: + :material-eye: `material/eye-outline` + `material/eye`
* :material-lightbulb-outline: + :material-lightbulb: `material/lightbulb-outline` + `material/lightbulb`
2021-10-10 18:39:53 +03:00
`name`{ #toggle-name }
: :octicons-milestone-24: Default: _none_ · :octicons-alert-24: Required
This property is used as the toggle's `title` attribute and should be set to a
2021-10-10 18:39:53 +03:00
discernable name to improve accessibility. It will appear on mouse hover.
2021-10-10 18:39:53 +03:00
[palette.toggle support]: https://github.com/squidfunk/mkdocs-material/releases/tag/7.1.0
[palette.scheme]: #color-scheme
[palette.primary]: #primary-color
[palette.accent]: #accent-color
[custom icons]: https://github.com/squidfunk/mkdocs-material/tree/master/material/.icons
2021-04-18 17:19:39 +03:00
### System preference
2021-10-10 18:39:53 +03:00
[:octicons-tag-24: 7.1.0][palette.media support] ·
:octicons-milestone-24: Default: _none_
2021-04-18 17:19:39 +03:00
In order to automatically set the color palette to the user's system preference,
a media query can be set as part of the `media` property next to the toggle
2021-04-18 17:19:39 +03:00
definition in `mkdocs.yml`:
2021-10-10 18:39:53 +03:00
``` yaml
2021-04-18 17:19:39 +03:00
theme:
palette:
2021-10-10 18:39:53 +03:00
- media: "(prefers-color-scheme: light)" # (1)
2021-04-18 17:19:39 +03:00
scheme: default
toggle:
icon: material/toggle-switch-off-outline
name: Switch to dark mode
2021-10-10 18:39:53 +03:00
- media: "(prefers-color-scheme: dark)" # (2)
2021-04-18 17:19:39 +03:00
scheme: slate
toggle:
icon: material/toggle-switch
name: Switch to light mode
```
2021-10-10 18:39:53 +03:00
1. This media query is __checked first__. It's also the __fallback__ when no
media query matches.
2. This media query is __checked second__. If it doesn't match, the first one
is automatically used.
2021-04-18 17:19:39 +03:00
When the user first visits your site, the media queries are evaluated in the
order of their definition. The first media query that matches selects the
default color palette.
2021-10-10 18:39:53 +03:00
[palette.media support]: https://github.com/squidfunk/mkdocs-material/releases/tag/7.1.0
## Customization
2020-07-21 19:39:27 +03:00
### Custom colors
2020-07-21 17:01:22 +03:00
2021-10-10 18:39:53 +03:00
Material for MkDocs implements colors using [CSS variables] (custom
properties). If you want to customize the colors beyond the palette (e.g. to
2021-10-10 18:39:53 +03:00
use your brand-specific colors), you can add an [additional style sheet] and
tweak the values of the CSS variables.
Let's say you're :fontawesome-brands-youtube:{ style="color: #EE0F0F" }
2020-07-24 15:30:03 +03:00
__YouTube__, and want to set the primary color to your brand's palette. Just
add:
2021-10-10 18:39:53 +03:00
=== ":octicons-file-code-16: docs/stylesheets/extra.css"
2021-10-10 18:39:53 +03:00
``` css
:root {
--md-primary-fg-color: #EE0F0F;
--md-primary-fg-color--light: #ECB7B7;
--md-primary-fg-color--dark: #90030C;
}
```
2021-10-10 18:39:53 +03:00
=== ":octicons-file-code-16: mkdocs.yml"
2021-10-10 18:39:53 +03:00
``` yaml
extra_css:
- stylesheets/extra.css
```
2021-10-10 18:39:53 +03:00
See the file containing the [color definitions] for a list of all CSS variables.
2021-10-10 18:39:53 +03:00
[CSS variables]: https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties
[color definitions]: https://github.com/squidfunk/mkdocs-material/blob/master/src/assets/stylesheets/main/_colors.scss
[additional style sheet]: ../customization.md#additional-css
### Custom color schemes
Besides overriding specific colors, you can create your own, named color scheme
2021-10-10 18:39:53 +03:00
by wrapping the definitions in a `[data-md-color-scheme="..."]`
[attribute selector], which you can then set via `mkdocs.yml` as described
in the [color schemes][palette.scheme] section:
2021-10-10 18:39:53 +03:00
=== ":octicons-file-code-16: docs/stylesheets/extra.css"
``` css
[data-md-color-scheme="youtube"] {
--md-primary-fg-color: #EE0F0F;
--md-primary-fg-color--light: #ECB7B7;
--md-primary-fg-color--dark: #90030C;
}
```
=== ":octicons-file-code-16: mkdocs.yml"
``` yaml
2021-10-10 20:22:13 +03:00
theme:
palette:
scheme: youtube
2021-10-10 18:39:53 +03:00
extra_css:
- stylesheets/extra.css
```
Additionally, the `slate` color scheme defines all of it's colors via `hsla`
color functions and deduces its colors from the `--md-hue` CSS variable. You
can tune the `slate` theme with:
``` css
[data-md-color-scheme="slate"] {
2021-10-10 18:39:53 +03:00
--md-hue: 210; /* (1) */
}
```
2021-10-10 18:39:53 +03:00
1. The `hue` value must be in the range of `[0, 360]`
[attribute selector]: https://www.w3.org/TR/selectors-4/#attribute-selectors