Changing sidebar elements#
Furo supports customising the elements that show up in the navigational sidebar (left). This is to provide documentation authors who are willing to work with HTML/CSS to change and tweak how the sidebar looks.
Unstable
This customisation considered “unstable” under Furo’s Stability Policy.
Furo is not designed to accommodate for all potential custom sidebar designs. It is also possible to get suboptimal results (or even break the layout!) when overriding the default sidebar.
Expectations#
It is expected that users who override the sidebar would also carefully consider how their documentation looks across various platforms (i.e. not take a “looks OK on my machine” approach) and would be willing to override Furo’s styles to make it work with their sidebar design.
Some things to consider when doing this are:
different OSs/browsers handle scrollbars and their widths differently, with different effects on the layouting
end users can customise the look of their default scrollbars at an OS level(like overlay, hidden, visible-and-takes-space and maybe more?)
different viewport heights will differ across devices
“user interaction flows”, such as looking for a certain page in the sidebar or via search.
Default design#
The following code snippet lists the fragments (HTML files from Furo’s theme folder) that are used for the default sidebar design.
sidebars =
sidebar/brand.html,
sidebar/search.html,
sidebar/scroll-start.html,
sidebar/navigation.html,
sidebar/ethical-ads.html,
sidebar/scroll-end.html,
sidebar/variant-selector.html
Hint
The scrollable region in the sidebar is determined by sidebar/scroll-start.html
and sidebar/scroll-end.html
. Any elements that fall between them can be scrolled.
Making changes#
There are two main ways to customise Furo’s sidebar:
override the content of the default templates with your own templates, using
templates_path
.change the entire sidebar structure, using
html_sidebars
.
Using templates_path
#
This is useful when you want to change a specific element of the sidebar. A good example for when you might want to use this: adding a tagline after your project’s name/logo.
This is done by setting templates_path
in the conf.py
and correctly adding files within the configured paths.
templates_path = ["_templates"]
For the above example – adding a tagline after the name/logo – you’d want to add an _templates/sidebar/brand.html
file, that overrides the appropriate content. For more information on how to do so, Sphinx’s templating documentation.
Using html_sidebars
#
This is useful when you want to make drastic or major changes to the design of Furo’s sidebar.
As an example, to make the entire sidebar scrollable, it is possible to set sidebar/scroll-start.html
as the first fragment and sidebar/scroll-end.html
as the last fragment.
html_sidebars = {
"**": [
"sidebar/scroll-start.html",
"sidebar/brand.html",
"sidebar/search.html",
"sidebar/navigation.html",
"sidebar/ethical-ads.html",
"sidebar/scroll-end.html",
]
}
Warning
sidebar/scroll-start.html
and sidebar/scroll-end.html
must be included in the sidebar. Ensure that the “non-scrollable” elements (i.e. that don’t occur between these two) do not go beyond the height of the viewport.
Tip
If you’re hosting your documentation on Read the Docs, please make sure that sidebar/ethical-ads.html
is included in the sidebar. This helps keep Read the Docs sustainable.