Skip to content

Off-the-rack night theme #7

@JayPanoz

Description

@JayPanoz

We’re very likely to ship with a “standard” theme for night mode. There are a couple of issues we must deal with, especially as it is a11y-related. In other words, we can probably make a few compromises but authors will have to make the most.

In the spirit of issue #5, I’d like to kickstart the conversation way ahead of time.

The current situation

The sad truth is that nobody knows how to deal with that.

  • Invert/High contrast modes at the Operating System Level use a global filter (Windows | Mac).
  • MacOS/iOS are not a global setting but a list of independent settings e.g. you can invert colors and use monochrome, and then add high contrast.
  • Google has had a hard time implementing high contrast mode in Chrome.
  • Reader Modes usually get rid of authors’ CSS so they don’t even have to deal with the related issues.
  • Reading Systems sometimes use a global filter as well, sometimes try to do it via CSS.
  • Kindle is normalizing colors and enforcing sufficient contrast ratio when converting EPUB files to KFX (+ font-family and font-size by the way)

Major issues

  • Night mode ≠ white on black: it can be white on dark grey, it can be #FCFCFC on #121212, etc.
  • Images: when there are a lot and they have a white background, night modes becomes useless. And we don’t know which images to invert, we can’t even rely on the format. There is some stuff I can manage with, say, 95% confidence (epub:type title page + image) though.
  • SVG: even more complex than images.
  • Backgrounds: figures, asides, etc. are complex to manage, especially as there are CSS hacks out there (using a linear-gradient + -webkit-text-fill-color for text). There’s also text on background images which we’d better not override if we don’t override background-image (JS territory).
  • Borders: what do do of black borders, borders for which the color doesn’t provide sufficient contrast, etc? And we can’t check the color for the border’s element in pure CSS, that’s JS territory.
  • Colors: contrast is an issue, especially when night mode is used as an a11y tool. Once again, the -webkit-text-fill-color hack might be used to enforce links’ or headings’ color.
  • Gaiji i.e. a character that is valid in a given writing system, but that is not included in the present font and/or the present character encoding, and which therefore is displayed using an image, which we must invert at any cost necessary (and we can’t do p > img). iBooks had to create a metadata for that.
  • Performance: if we have to check every element in the DOM, it will kill performance. Once again, this is something for which I wish we had Houdini (at 97% support).

Design

At first sight:

  • Will override background-color and border-color but not background-image;
  • Will override color but not -webkit-text-fill-color;
  • Won’t invert images, and this is why I’m pushing for a mechanism so that authors can signal some images must be inverted. It could be ARIA territory (cc @rdeltour) since it also impacts high-contrast mode in nasty ways (cf. google issues in Chrome implem);
  • SVG is a tough one, especially if the background is transparent and the author is not using currentColor for fill (can check some SVG attributes and the colors but it will result in insane CSS selectors);
  • We must find something for gaiji; the fact iBooks and Kindle bothered implementing specific mechanisms to deal with it kind of show this is critical;
  • Performance is @danielweck’s territory. I can find clever ways to deal with some overrides but for the complex ones, we can’t do without computed styles.

Possible issues this will create

  • RSs stand in the first line so they will take the heat if users complain, especially if other RSs manage night mode the way the user wishes;
  • Since there is no real “standard” in managing night mode, I can’t even tell what the users’ expectations are;
  • Some authors will probably complain about color and stuff (but it’s an accessibility issue);
  • Some others will point out alternate stylesheets exist (but it doesn’t solve the issues for the millions of files out there).

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions