Content tabs¶
Note
This document discusses content tabs, not navigation tabs.
Use of content tabs in the mkdocs-material theme relies on a markdown extension that isn’t used in the world of Sphinx. Instead, the sphinx-immaterial theme provides its own directives to make use of content tabs.
- .. md-tab-set::¶
Each set of tabs on a page must begin with a
md-tab-set
directive. This directive only accepts children that aremd-tab-item
directives.- :class: (string)¶
A space delimited list of qualified names that get used as the HTMl element’s
class
attribute.
- :name: (string)¶
A qualified name that get used as the HTML element’s
id
attribute.Use the
ref
role to reference the element by name.
This directive supports
:class:
and:name:
options to use custom CSS classes and reference links (respectively)... md-tab-set:: :class: custom-tab-set-style :name: ref_this_tab_set .. md-tab-item:: Local Ref A reference to this tab set renders like so: `tab set description <ref_this_tab_set>`. This syntax can only be used on the same page as the tab set. .. md-tab-item:: Cross-page Ref To cross-reference this tab set from a different page, use :ref:`tab set description <ref_this_tab_set>` Clearly, this also works on the same page. .. md-tab-item:: Custom CSS .. literalinclude:: _static/extra_css.css :language: css :start-after: /* ************************ custom-tab-set-style :end-before: /* *********************** custom-tab-item-style
A reference to this tab set renders like so: tab set description.
This syntax can only be used on the same page as the tab set.
To cross-reference this tab set from a different page, use tab set description
Clearly, this also works on the same page.
.custom-tab-set-style { border: solid 2px var(--md-default-fg-color); padding: 0 5px; }
- .. md-tab-item::¶
This directive is used to create a tab within a set of content tabs. It requires a label as it’s argument.
- :class: (string)¶
A space delimited list of qualified names that get used as the HTMl element’s
class
attribute.Use the
:class:
option to optionally provide custom CSS classes to the tab’s content (not the tab’s label)... md-tab-set:: .. md-tab-item:: Customized content :class: custom-tab-item-style This content could be styled differently from other page content. .. md-tab-item:: Custom CSS .. literalinclude:: _static/extra_css.css :language: css :start-after: /* *********************** custom-tab-item-style :end-before: /* *********************** inline icon pulsing-heart style
This content could be styled differently from other page content.
.custom-tab-item-style { border: solid 2px var(--md-default-fg-color); padding: 0 5px; margin-top: 3px; }
Linked tabs¶
Content tabs that share the same label can be selected synchronously by adding
"content.tabs.link"
to the list of features
in conf.py.
html_theme_options = {
"features": [
"content.tabs.link",
],
Synchronized selection will automatically persist across separate pages. Contradictory to the
equivalent implementation in mkdocs-material theme, the "navigation.instant"
feature
does not need to be explicitly specified.
Important
Linked content tabs must share the same exact label. Meaning, the argument given to the
md-tab-item
must be exactly the same (case sensitive) across all content tabs that
shall be synchronized.
.. md-tab-set::
.. md-tab-item:: Python
.. code-block:: python
def main():
print("Hello world!")
.. md-tab-item:: C++
.. code-block:: cpp
#include <iostream>
int main(void) {
std::cout << "Hello world!" << std::endl;
return 0;
}
.. md-tab-set::
.. md-tab-item:: C only
.. code-block:: c
#include <stdio.h>
int main(void) {
printf("Hello world!\n");
return 0;
}
.. md-tab-item:: C++
.. code-block:: cpp
#include <iostream>
int main(void) {
std::cout << "Hello world!" << std::endl;
return 0;
}
.. md-tab-item:: Python
.. code-block:: python
def main():
print("Hello world!")
def main():
print("Hello world!")
#include <iostream>
int main(void) {
std::cout << "Hello world!" << std::endl;
return 0;
}
#include <stdio.h>
int main(void) {
printf("Hello world!\n");
return 0;
}
#include <iostream>
int main(void) {
std::cout << "Hello world!" << std::endl;
return 0;
}
def main():
print("Hello world!")