python / python/python-docs-theme

Set CSS value in HTML to reflect current theme

Open
#192 9 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement help wanted
Dominant language
CSS
Stars
90
Forks
78
Avg merge
2d 19h
Merged PRs (30d)
4

Description

See this page, where the anchor points to an SVG. If you ensure that there's no theme in local storage for this page, then if the browser settings are used to switch between dark and light modes (I'm using Firefox), the SVG is styled appropriately to display correctly. However, if I use the theme selector on the page to select dark mode when the browser is set to light mode, the SVG does not display correctly.

The reason is that I style for light mode and use a media query to override some styles, using @media (prefers-color-scheme: dark). However, when the theme selector is used to select dark mode, then some dark-mode CSS is pulled in using the activateTheme() JS function, but from what I can tell this leaves no trace in the markup that we're now in dark mode. If there were e.g. a dark-theme class added to the <body> tag when the page is in dark mode, then I could duplicate the styling using an appropriate selector. My complete styling of the SVG is:

    svg {
      background-color: transparent !important;
    }
    line {
      stroke: #000000;
      fill: none;
      stroke-opacity: 1;
    }
    polygon, rect {
      fill: none;
      stroke: #000000;
      fill-opacity: 1;
      stroke-opacity: 1;
    }
    polygon.filled {
      fill: #ff0000;
    }
    polyline {
      fill: none;
      stroke-opacity: 1;
      stroke: #000000;
    }
    text {
      fill: #000000;
      fill-opacity: 1;
      stroke: none;
      font-family: sans-serif;
      font-style: normal;
      font-weight: normal;
      text-anchor: start;
    }
    @media (prefers-color-scheme: dark) { /* could duplicate this styling if body.dark-theme */
      polygon, rect, polyline, line {
        stroke: #ffffff;
      }
      text {
        fill: #ffffff;
      }
    }

If there is another approach I could use to achieve the desired result (proper styling of the SVG in all cases), please let me know. Otherwise, would you consider adding dark-theme class to the body or other container tag so that I could try and achieve the desired result? Or have I missed somewhere where such a class has been added?

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by tracing the theme selector and the activateTheme() function to see how the selected theme is applied to the page. Add a reliable dark-mode marker to the relevant page container, then confirm that SVG styling can distinguish the selector-chosen dark mode from light mode and browser-preference dark mode.

Written by the indexing model from the issue text.

Assessment

Tech stack
css, javascript
Domain
documentation, frontend
Issue type
Feature
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.