Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 43 additions & 30 deletions docs/user_guide/customizing.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,49 +7,59 @@ Customizing the theme
In addition to the configuration options detailed at :ref:`configuration`, it
is also possible to customize the HTML layout and CSS style of the theme.

.. _custom-css:

Customizing the CSS
===================
Custom CSS Stylesheets
======================

The theme's CSS can be tweaked in 2 ways. The most straight forward way is to
change the theme variables. If you are looking for more customisation, you can
write additional css in ``custom.css``.
You may customize the theme's CSS by creating a custom stylesheet that Sphinx uses to build your site.
Any rules in this style-sheet will over-ride the default theme rules.

Theme variables
---------------
To add a custom stylesheet, follow these steps:

This theme is based on top of the basic
`Bootstrap CSS variables <https://getbootstrap.com/docs/4.0/getting-started/theming/#css-variables>`__
extended with some theme specific variables. An overview of all variables and
every default is defined in ``/pydata_sphinx_theme/static/css/theme.css``.
1. **Create a CSS stylesheet** in ``_static/css/custom.css``, and add the CSS rules you wish.
2. **Attach the stylesheet to your Sphinx build**. Add the following to ``conf.py``

In order to change a variable, add a ``custom.css`` (see below) which updates
the value of certain variables in a ``:root`` section:
.. code-block:: rst

.. code-block:: none
html_static_path = ['_static']

:root {
--font-size-base: 17px;
}
html_css_files = [
'css/custom.css',
]

Important, the theme is defined with CSS variables, not SASS variables!
When you build your documentation, this stylesheet should now be activated.

Custom stylesheet
-----------------
CSS Theme variables
===================

If the theme variables are not sufficient to shape theme to you liking, you can
take full control over the look and feel via a custom stylesheet. If you have a
stylesheet in ``_static/css/custom.css``, adding the following to ``conf.py``
will ensure this stylesheet is loaded last on top of the theme variables and the
base styleheet:
This theme defines several `CSS variables <css-variable-help_>`_ that can be
used to quickly control behavior across your documentation.

These are based on top of the basic `Bootstrap CSS variables <https://getbootstrap.com/docs/4.0/getting-started/theming/#css-variables>`_
extended with some theme specific variables. An overview of all variables and
every default is defined in `the pydata default CSS variables file <pydata-css-variables_>`_.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks a lot for updating this text. A link to the actual file with the variables is quite crucial to know which variables are available to override ..


.. code-block:: rst
In order to change a variable, follow these steps:

html_static_path = ['_static']
1. :ref:`Add a custom CSS stylesheet <custom-css>`. This is where we'll configure the variables.
2. Underneath a ``:root`` section, add the variables you wish to update. For example, to update
the base font size, you might add this to ``custom.css``:

.. code-block:: none

html_css_files = [
'css/custom.css',
]
:root {
--font-size-base: 17px;
}

For a complete list of the theme variables that you may override, see the
`theme variables defaults CSS file <pydata-css-variables_>`_.

.. important::

Note that these are `CSS variables <css-variable-help_>`_ and not
`SASS variables <https://sass-lang.com/documentation/variables>`_.
The theme is defined with CSS variables, not SASS variables!


Replacing/Removing Fonts
Expand Down Expand Up @@ -86,3 +96,6 @@ often paired together, can be replaced (or removed altogether) by:
}
</style>
{% endblock %}

.. _pydata-css-variables: https://github.com/pandas-dev/pydata-sphinx-theme/blob/master/pydata_sphinx_theme/static/css/theme.css
.. _css-variable-help: https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_custom_properties

Large diffs are not rendered by default.

36 changes: 29 additions & 7 deletions pydata_sphinx_theme/static/css/theme.css
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,11 @@
**/
--color-primary: 19, 6, 84;
--color-success: 40, 167, 69;
--color-info: 23, 162, 184;
--color-info: 0, 123, 255; /*23, 162, 184;*/
--color-warning: 255, 193, 7;
--color-danger: 220, 53, 69;
--color-text-base: 51, 51, 51;

--color-h1: var(--color-primary);
--color-h2: var(--color-primary);
--color-h3: var(--color-text-base);
Expand All @@ -57,12 +58,6 @@
--color-toc-link-hover: var(--color-active-navigation);
--color-toc-link-active: var(--color-active-navigation);

--color-admonition-primary: var(--color-primary);
--color-admonition-success: var(--color-success);
--color-admonition-danger: var(--color-danger);
--color-admonition-warning: var(--color-warning);
--color-admonition-info: var(--color-info);

/*****************************************************************************
* Icon
**/
Expand All @@ -74,4 +69,31 @@
--icon-exclamation-circle: '\f06a';
--icon-times-circle: '\f057';
--icon-lightbulb: '\f0eb';

/*****************************************************************************
* Admonitions
**/

--color-admonition-default: var(--color-info);
--color-admonition-note: var(--color-info);
--color-admonition-attention: var(--color-warning);
--color-admonition-caution: var(--color-warning);
--color-admonition-warning: var(--color-warning);
--color-admonition-danger: var(--color-danger);
--color-admonition-error: var(--color-danger);
--color-admonition-hint: var(--color-success);
--color-admonition-tip: var(--color-success);
--color-admonition-important: var(--color-success);

--icon-admonition-default: var(--icon-info-circle);
--icon-admonition-note: var(--icon-info-circle);
--icon-admonition-attention: var(--icon-exclamation-circle);
--icon-admonition-caution: var(--icon-exclamation-triangle);
--icon-admonition-warning: var(--icon-exclamation-triangle);
--icon-admonition-danger: var(--icon-exclamation-triangle);
--icon-admonition-error: var(--icon-times-circle);
--icon-admonition-hint: var(--icon-lightbulb);
--icon-admonition-tip: var(--icon-lightbulb);
--icon-admonition-important: var(--icon-exclamation-circle);

}
6 changes: 3 additions & 3 deletions pydata_sphinx_theme/static/webpack-macros.html
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,13 @@

{% macro head_pre_bootstrap() %}
<link href="{{ pathto('_static/css/theme.css', 1) }}" rel="stylesheet" />
<link href="{{ pathto('_static/css/index.4eb26a98c046fa117c2b75e31c15adbb.css', 1) }}" rel="stylesheet" />
<link href="{{ pathto('_static/css/index.9d12c5eb74364d5955370ddd9e2b2e85.css', 1) }}" rel="stylesheet" />
{% endmacro %}

{% macro head_js_preload() %}
<link rel="preload" as="script" href="{{ pathto('_static/js/index.3edd59071b60732de7f5.js', 1) }}">
<link rel="preload" as="script" href="{{ pathto('_static/js/index.f77e788ac4de8d0ef24c.js', 1) }}">
{% endmacro %}

{% macro body_post() %}
<script src="{{ pathto('_static/js/index.3edd59071b60732de7f5.js', 1) }}"></script>
<script src="{{ pathto('_static/js/index.f77e788ac4de8d0ef24c.js', 1) }}"></script>
{% endmacro %}
68 changes: 34 additions & 34 deletions src/scss/_admonitions.scss
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
overflow: hidden;
page-break-inside: avoid;
border-left: 0.2rem solid;
border-color: rgba(var(--color-admonition-primary), 1);
border-color: rgba(var(--color-admonition-default), 1);
border-radius: 0.1rem;
box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05),
0 0 0.05rem rgba(0, 0, 0, 0.1);
Expand All @@ -33,17 +33,17 @@
margin: 0 -0.6rem !important;
padding: 0.4rem 0.6rem 0.4rem 2rem;
font-weight: 700;
background-color: rgba(68, 138, 255, 0.1);
background-color: rgba(var(--color-admonition-default), 0.1);

&:before {
position: absolute;
left: 0.6rem;
width: 1rem;
height: 1rem;
color: rgba(var(--color-admonition-primary), 1);
color: rgba(var(--color-admonition-default), 1);
font-family: 'Font Awesome 5 Free';
font-weight: 900;
content: var(--icon-info-circle);
content: var(--icon-admonition-default);
}

// Next element after title needs some extra upper-space
Expand All @@ -53,25 +53,25 @@
}

&.attention {
border-color: rgba(var(--color-admonition-warning), 1);
border-color: rgba(var(--color-admonition-attention), 1);
.admonition-title {
background-color: rgba(var(--color-admonition-warning), 0.1);
background-color: rgba(var(--color-admonition-attention), 0.1);

&:before {
color: rgba(var(--color-admonition-warning), 1);
content: var(--icon-exclamation-circle);
color: rgba(var(--color-admonition-attention), 1);
content: var(--icon-admonition-attention);
}
}
}

&.caution {
border-color: rgba(var(--color-admonition-warning), 1);
border-color: rgba(var(--color-admonition-caution), 1);
.admonition-title {
background-color: rgba(var(--color-admonition-warning), 0.1);
background-color: rgba(var(--color-admonition-caution), 0.1);

&:before {
color: rgba(var(--color-admonition-warning), 1);
content: var(--icon-exclamation-triangle);
color: rgba(var(--color-admonition-caution), 1);
content: var(--icon-admonition-caution);
}
}
}
Expand All @@ -83,7 +83,7 @@

&:before {
color: rgba(var(--color-admonition-warning), 1);
content: var(--icon-exclamation-triangle);
content: var(--icon-admonition-warning);
}
}
}
Expand All @@ -95,67 +95,67 @@

&:before {
color: rgba(var(--color-admonition-danger), 1);
content: var(--icon-exclamation-triangle);
content: var(--icon-admonition-danger);
}
}
}

&.error {
border-color: rgba(var(--color-admonition-danger), 1);
border-color: rgba(var(--color-admonition-error), 1);
.admonition-title {
background-color: rgba(var(--color-admonition-danger), 0.1);
background-color: rgba(var(--color-admonition-error), 0.1);

&:before {
color: rgba(var(--color-admonition-danger), 1);
content: var(--icon-times-circle);
color: rgba(var(--color-admonition-error), 1);
content: var(--icon-admonition-error);
}
}
}

&.hint {
border-color: rgba(var(--color-admonition-warning), 1);
border-color: rgba(var(--color-admonition-hint), 1);
.admonition-title {
background-color: rgba(var(--color-admonition-warning), 0.1);
background-color: rgba(var(--color-admonition-hint), 0.1);

&:before {
color: rgba(var(--color-admonition-warning), 1);
content: var(--icon-lightbulb);
color: rgba(var(--color-admonition-hint), 1);
content: var(--icon-admonition-hint);
}
}
}

&.tip {
border-color: rgba(var(--color-admonition-info), 1);
border-color: rgba(var(--color-admonition-tip), 1);
.admonition-title {
background-color: rgba(var(--color-admonition-info), 0.1);
background-color: rgba(var(--color-admonition-tip), 0.1);

&:before {
color: rgba(var(--color-admonition-info), 1);
content: var(--icon-lightbulb);
color: rgba(var(--color-admonition-tip), 1);
content: var(--icon-admonition-tip);
}
}
}

&.important {
border-color: rgba(var(--color-admonition-info), 1);
border-color: rgba(var(--color-admonition-important), 1);
.admonition-title {
background-color: rgba(var(--color-admonition-info), 0.1);
background-color: rgba(var(--color-admonition-important), 0.1);

&:before {
color: rgba(var(--color-admonition-info), 1);
content: var(--icon-exclamation-circle);
color: rgba(var(--color-admonition-important), 1);
content: var(--icon-admonition-important);
}
}
}

&.note {
border-color: rgba(var(--color-admonition-info), 1);
border-color: rgba(var(--color-admonition-note), 1);
.admonition-title {
background-color: rgba(var(--color-admonition-info), 0.1);
background-color: rgba(var(--color-admonition-note), 0.1);

&:before {
color: rgba(var(--color-admonition-info), 1);
content: var(--icon-info-circle);
color: rgba(var(--color-admonition-note), 1);
content: var(--icon-admonition-note);
}
}
}
Expand Down