mkdocs-material/docs/reference/index.md

292 lines
9.0 KiB
Markdown
Raw Normal View History

2021-12-16 19:08:57 +03:00
# Reference
2021-12-16 19:08:57 +03:00
Material for MkDocs is packed with many great features that make technical
2022-10-02 17:36:47 +03:00
writing a joyful activity. This section of the documentation explains how to set up
2021-12-16 19:08:57 +03:00
a page, and showcases all available specimen that can be used directly from
within Markdown files.
## Configuration
2022-12-21 00:44:07 +03:00
### Built-in <u>typeset</u> plugin :material-alert-decagram:{ .mdx-pulse title="Added on December 21, 2022" }
2022-12-20 23:21:19 +03:00
[:octicons-heart-fill-24:{ .mdx-heart } Sponsors only][Insiders]{ .mdx-insiders } ·
[:octicons-tag-24: insiders-4.27.0][Insiders] ·
:octicons-cpu-24: Plugin ·
:octicons-beaker-24: Experimental
The built-in typeset plugin __preserves HTML formatting__ in the navigation and
table of contents. This means that now, code blocks, icons, emojis and other
inline formatting will be preserved, which allows for a richer editing
experience. Add the following lines to `mkdocs.yml`:
``` yaml
plugins:
- typeset
```
For a demo, just take a look at the table of contents of this page :material-arrow-right-circle: code blocks and icons are preserved from the
section headlines; even [highlighting inline code blocks] is supported :tada:
[highlighting inline code blocks]: code-blocks.md#highlighting-inline-code-blocks
### Built-in meta plugin
[:octicons-heart-fill-24:{ .mdx-heart } Sponsors only][Insiders]{ .mdx-insiders } ·
[:octicons-tag-24: insiders-4.21.0][Insiders] ·
:octicons-cpu-24: Plugin ·
:octicons-beaker-24: Experimental
The built-in meta plugin allows to __set front matter per folder__, which is
especially handy to ensure that all pages in a folder use specific templates or
tags. Add the following lines to `mkdocs.yml`:
``` yaml
plugins:
2022-10-01 17:48:03 +03:00
- meta
```
> If you need to be able to build your documentation with and without
> [Insiders], please refer to the [built-in plugins] section to learn how
> shared configurations help to achieve this.
The following configuration options are available:
2022-09-11 20:25:40 +03:00
[`meta_file`](#+meta.meta_file){ #+meta.meta_file }
: :octicons-milestone-24: Default: `**/.meta.yml` This option specifies the
name of the meta files that the plugin should look for. The default setting
assumes that meta files are called `.meta.yml`:
``` yaml
plugins:
- meta:
meta_file: '**/.meta.yml' # (1)!
```
1. Note that it's strongly recommended to prefix meta files with a `.`,
since otherwise they would be included in the build output.
[built-in blog plugin]: ../setup/setting-up-a-blog.md#built-in-blog-plugin
[built-in plugins]: ../insiders/getting-started.md#built-in-plugins
2020-07-27 14:50:31 +03:00
## Usage
2020-07-22 20:11:22 +03:00
2022-12-20 23:21:19 +03:00
### Setting the page `title`
2020-07-22 20:11:22 +03:00
2022-10-02 17:36:47 +03:00
Each page has a designated title, which is used in the navigation sidebar, for
[social cards] and in other places. While MkDocs attempts to automatically
determine the title of a page in a [four step process], the title can also be
explicitly set with the front matter `title` property:
2020-07-22 20:11:22 +03:00
2022-09-11 20:25:40 +03:00
``` yaml
---
2021-12-11 16:30:07 +03:00
title: Lorem ipsum dolor sit amet # (1)!
---
2021-05-30 16:59:13 +03:00
# Document title
...
2020-07-22 20:11:22 +03:00
```
2022-10-02 17:36:47 +03:00
1. This line sets the [`title`][title] inside the HTML document's
[`head`][head] for the generated page to the given value. Note that the
site title, which is set via [`site_name`][site_name], is appended with a
dash.
2020-07-22 20:11:22 +03:00
2022-10-02 17:36:47 +03:00
[social cards]: ../setup/setting-up-social-cards.md
[four step process]: https://www.mkdocs.org/user-guide/writing-your-docs/#meta-data
[title]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/title
[head]: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/head
[site_name]: https://www.mkdocs.org/user-guide/configuration/#site_name
2020-07-27 14:50:31 +03:00
2022-12-20 23:21:19 +03:00
### Setting the page `description`
2020-07-22 20:11:22 +03:00
2022-10-02 17:36:47 +03:00
A Markdown file can include a description that is added to the `meta` tags of
a page, and is also used for [social cards]. It's a good idea to set a
[`site_description`][site_description] in `mkdocs.yml` as a fallback value if
the author does not explicitly define a description for a Markdown file:
2020-07-22 20:11:22 +03:00
2022-09-11 20:25:40 +03:00
``` yaml
---
2021-12-16 19:08:57 +03:00
description: Nullam urna elit, malesuada eget finibus ut, ac tortor. # (1)!
---
# Document title
...
```
2022-10-02 17:36:47 +03:00
1. This line sets the `meta` tag containing the description inside the
2021-12-16 19:08:57 +03:00
document `head` for the current page to the provided value.
2022-10-02 17:36:47 +03:00
[site_description]: https://www.mkdocs.org/user-guide/configuration/#site_description
2022-12-20 23:21:19 +03:00
### Setting the page `icon`
2021-12-16 19:08:57 +03:00
2022-05-05 14:33:14 +03:00
[:octicons-heart-fill-24:{ .mdx-heart } Sponsors only][Insiders]{ .mdx-insiders } ·
2021-12-16 19:08:57 +03:00
[:octicons-tag-24: insiders-4.5.0][Insiders] ·
:octicons-beaker-24: Experimental
An icon can be assigned to each page, which is then rendered as part of the
2022-10-02 17:36:47 +03:00
navigation sidebar, as well as [navigation tabs], if enabled. Use the front
matter `icon` property to reference an icon, adding the following lines at the
top of a Markdown file:
2021-12-16 19:08:57 +03:00
2022-09-11 20:25:40 +03:00
``` yaml
2021-12-16 19:08:57 +03:00
---
icon: material/emoticon-happy # (1)!
---
2021-05-30 16:59:13 +03:00
# Document title
...
2020-07-22 20:11:22 +03:00
```
1. Enter a few keywords to find the perfect icon using our [icon search] and
click on the shortcode to copy it to your clipboard:
<div class="mdx-iconsearch" data-mdx-component="iconsearch">
<input class="md-input md-input--stretch mdx-iconsearch__input" placeholder="Search icon" data-mdx-component="iconsearch-query" value="emoticon happy" />
<div class="mdx-iconsearch-result" data-mdx-component="iconsearch-result" data-mdx-mode="file">
<div class="mdx-iconsearch-result__meta"></div>
<ol class="mdx-iconsearch-result__list"></ol>
</div>
</div>
2021-12-16 19:08:57 +03:00
[Insiders]: ../insiders/index.md
[icon search]: icons-emojis.md#search
2022-10-02 17:36:47 +03:00
[navigation tabs]: ../setup/setting-up-navigation.md#navigation-tabs
2021-12-16 19:08:57 +03:00
2022-12-20 23:21:19 +03:00
### Setting the page `status`
2022-08-21 20:10:19 +03:00
[:octicons-heart-fill-24:{ .mdx-heart } Sponsors only][Insiders]{ .mdx-insiders } ·
[:octicons-tag-24: insiders-4.22.0][Insiders] ·
:octicons-beaker-24: Experimental
A status can be assigned to each page, which is then displayed as part of the
navigation sidebar. First, associate a status identifier with a description by
adding the following to `mkdocs.yml`:
``` yaml
extra:
status:
<identifier>: <description> # (1)!
```
1. The identifier can only include alphanumeric characters, as well as dashes
and underscores. For example, if you have a status `Recently added`, you can
set `new` as an identifier:
``` yaml
extra:
status:
new: Recently added
```
2022-10-02 17:36:47 +03:00
The page status can now be set with the front matter `status` property. For
example, you can mark a page as `new` with the following lines at the top of a
Markdown file:
2022-08-21 20:10:19 +03:00
2022-09-11 20:25:40 +03:00
``` yaml
2022-08-21 20:10:19 +03:00
---
status: new
---
# Document title
...
```
The following status identifiers are currently supported:
- :material-alert-decagram: `new`
- :material-trash-can: `deprecated`
2022-12-21 00:44:07 +03:00
### Setting the page `subtitle` :material-alert-decagram:{ .mdx-pulse title="Added on October 2, 2022" }
2022-10-02 17:36:47 +03:00
[:octicons-heart-fill-24:{ .mdx-heart } Sponsors only][Insiders]{ .mdx-insiders } ·
[:octicons-tag-24: insiders-4.25.0][Insiders] ·
:octicons-beaker-24: Experimental
Each page can define a subtitle, which is then rendered below the title as part
of the navigation sidebar by using the front matter `subtitle` property, and
adding the following lines:
``` yaml
---
subtitle: Nullam urna elit, malesuada eget finibus ut, ac tortor
---
# Document title
...
```
2022-12-20 23:21:19 +03:00
### Setting the page `template`
2021-12-16 19:08:57 +03:00
If you're using [theme extension] and created a new page template in the
`overrides` directory, you can enable it for a specific page. Add the following
lines at the top of a Markdown file:
2022-09-11 20:25:40 +03:00
``` yaml
2021-12-16 19:08:57 +03:00
---
template: custom.html
---
# Document title
...
```
??? question "How to set a page template for an entire folder?"
With the help of the [built-in meta plugin], you can set a custom template
2022-09-11 20:25:40 +03:00
for an entire section and all nested pages, by creating a `.meta.yml` file
in the corresponding folder with the following content:
``` yaml
template: custom.html
```
2021-12-16 19:08:57 +03:00
[theme extension]: ../customization.md#extending-the-theme
[built-in meta plugin]: #built-in-meta-plugin
2020-07-27 14:50:31 +03:00
## Customization
### Using metadata in templates
2020-09-20 12:24:46 +03:00
2022-12-20 23:21:19 +03:00
#### :material-check-all: on all pages
2021-05-01 20:04:44 +03:00
In order to add custom `meta` tags to your document, you can [extend the theme
2021-10-10 22:04:22 +03:00
][theme extension] and [override the `extrahead` block][overriding blocks],
e.g. to add indexing policies for search engines via the `robots` property:
``` html
{% extends "base.html" %}
{% block extrahead %}
2020-08-10 13:50:37 +03:00
<meta property="robots" content="noindex, nofollow" />
{% endblock %}
```
2021-10-10 22:04:22 +03:00
[overriding blocks]: ../customization.md#overriding-blocks
2021-05-01 20:04:44 +03:00
2022-12-20 23:21:19 +03:00
#### :material-check: on a single page
2021-05-01 20:04:44 +03:00
If you want to set a `meta` tag on a single page, or want to set different
values for different pages, you can use the `page.meta` object inside your
template override, e.g.:
``` html
{% extends "base.html" %}
2021-05-01 20:04:44 +03:00
{% block extrahead %}
{% if page and page.meta and page.meta.robots %}
<meta property="robots" content="{{ page.meta.robots }}" />
{% else %}
<meta property="robots" content="index, follow" />
{% endif %}
{% endblock %}
```
You can now use `robots` exactly like [`title`][title] and
[`description`][description] to set values. Note that in this case, the
template defines an `else` branch, which would set a default if none was given.
[title]: #setting-the-page-title
[description]: #setting-the-page-description