mirror of https://github.com/google/docsy.git
558 lines
20 KiB
Markdown
558 lines
20 KiB
Markdown
---
|
|
title: Look and Feel
|
|
date: 2017-01-05
|
|
weight: 2
|
|
description: Customize colors, fonts, code highlighting, and more for your site.
|
|
# prettier-ignore
|
|
cSpell:ignore: anotherclass autoprefixing baseof blockscover docsy lightdark monokai myclass onedark wordmark
|
|
---
|
|
|
|
By default, a site using Docsy has the theme's default fonts, colors, and
|
|
general look and feel. However, if you want your own color scheme (and you
|
|
probably will!) you can very easily override the theme defaults with your own
|
|
project-specific values - Hugo will look in your project files first when
|
|
looking for information to build your site. And because [Docsy uses Bootstrap 5]
|
|
and SCSS for styling, you can override just single values (such as project
|
|
colors and fonts) in its special SCSS project variables file, or do more serious
|
|
customization by creating your own styles.
|
|
|
|
Docsy also provides options for styling your code blocks, using either Chroma or
|
|
Prism for highlighting.
|
|
|
|
[Docsy uses Bootstrap 5]: /blog/2023/bootstrap-5-migration/
|
|
|
|
## Project style files
|
|
|
|
To customize your project's look and feel, create your own version of the
|
|
following Docsy placeholder files (note the **`_project*.scss`** suffixes) and
|
|
place them inside your project's `assets/scss/` folder:
|
|
|
|
- **[`_variables_project.scss`]** and<br>
|
|
**[`_variables_project_after_bs.scss`]** :
|
|
|
|
Use these files to add project-specific definitions of theme variables as well
|
|
as any additional Bootstrap variables you want to set or override. For
|
|
details, including an explanation of which file to use, see
|
|
[Site colors](#site-colors).
|
|
|
|
For a list of Docsy's theme variables and their default values, see
|
|
[`_variables.scss`]. For information about other Bootstrap 5 variables, see
|
|
[Variable defaults] and [Bootstrap's `_variables.scss`][bs_var] file.
|
|
|
|
- **[`_styles_project.scss`]** is where you can add your own custom SCSS styles,
|
|
including overriding any of the styles in Docsy's theme SCSS files.
|
|
|
|
[`_styles_project.scss`]:
|
|
https://github.com/google/docsy/blob/main/assets/scss/_styles_project.scss
|
|
[`_variables.scss`]:
|
|
https://github.com/google/docsy/blob/main/assets/scss/_variables.scss
|
|
[`_variables_project.scss`]:
|
|
https://github.com/google/docsy/blob/main/assets/scss/_variables_project.scss
|
|
[`_variables_project_after_bs.scss`]:
|
|
https://github.com/google/docsy/blob/main/assets/scss/_variables_project_after_bs.scss
|
|
[bs_var]: https://github.com/twbs/bootstrap/blob/v5.3.3/scss/_variables.scss
|
|
|
|
{{% alert title="Tip" %}}
|
|
|
|
PostCSS (autoprefixing of CSS browser-prefixes) is not enabled when running in
|
|
server mode (it is a little slow), so Chrome is the recommended choice for
|
|
development.
|
|
|
|
{{% /alert %}}
|
|
|
|
## Colors and color themes
|
|
|
|
### Site colors
|
|
|
|
To customize your site's colors, add SCSS variable overrides to
|
|
**`assets/scss/_variables_project.scss`**. For example, you can set the primary
|
|
and secondary site colors as follows:
|
|
|
|
```scss
|
|
$primary: #390040;
|
|
$secondary: #a23b72;
|
|
```
|
|
|
|
Docsy has [Bootstrap][bs-docs] features such as gradient backgrounds
|
|
(`$enable-gradients`) and shadows (`$enable-shadows`) enabled by default. These
|
|
can also be toggled in your project variables file by setting the variables to
|
|
`false`.
|
|
|
|
To add colors to or modify Bootstrap's [color maps], use
|
|
**`assets/scss/_variables_project_after_bs.scss`**. For example:
|
|
|
|
```scss
|
|
$custom-colors: (
|
|
'my-favorite-color': purple,
|
|
'my-other-color': pink,
|
|
);
|
|
|
|
$theme-colors: map-merge($theme-colors, $custom-colors);
|
|
```
|
|
|
|
Learn how to modify maps, see [Maps and loops] and [Adding theme colors].
|
|
|
|
[Adding theme colors]:
|
|
https://getbootstrap.com/docs/5.3/customize/color-modes/#adding-theme-colors
|
|
[color maps]: https://getbootstrap.com/docs/5.3/customize/color/#color-sass-maps
|
|
[Maps and loops]:
|
|
https://getbootstrap.com/docs/5.3/customize/sass/#maps-and-loops
|
|
[variable defaults]:
|
|
https://getbootstrap.com/docs/5.3/customize/sass/#variable-defaults
|
|
|
|
### Light/dark color themes
|
|
|
|
Docsy 0.10.0 supports light and [dark mode] color themes. To allow your website
|
|
users to choose light/dark modes, **enable the Docsy [light/dark menu]** or
|
|
create your own custom theme selector.
|
|
|
|
If your site uses [Chroma for code highlighting], there are extra steps required
|
|
so that code-block styles are compatible with light/dark mode:
|
|
|
|
- Ensure that `markup.highlight.noClasses` is `false` in your project config.
|
|
For details about this option, see [Generate syntax highlighter CSS].
|
|
- Add `@import 'td/code-dark'` to your project's [`_styles_project.scss`] file.
|
|
|
|
For details, see [Chroma for code highlighting].
|
|
|
|
{{% alert title="Note" %}}
|
|
|
|
Light/dark color themes, only affect documentation pages, and white [blocks
|
|
shortcodes].
|
|
|
|
[blocks shortcodes]: shortcodes/#shortcode-blocks
|
|
|
|
{{% /alert %}}
|
|
|
|
[Chroma for code highlighting]: #code-highlighting-with-chroma
|
|
[light/dark menu]: #lightdark-mode-menu
|
|
[Generate syntax highlighter CSS]:
|
|
https://gohugo.io/content-management/syntax-highlighting/#generate-syntax-highlighter-css
|
|
|
|
## Fonts
|
|
|
|
The theme uses [Open Sans](https://fonts.google.com/specimen/Open+Sans) as its
|
|
primary font. To disable Google Fonts and use a system font, set this SCSS
|
|
variable in `assets/scss/_variables_project.scss`:
|
|
|
|
```scss
|
|
$td-enable-google-fonts: false;
|
|
```
|
|
|
|
To configure another Google Font:
|
|
|
|
```scss
|
|
$google_font_name: 'Open Sans';
|
|
$google_font_family: 'Open+Sans:300,300i,400,400i,700,700i';
|
|
```
|
|
|
|
Note that if you decide to go with a font with different weights (in the
|
|
built-in configuration this is `300` (light), `400` (medium) and `700` (bold)),
|
|
you also need to adjust the weight related variables, i.e. variables starting
|
|
with `$font-weight-`.
|
|
|
|
## CSS utilities
|
|
|
|
For documentation of available CSS utility classes, see the [Bootstrap
|
|
documentation][bs-docs]. This theme adds very little on its own in this area.
|
|
However, we have added some color state CSS classes that can be useful in a
|
|
dynamic context:
|
|
|
|
- `.-bg-<color>`
|
|
- `.-text-<color>`
|
|
|
|
You can use these classes, for example, to style your text in an appropriate
|
|
color when you don't know if the `primary` color is dark or light, to ensure
|
|
proper color contrast. They are also useful when you receive the color code as a
|
|
[shortcode](/docs/adding-content/shortcodes/) parameter.
|
|
|
|
The value of `<color>` can be any of the color names, `primary`, `white`,
|
|
`dark`, `warning`, `light`, `success`, `300`, `blue`, `orange` etc.
|
|
|
|
When you use `.-bg-<color>`, the text colors will be adjusted to get proper
|
|
contrast:
|
|
|
|
```html
|
|
<div class="-bg-primary p-3 display-6">Background: Primary</div>
|
|
<div class="-bg-200 p-3 display-6">Background: Gray 200</div>
|
|
```
|
|
|
|
<div class="-bg-primary p-3 display-6 w-75">Background: Primary</div>
|
|
<div class="-bg-200 p-3 display-6 mb-5 w-50 w-75">Background: Gray 200</div>
|
|
|
|
To only set the text color use `.-text-<color>`:
|
|
|
|
```html
|
|
<div class="-text-blue pt-3 display-6">Text: Blue</div>
|
|
```
|
|
|
|
<div class="-text-blue pt-3 display-6">Text: Blue</div>
|
|
|
|
## Code highlighting with Chroma
|
|
|
|
As of Hugo 0.60+, you can choose from a range of code block highlight and color
|
|
styles using [Chroma](https://github.com/alecthomas/chroma). These styles are
|
|
applied to your fenced code blocks. For details about code highlighting in Hugo
|
|
using Chroma, see [Syntax Highlighting].
|
|
|
|
### Chroma style configuration
|
|
|
|
Hugo's default Chroma style is [monokai]. To use another style, such as [tango],
|
|
add the following to your project configuration:
|
|
|
|
<!-- prettier-ignore-start -->
|
|
{{< tabpane >}}
|
|
{{< tab header="Configuration file:" disabled=true />}}
|
|
{{< tab header="hugo.toml" lang="toml" >}}
|
|
[markup]
|
|
[markup.highlight]
|
|
style = "tango"
|
|
{{< /tab >}}
|
|
{{< tab header="hugo.yaml" lang="yaml" >}}
|
|
markup:
|
|
highlight:
|
|
style: tango
|
|
{{< /tab >}}
|
|
{{< tab header="hugo.json" lang="json" >}}
|
|
{
|
|
"markup": {
|
|
"highlight": {
|
|
"style": "tango"
|
|
}
|
|
}
|
|
}
|
|
{{< /tab >}}
|
|
{{< /tabpane >}}
|
|
<!-- prettier-ignore-end -->
|
|
|
|
For the complete list of available styles, see [Chroma Style Gallery].
|
|
|
|
[Chroma Style Gallery]: https://xyproto.github.io/splash/docs/
|
|
[monokai]: https://xyproto.github.io/splash/docs/monokai.html
|
|
[onedark]: https://xyproto.github.io/splash/docs/onedark.html
|
|
[Syntax Highlighting]: https://gohugo.io/content-management/syntax-highlighting/
|
|
[tango]: https://xyproto.github.io/splash/docs/tango.html
|
|
|
|
### Light/dark code styles
|
|
|
|
Docsy's default Chroma styles for [light/dark mode] are:
|
|
|
|
- [tango] for light mode
|
|
- [onedark] for dark mode
|
|
|
|
If you would like to use other styles, save the [Hugo generated Chroma styles]
|
|
to the appropriate file:
|
|
|
|
- [assets/scss/td/chroma/_light.scss]
|
|
- [assets/scss/td/chroma/_dark.scss]
|
|
|
|
[assets/scss/td/chroma/_dark.scss]:
|
|
https://github.com/google/docsy/blob/main/assets/scss/td/chroma/_dark.scss
|
|
[assets/scss/td/chroma/_light.scss]:
|
|
https://github.com/google/docsy/blob/main/assets/scss/td/chroma/_light.scss
|
|
[Hugo generated Chroma styles]:
|
|
https://gohugo.io/commands/hugo_gen_chromastyles/
|
|
[light/dark mode]: #lightdark-color-themes
|
|
|
|
### Code blocks without a specified language
|
|
|
|
By default, highlighting is not applied to code blocks without a specified
|
|
language. If you would like code highlighting to apply to _all_ code blocks,
|
|
even without a language, set `markup.highlight.guessSyntax` to `true` in your
|
|
project's configuration file.
|
|
|
|
### Copy to clipboard
|
|
|
|
If you are using a Docsy 0.6.0 or later, code blocks show a "Copy to clipboard"
|
|
button in the top right-hand corner. To disable this functionality, set
|
|
`disable_click2copy_chroma` to `true` in your configuration file:
|
|
|
|
## Code highlighting with Prism
|
|
|
|
Optionally, you can enable Prism syntax highlighting in your
|
|
`hugo.toml`/`hugo.yaml`/`hugo.json`:
|
|
|
|
<!-- prettier-ignore-start -->
|
|
{{< tabpane >}}
|
|
{{< tab header="Configuration file:" disabled=true />}}
|
|
{{< tab header="hugo.toml" lang="toml" >}}
|
|
[params]
|
|
prism_syntax_highlighting = true
|
|
{{< /tab >}}
|
|
{{< tab header="hugo.yaml" lang="yaml" >}}
|
|
params:
|
|
prism_syntax_highlighting: true
|
|
{{< /tab >}}
|
|
{{< tab header="hugo.json" lang="json" >}}
|
|
{
|
|
"params": {
|
|
"prism_syntax_highlighting": true
|
|
}
|
|
}
|
|
{{< /tab >}}
|
|
{{< /tabpane >}}
|
|
<!-- prettier-ignore-end -->
|
|
|
|
When this option is enabled your site uses
|
|
[Prism](https://prismjs.com/index.html) instead of Chroma for code block
|
|
highlighting.
|
|
|
|
Prism is a popular open source syntax highlighter which supports over 200
|
|
[languages](https://prismjs.com/index.html#supported-languages) and various
|
|
[plugins](https://prismjs.com/index.html#plugins).
|
|
|
|
Docsy includes JavaScript and CSS files for a basic Prism configuration, which
|
|
supports:
|
|
|
|
- Code blocks styled with the Prism `Default` theme
|
|
- Copy to clipboard buttons on code blocks
|
|
- Syntax highlighting for a number of common languages, as specified in the
|
|
following Prism download link, [Customize your download][prismjs-download+].
|
|
|
|
[prismjs-download+]:
|
|
https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+bash+c+csharp+cpp+go+java+markdown+python+scss+sql+toml+yaml&plugins=toolbar+copy-to-clipboard
|
|
|
|
### Code blocks with no language
|
|
|
|
By default, Prism code highlighting styles are not applied to code blocks
|
|
without a specified language, instead you get Docsy's default style of grey with
|
|
black text. To apply Prism styling to code blocks with no language or a language
|
|
not supported by Prism, specify `none` as the language after your triple
|
|
backticks.
|
|
|
|
### Extending Prism for additional languages or plugins
|
|
|
|
If the included Prism configuration is not sufficient for your requirements, and
|
|
you want to use additional languages or plugins you can replace the included
|
|
files with your own.
|
|
|
|
1. Download your own Prism JS and CSS files from
|
|
<https://prismjs.com/download.html>
|
|
2. Replace the included Prism JS and CSS with the files you downloaded:
|
|
- Copy the Javascript file to `static/js/prism.js`
|
|
- Copy the CSS file to `static/css/prism.css`
|
|
|
|
## Navbar
|
|
|
|
### Styling your project logo and name
|
|
|
|
The default Docsy navbar (`.td-navbar`) displays your site identity, consisting
|
|
of the following:
|
|
|
|
1. [Your logo][], which is included in the navbar as an inline SVG, styled by
|
|
`.td-navbar .navbar-brand svg`. For the style details, see [_nav.scss][].
|
|
|
|
To ensure your logo displays correctly, you may want to resize it and ensure
|
|
that it doesn't have height and width attributes so that its size is fully
|
|
responsive. [Override the default styling][project-styles] of
|
|
`.td-navbar .navbar-brand svg` or (equivalently)
|
|
`.td-navbar .navbar-brand__logo` as needed.
|
|
|
|
2. Your project name, which is the site `title`. If you don't want your project
|
|
name to appear (for example, because your logo is or contains a
|
|
[wordmark][]), then add the following custom styling to your [project's
|
|
styles][project-styles]:
|
|
|
|
```css
|
|
.td-navbar .navbar-brand__name {
|
|
display: none;
|
|
}
|
|
```
|
|
|
|
[_nav.scss]: https://github.com/google/docsy/blob/main/assets/scss/_nav.scss
|
|
[project-styles]: /docs/adding-content/lookandfeel/#project-style-files
|
|
[wordmark]: https://en.wikipedia.org/wiki/Wordmark
|
|
[your logo]: /docs/adding-content/iconsimages/#add-your-logo
|
|
|
|
### Light/dark mode menu
|
|
|
|
If you enable this feature, Docsy adds a menu to your navbar that lets users
|
|
switch your site's documentation page display between a default "light" mode,
|
|
and a "dark" mode where the text is displayed in a light color on a dark
|
|
background.
|
|
|
|
To enable the display of a light/[dark mode] menu in the navbar, set
|
|
`params.ui.showLightDarkModeMenu` to `true` in your project's configuration
|
|
file. The dropdown menu appears at the right, immediately before the [search
|
|
box], if present.
|
|
|
|
<!-- prettier-ignore-start -->
|
|
{{< tabpane >}}
|
|
{{< tab header="Configuration file:" disabled=true />}}
|
|
{{< tab header="hugo.toml" lang="toml" >}}
|
|
[params]
|
|
[params.ui]
|
|
showLightDarkModeMenu = true
|
|
{{< /tab >}}
|
|
{{< tab header="hugo.yaml" lang="yaml" >}}
|
|
params:
|
|
ui:
|
|
showLightDarkModeMenu: true
|
|
{{< /tab >}}
|
|
{{< tab header="hugo.json" lang="json" >}}
|
|
{
|
|
"params": {
|
|
"ui": {
|
|
"showLightDarkModeMenu": true
|
|
}
|
|
}
|
|
}
|
|
{{< /tab >}}
|
|
{{< /tabpane >}}
|
|
<!-- prettier-ignore-end -->
|
|
|
|
[dark mode]: https://getbootstrap.com/docs/5.3/customize/color-modes/#dark-mode
|
|
[search box]: /docs/adding-content/search/
|
|
|
|
### Translucent over cover images
|
|
|
|
For pages containing a [blocks/cover][] shortcode, like most homepages, the
|
|
navbar is translucent as long as the hero image hasn't scrolled up past the
|
|
navbar. For an example, see the [About Docsy][] page. This initial translucent
|
|
setting ensures that the hero image is maximally visible.
|
|
|
|
After the hero image has scrolled past the navbar, the navbar's (opaque)
|
|
background color is set -- usually to the site's [primary color][].
|
|
|
|
The text of navbar entries can be difficult to read with some hero images. In
|
|
these cases, you can disable navbar translucency by setting the
|
|
`params.ui.navbar_translucent_over_cover_disable` option to `true` in your
|
|
site's [configuration file][].
|
|
|
|
[About Docsy]: https://www.docsy.dev/about/
|
|
[blocks/cover]: /docs/adding-content/shortcodes/#blockscover
|
|
[configuration file]:
|
|
https://gohugo.io/getting-started/configuration/#configuration-file
|
|
[primary color]: #site-colors
|
|
|
|
## Tables
|
|
|
|
Docsy applies the following styles to all tables, through the class `.td-table`:
|
|
|
|
- [Bootstrap table][] styles:
|
|
- `.table`
|
|
- `.table-striped`
|
|
- `.table-responsive`
|
|
- `display: block`, which is necessary for tables to be responsive.
|
|
|
|
This styling configuration gives you responsive tables using Markdown only,
|
|
without the need to wrap the table in a `<div>`. It does, however, mean that all
|
|
your tables have `display` set to `block`. If you don't want this, you can
|
|
create your own custom styles for tables.
|
|
|
|
{{% alert title="Note" %}}
|
|
|
|
Our table styling goes against the [Bootstrap recommendation to _wrap_
|
|
tables][wrap-tables] with `.table-responsive` — however, we think letting
|
|
users create responsive tables with just Markdown table syntax is more
|
|
convenient.
|
|
|
|
[wrap-tables]:
|
|
https://getbootstrap.com/docs/5.3/content/tables/#responsive-tables
|
|
|
|
{{% /alert %}}
|
|
|
|
To render a table without Docsy styling, apply the `.td-initial` class to the
|
|
table. From the resulting `<table>` style base, it is easier to apply your own
|
|
custom styles (rather than trying to undo Docsy table styling), as is
|
|
illustrated in the following example:
|
|
|
|
<!-- prettier-ignore -->
|
|
```markdown
|
|
| Shape | Number of sides |
|
|
| -------- | --------------- |
|
|
| Triangle | 3 |
|
|
| Square | 4 |
|
|
{.td-initial .my-dark-table-style}
|
|
```
|
|
|
|
The example above uses [Markdown attribute][] syntax, and might render like
|
|
this:
|
|
|
|
<!-- prettier-ignore-start -->
|
|
| Shape | Number of sides |
|
|
| -------- | --------------- |
|
|
| Triangle | 3 |
|
|
| Square | 4 |
|
|
{.td-initial .table .table-dark}
|
|
<!-- prettier-ignore-end -->
|
|
|
|
[Bootstrap table]: https://getbootstrap.com/docs/5.3/content/tables/
|
|
[Markdown attribute]: https://discourse.gohugo.io/t/markdown-attributes/41783
|
|
|
|
## Customizing templates
|
|
|
|
### Add code to head or before body end
|
|
|
|
If you need to add some code (CSS import, cookie consent, or similar) to the
|
|
`head` section on every page, add a [hooks/head-end.html] partial to your
|
|
project (the theme version is an empty placeholder). The content of this partial
|
|
is automatically included just before the end of the theme partial [head.html].
|
|
|
|
Similarly, if you want to add some code right before the `body` end, create your
|
|
own version of [hooks/body-end.html]. This partial is included automatically at
|
|
the end of the theme partial [scripts.html].
|
|
|
|
Both [head.html] and [scripts.html] are included from [baseof.html], Docsy's
|
|
[base template][].
|
|
|
|
[baseof.html]: https://github.com/google/docsy/blob/main/layouts/baseof.html
|
|
[base template]: https://gohugo.io/templates/base/
|
|
[head.html]:
|
|
https://github.com/google/docsy/blob/main/layouts/_partials/head.html
|
|
[hooks/body-end.html]:
|
|
https://github.com/google/docsy/blob/main/layouts/_partials/hooks/body-end.html
|
|
[hooks/head-end.html]:
|
|
https://github.com/google/docsy/blob/main/layouts/_partials/hooks/head-end.html
|
|
[scripts.html]:
|
|
https://github.com/google/docsy/blob/main/layouts/_partials/head.html
|
|
|
|
### Adding a banner before page content (EXPERIMENTAL) {#before-page-content}
|
|
|
|
To have a banner or other similar content appear at the top of the pages in a
|
|
section, add the relevant HTML to a [_td-content-after-header.html] file in the
|
|
section's page path under `layouts` -- such as
|
|
`layouts/blog/_td-content-after-header.html`. Add the file directly under
|
|
`layouts` to have the file processed for all docs, blog, and swagger pages. The
|
|
file's content will be included inside the `div.td-content` after `</header>`,
|
|
just before `.Content` is rendered.
|
|
|
|
[_td-content-after-header.html]:
|
|
https://github.com/google/docsy/blob/main/layouts/_td-content-after-header.html
|
|
|
|
## Adding custom class to the body element
|
|
|
|
By default, Docsy adds the `td-{{ .Kind }}` class, where the kind is the kind of
|
|
the page, like section, blog, and so on. For example:
|
|
|
|
<!-- prettier-ignore -->
|
|
```html
|
|
<body class="td-section">
|
|
```
|
|
|
|
Sometimes it's useful to assign custom classes to a page, or to an entire
|
|
section, for example, to apply custom styling. To do so, add the `body_class`
|
|
parameter to the front matter of your page. The value of the parameter will then
|
|
be added to the class attribute of your page's body element.
|
|
|
|
To add the classes `myclass` and `anotherclass`, add the following line to the
|
|
front matter of the page:
|
|
|
|
```yaml
|
|
body_class: myclass anotherclass
|
|
```
|
|
|
|
The page's opening body tag will look like this (assuming it is a section page):
|
|
|
|
<!-- prettier-ignore -->
|
|
```html
|
|
<body class="td-section myclass anotherclass">
|
|
```
|
|
|
|
To apply the custom class to every page of a section or a directory, use the
|
|
[Front Matter Cascade](https://gohugo.io/content-management/front-matter/#front-matter-cascade)
|
|
feature of Hugo in your configuration file, or in the front matter of the
|
|
highest-level page you want to modify.
|
|
|
|
[bs-docs]: https://getbootstrap.com/docs/
|