mkdocs-material/docs/customization.md

272 lines
9.2 KiB
Markdown
Raw Normal View History

---
template: overrides/main.html
---
# Customization
Project documentation is as diverse as the projects themselves and Material for
2020-08-30 18:37:49 +03:00
MkDocs is a great starting point for making it look beautiful. However, as you
write your documentation, you may reach a point where small adjustments are
necessary to preserve your brand's style.
## Adding assets
2021-10-10 23:32:32 +03:00
[MkDocs] provides several ways to customize a theme. In order to make a few
small tweaks to Material for MkDocs, you can just CSS and JavaScript files to
the `docs` directory.
2021-10-10 23:32:32 +03:00
[MkDocs]: https://www.mkdocs.org
2020-09-19 15:34:40 +03:00
### Additional CSS
If you want to tweak some colors or change the spacing of certain elements,
you can do this in a separate stylesheet. The easiest way is by creating a
new stylesheet file in the `docs` directory:
2020-08-30 18:37:49 +03:00
``` sh
.
├─ docs/
│ └─ stylesheets/
│ └─ extra.css
└─ mkdocs.yml
```
2021-10-10 23:32:32 +03:00
Then, add the following lines to `mkdocs.yml`:
``` yaml
extra_css:
- stylesheets/extra.css
```
### Additional JavaScript
2021-10-10 23:32:32 +03:00
If you want to integrate another syntax highlighter or add some custom logic to
your theme, create a new JavaScript file in the `docs` directory:
2020-08-30 18:37:49 +03:00
``` sh
.
├─ docs/
│ └─ javascripts/
│ └─ extra.js
└─ mkdocs.yml
```
2021-10-10 23:32:32 +03:00
Then, add the following lines to `mkdocs.yml`:
``` yaml
extra_javascript:
- javascripts/extra.js
```
## Extending the theme
2020-08-30 18:37:49 +03:00
If you want to alter the HTML source (e.g. add or remove some parts), you can
2021-10-10 23:32:32 +03:00
extend the theme. MkDocs supports [theme extension], an easy way to override
2020-08-30 18:37:49 +03:00
parts of Material for MkDocs without forking from git. This ensures that you
can update to the latest version more easily.
2021-10-10 23:32:32 +03:00
[theme extension]: https://www.mkdocs.org/user-guide/styling-your-docs/#using-the-theme-custom_dir
### Setup and theme structure
2020-08-30 18:37:49 +03:00
Enable Material for MkDocs as usual in `mkdocs.yml`, and create a new folder
2021-10-10 23:32:32 +03:00
for `overrides` which you then reference using the [`custom_dir`][custom_dir]
setting:
``` yaml
theme:
name: material
custom_dir: overrides
```
!!! warning "Theme extension prerequisites"
2021-10-10 23:32:32 +03:00
As the [`custom_dir`][custom_dir] setting is used for the theme extension
process, Material for MkDocs needs to be installed via `pip` and referenced
with the [`name`][name] setting in `mkdocs.yml`. It will not work when
cloning from `git`.
The structure in the `overrides` directory must mirror the directory structure
of the original theme, as any file in the `overrides` directory will replace the
file with the same name which is part of the original theme. Besides, further
2021-10-10 23:32:32 +03:00
assets may also be put in the `overrides` directory:
``` sh
.
2020-07-22 12:57:41 +03:00
├─ .icons/ # Bundled icon sets
├─ assets/
│ ├─ images/ # Images and icons
2021-10-30 14:49:01 +03:00
│ ├─ javascripts/ # JavaScript files
│ └─ stylesheets/ # Stylesheets
├─ partials/
2020-07-20 16:18:09 +03:00
│ ├─ integrations/ # Third-party integrations
2021-10-30 14:49:01 +03:00
│ │ ├─ analytics/ # Analytics integrations
2021-11-13 15:15:58 +03:00
│ │ └─ analytics.html # Analytics setup
2021-10-30 14:49:01 +03:00
│ ├─ languages/ # Translation languages
2021-11-14 10:46:35 +03:00
│ ├─ content.html # Page content
2021-11-13 16:23:10 +03:00
│ ├─ copyright.html # Copyright and theme information
│ ├─ footer.html # Footer bar
│ ├─ header.html # Header bar
2021-10-30 14:49:01 +03:00
│ ├─ language.html # Translation setup
│ ├─ logo.html # Logo in header and sidebar
│ ├─ nav.html # Main navigation
│ ├─ nav-item.html # Main navigation item
│ ├─ palette.html # Color palette
2021-11-13 16:23:10 +03:00
│ ├─ search.html # Search interface
│ ├─ social.html # Social links
│ ├─ source.html # Repository information
2021-10-10 23:32:32 +03:00
│ ├─ source-file.html # Source file information
│ ├─ tabs.html # Tabs navigation
│ ├─ tabs-item.html # Tabs navigation item
│ ├─ toc.html # Table of contents
│ └─ toc-item.html # Table of contents item
├─ 404.html # 404 error page
├─ base.html # Base template
└─ main.html # Default page
```
2021-10-10 23:32:32 +03:00
[custom_dir]: https://www.mkdocs.org/user-guide/configuration/#custom_dir
[name]: https://www.mkdocs.org/user-guide/configuration/#name
### Overriding partials
2020-08-30 18:37:49 +03:00
In order to override a partial, we can replace it with a file of the same name
and location in the `overrides` directory. For example, to replace the original
2021-10-10 23:32:32 +03:00
`footer.html` partial, create a new `footer.html` partial in the `overrides`
2020-08-30 18:37:49 +03:00
directory:
``` sh
.
├─ overrides/
│ └─ partials/
│ └─ footer.html
└─ mkdocs.yml
```
MkDocs will now use the new partial when rendering the theme. This can be done
with any file.
2021-10-10 22:04:22 +03:00
### Overriding blocks <small>recommended</small> { #overriding-blocks data-toc-label="Overriding blocks" }
2020-08-30 18:37:49 +03:00
Besides overriding partials, it's also possible to override (and extend)
2021-10-10 23:32:32 +03:00
template blocks, which are defined inside the templates and wrap specific
features. In order to set up block overrides, create a `main.html` file inside
the `overrides` directory:
2020-08-30 18:37:49 +03:00
``` sh
.
├─ overrides/
│ └─ main.html
└─ mkdocs.yml
```
2021-10-10 23:32:32 +03:00
Then, e.g. to override the site title, add the following lines to `main.html`:
``` html
{% extends "base.html" %}
{% block htmltitle %}
<title>Lorem ipsum dolor sit amet</title>
{% endblock %}
```
2021-10-10 23:32:32 +03:00
The following template blocks are provided by the theme:
2021-04-10 12:13:32 +03:00
| Block name | Purpose |
|:------------------|:------------------------------------------------|
| `analytics` | Wraps the Google Analytics integration |
| `announce` | Wraps the announcement bar |
| `config` | Wraps the JavaScript application config |
| `content` | Wraps the main content |
| `disqus` | Wraps the Disqus integration |
| `extrahead` | Empty block to add custom meta tags |
| `fonts` | Wraps the font definitions |
| `footer` | Wraps the footer with navigation and copyright |
| `header` | Wraps the fixed header bar |
| `hero` | Wraps the hero teaser (if available) |
| `htmltitle` | Wraps the `<title>` tag |
| `libs` | Wraps the JavaScript libraries (header) |
| `outdated` | Wraps the version warning |
| `scripts` | Wraps the JavaScript application (footer) |
| `site_meta` | Wraps the meta tags in the document head |
| `site_nav` | Wraps the site navigation and table of contents |
2021-10-10 23:32:32 +03:00
| `styles` | Wraps the style sheets (also extra sources) |
| `tabs` | Wraps the tabs navigation (if available) |
## Theme development
2021-10-10 23:32:32 +03:00
Material for MkDocs is built on top of [TypeScript], [RxJS] and [SASS], and
uses a lean, custom build process to put everything together.[^1] If you want
to make more fundamental changes, it may be necessary to make the adjustments
directly in the source of the theme and recompile it.
2021-02-26 18:41:00 +03:00
[^1]:
2021-10-10 23:32:32 +03:00
Prior to :octicons-tag-24: 7.0.0 the build was based on Webpack, resulting
in occasional broken builds due to incompatibilities with loaders and
plugins. Therefore, we decided to swap Webpack for a leaner solution which
is now based on [RxJS] as the application itself. This allowed for the
pruning of more than 500 dependencies (~30% less).
2021-02-26 18:41:00 +03:00
2021-10-10 23:32:32 +03:00
[TypeScript]: https://www.typescriptlang.org/
[RxJS]: https://github.com/ReactiveX/rxjs
[SASS]: https://sass-lang.com
### Environment setup
2021-10-10 23:32:32 +03:00
In order to start development on Material for MkDocs, a [Node.js] version of
2021-02-26 18:41:00 +03:00
at least 14 is required. First, clone the repository:
```
git clone https://github.com/squidfunk/mkdocs-material
```
Next, all dependencies need to be installed, which is done with:
```
cd mkdocs-material
pip install -r requirements.txt
pip install mkdocs-minify-plugin
pip install mkdocs-redirects
npm install
```
2021-10-10 23:32:32 +03:00
[Node.js]: https://nodejs.org
### Development mode
2021-02-23 01:28:43 +03:00
Start the watcher with:
```
npm start
```
2021-10-10 23:32:32 +03:00
Then, in a second terminal window, start the MkDocs live preview server with:
```
2021-10-30 14:29:35 +03:00
mkdocs serve --watch-theme
```
2021-10-10 23:32:32 +03:00
Point your browser to [localhost:8000][live preview] and you should see this
very documentation in front of you.
!!! warning "Automatically generated files"
Never make any changes in the `material` directory, as the contents of this
directory are automatically generated from the `src` directory and will be
2021-06-12 14:29:20 +03:00
overwritten when the theme is built.
2021-10-10 23:32:32 +03:00
[live preview]: http://localhost:8000
### Building the theme
When you're finished making your changes, you can build the theme by invoking:
```
npm run build
```
2021-10-10 23:32:32 +03:00
This triggers the production-level compilation and minification of all style
sheets and JavaScript files. After the command exits, the compiled files are
located in the `material` directory. When running `mkdocs build`, you should
now see your changes to the original theme.