Skip to main content

How to customize the styling of the Docusaurus Classic Theme

Introduction

Here are some modifications I have made to /src/css/style.css for the default Docusaurus Classic theme.

General styles

Colors

I use the blue colors listed here. I also decrease the size of the pre attributes. The default is commented out.

:root {
--ifm-color-primary: #3578e5; /*#25c2a0;*/
--ifm-color-primary-dark: #1d68e1; /*rgb(33, 175, 144);*/
--ifm-color-primary-darker: #1b62d4; /*rgb(31, 165, 136);*/
--ifm-color-primary-darkest: #1751af; /*rgb(26, 136, 112);*/
--ifm-color-primary-light: #4e89e8; /*rgb(70, 203, 174);*/
--ifm-color-primary-lighter: #5a91ea; /*rgb(102, 212, 189);*/
--ifm-color-primary-lightest: #80aaef; /*rgb(146, 224, 208);*/
--ifm-code-font-size: 90%; /*95%;*/
}

Dark mode

I switched the navigation and background colors on dark mode.

html[data-theme='dark'] {
--ifm-background-color: #1e2125;
--ifm-background-surface-color: #121212;
}

Font size

I increased the base font size because the default is too small for me and then I decreased the article header h1 font size because it's too big.

@media screen and (max-width: 996px) {
:root {
--ifm-font-size-base: 18px;
}
article header h1 {
font-size: 1.5rem !important;
}
.hero .hero__title {
font-size: 2.5rem;
}
}

@media screen and (min-width: 997px) {
:root {
--ifm-font-size-base: 17px;
}
article header h1 {
font-size: 2rem !important;
}
}

Custom fonts

You can use custom fonts with CSS. For example, you can add custom fonts (e.g., from Google Fonts) like this:

@import url('https://fonts.googleapis.com/css2?family=Open+Sans&display=swap');

Then change everything except code blocks to Open Sans like this:

:root {
--ifm-font-family-base: 'Open Sans';
}

Spacing and display

Doc width

I find that the documents are too wide, so I limited them:

article {
max-width: 700px;
margin-left: auto;
margin-right: auto;
}

Announcement bar

I made the links in the announcement bar appear the same as normal links, and I made it work with dark mode:

/* Announcement Bar */
div[class^='announcementBarContent'] {
background-color: var(--ifm-background-surface-color);
color: var(--ifm-font-color-base);
}

div[class^='announcementBarContent'] a {
color: var(--ifm-link-color);
text-decoration: inherit;
}

div[class^='announcementBarContent'] a:hover {
color: var(--ifm-link-color);
text-decoration: underline;
}

If I want to have the full name of my site on one line on mobile when I do not have a search bar, then I use:

.navbar .navbar__items {
flex: auto;
}

If my Docusaurus site has search, then I remove or comment out this line if the title of my site is short enough (as it is here). To find out how I implemented Algolia's self-hosted Docsearch, please click here.

To make the font size of the header menu the same as the font size for normal text and the side menu, I add this:

/* Header Dropdown Menu */
.dropdown__link {
font-size: inherit;
}

Left shadow

To remove the shadow on the left of each doc, I added this:

/* Remove shadow on the left */
:root {
--ifm-global-shadow-md: 0px;
}

I adjusted the styling for the footer links to make them look more like normal links:

/* Adjust footer link colors */
#__docusaurus > footer > div > div.text--center > div > a {
color: unset;
}

#__docusaurus > footer > div > div.text--center > div > a:hover {
color: var(--ifm-link-color);
text-decoration: underline;
}

In-line table of contents

I like to display the in-line table of contents only when the side table of contents isn't visible. See set up Ubuntu WSL for an example of how this works.

@media screen and (min-width: 997px) {
/* Show inline table of contents on mobile only */
div[class^='tableOfContentsInline'] {
display: none;
}
}

I also removed the button--outline class in /src/pages/index.js/ to modify the look of the button I have on the first page.