Jump to content

Empfehlungen für Dunkelmodus-Kompatibilität auf Wikimedia-Wikis

From mediawiki.org
This page is a translated version of the page Recommendations for night mode compatibility on Wikimedia wikis and the translation is 70% complete.

Die Möglichkeit zwischen einem Standard-Modus und einem dunklen Modus zu wechseln ist ein Feature, das von vielen Websites und Geräten angeboten wird. Damit hat der Nutzer mehr Kontrolle darüber, die Ansicht lesefreundlich zu gestalten. Als Teil des Lesen/Web/Barrierefreies Lesen -Projekts wurde ein Dunkelmodus in unsere Software integriert.

Es gibt Bestrebungen einen dunklen Modus über alle Wikimedia-Wikis hinweg in die Nutzer-Einstellungen einzuführen, wowohl für Desktop als auch für die Mobil-Ansicht. Die Wikipedia-Apps für iOS und Android haben eine solche Option bereits seit einiger Zeit.

Ein bedeutendes Hindernis bei der Umsetzungen des dunklen Modus ist die Art und Weise wie Vorlagen aufgebaut und gestaltet sind. Eine weitere Herausforderung sind explizite Farbangaben durch CSS-Stile innerhalb der Artikel.

Wir können diese Probleme beheben, indem wir die Aufmerksamkeit für den dunklen Modus unter den Autoren erhöhen, insbesondere denjenigen die Vorlagen erstellen und bearbeiten. Denn Vorlagen sind häufig in vielen Artikeln eingebunden und haben dadurch einen besonders großen Einfluss auf die Kompatibilität.

Das folgende sind generelle Empfehlungen und Richtlinien die bei der Erstellung und Bearbeitung von Artikeln und Vorlagen beachtet werden sollten.

Wie nutze ich verschiedene Themes auf MediaWiki?

For now, you can append ?minervanightmode=1 to the end of any URL to see how the content currently behaves in the night theme. You can also use https://test.m.wikipedia.org/wiki/Special:MobileOptions to enable night mode on our test wiki. We will update this instruction as the feature develops.

Empfehlungen

Benutze empfohlene HTML-Markups zur Beschreibung von Vorlagen

Der Dunkelmodus wird mit Stilen ausgeliefert, die einige gut vestandene Probleme mit Vorlagen automatisch beheben. Dies ist wichtig für Projekte mit wenigen technischen Bearbeitern. Es ist möglich diese automatischen Anpassungen durch Hinzufügen der Klasse notheme zu einzelnen Elementen (oder auch global) zu verhindern (phab:T358071). Projekte, die diese Möglichkeit nicht nutzen, bekommen den dunklen Modus möglicherweise erst später als andere.

Mehr Informationen: Projektübergreifende Benutzung standardisierter Klassen im HTML-Markup von Vorlagen-Komponenten

Benutze gut erkennbare Farben, die den WCAG AA Test bestehen

Historisch wurden viele Farben eingesetzt, die nicht für alle Menschen gut erkennbar sind. Bei der Auswahl von Farben für den dunklen Modus, sollten auch die existierenden Farben mit dem WebAIM Kontrast-Prüfer überprüft werden. Ziehe in Betracht die Helligkeit anzupassen, um den Test zu bestehen. Eine Browser-Extension, wie "WCAG Color Contrast"(Chrome, oder Firefox) hilft ein stärkeres Bewusstsein für problematische Farb-Kontraste auf dem Wiki zu bekommen.

Schlechtes Beispiel

@media screen {
	html.skin-theme-clientpref-night .element {
		background-color: #666666;
		color: #ace;
	}
}

Gutes Beispiel

@media screen {
	html.skin-theme-clientpref-night .element {
		background-color: #383838;
		color: #ace;
	}
}

Berücksichtige den Dunkelmodus mit Standard-Media-Query und HTML-Klassen

Wenn der Dunkelmodus über die Nutzereinstellung aktiviert wurde, wird die Klasse skin-theme-clientpref-night zum HTML-Element hinzugefügt. Stile mit Dunkelmodus sollten aber auch prefers-color-scheme beachten, um den Dunkelmodus Nutzern anzubieten, die Themes aktiviert haben und den Dunkelmodus in ihren Betriebssystem-Einstellungen aktiviert haben. Damit werden auch diese Nutzer erreicht.

Schlechtes Beispiel

Template:Example/styles.css

html.skin-theme-clientpref-night .pane {
	background-color: white;
	color: black;
}

Gutes Beispiel

Template:Example/styles.css

/* forced night mode */
/* Note: If using a CSS variable, there is no need to make use of `@media screen` */
@media screen {
	html.skin-theme-clientpref-night .pane {
		background-color: black;
		color: white;
	}
}

@media screen and (prefers-color-scheme: dark) {
	/* automatic mode */
	html.skin-theme-clientpref-os .pane {
		background-color: black;
		color: white;
	}
}

Vermeide statische Werte für Text- und Hintergrundfarben

In einer großen Zahl von Vorlagen und Artikeln werden explizite Farbangaben genutzt, obwohl sie dort nicht notwendig sind. Erwäge bei der Erstellung und Überprüfung von Vorlagen solche expliziten Farbangaben zu entfernen. Das ermöglicht dem aktuellen Skin seine Stile auf alle Elemente anzuwenden.

Wenn Du den dunklen Modus nutzt und ein Element unangenehm heraussticht (z.B. ein hell-weißer Tabellen-Hintergrund), ist das sehr wahrscheinlich wegen solcher expliziter Farbangaben. Erwäge solche Artikel und Vorlagen zu überprüfen und die Farbangaben zu entfernen.

If you believe that a certain element should have a specific color, consider looking for an appropriate CSS class (provided by the skin) that can be applied to the element, which would give it a more distinguishing color. If such a CSS class is not available, consider contacting the skin developers with a request to create a new CSS class.

Es wird empfohlen Stylesheets (siehe auch Hilfe:TemplateStyles ) und CSS-Variablen zu nutzen.

Schlechtes Beispiel

Template:Example

<div class="pane" style="background-color: white; color: black;">Text</div>

Gutes Beispiel

Template:Example

<templatestyles src="Template:Example/styles.css" />
<div class="pane">Text</div>

Template:Example/styles.css

@media screen {
	html.skin-theme-clientpref-night .pane { background-color: black; color: white; }
}
@media screen and (prefers-color-scheme: dark) {
	html.skin-theme-clientpref-os .pane { background-color: black; color: white; }
}

Definiere Hintergrundfarben immer zusammen mit einer Textfarbe

Bei der Festlegung einer Hintergrundfarbe ist es verlockend auf die Festlegung der Textfarbe zu verzichten, wenn die Standardfarbe verwendet werden soll. Bei der Verwendung verschiedener Ansichten, wie beispielsweise einem Dunkelmodus, kann sich die Standard-Textfarbe unerwartet ändern. Daher wird empfohlen Hintergrund- und Textfarbe immer zusammen festzulegen. Über eine Lint-Regel können Artikel und Vorlagen mit diesem Problem identifiziert werden.

Auch bei der Nutzung von CSS-Variablen, sollten Text und Hintergrund immer zusammen festgelegt werden. Ansonsten könnte es zu unerwarteten Auswirkungen kommen, wenn z.B. eine Vorlage innerhalb einer anderen Vorlage oder einer Tabelle mit anderen Farbangaben verwendet wird.

Schlechtes Beispiel

Template:Example

<div style="background-color: yellow; padding: 16px;">Text</div>

Gutes Beispiel

Template:Example

<div style="background-color: yellow; color: #333; padding: 16px;">Text</div>

Nutze CSS-Variablen oder CSS-Design-Token mit Fallback für Hintergrundfarben

Recommendation is currently restricted to use inside TemplateStyles (phab:T360562, phab:T361934).

CSS variables can only be defined inside gadgets and site CSS e.g. MediaWiki:Common.css.

When using design tokens you must note that stability is currently not guaranteed and may require later changes based on phab:T340477.

Bei der Verwendung von Inline-Stilen für Text- und Hintergrundfarben nutze die CSS-Design-Token, die von den Skins unterstützt werden. Eine Liste der Design-Token findest Du in der Codex-Dokumentation. Nutze Fallbacks für Skins die CSS-Variablen nicht unterstützen.

Innerhalb eines Gadgets kannst DU auch eigene CSS-Variablen definieren (z.B. das night mode gadget on English Wikivoyage).

Schlechtes Beispiel

<span style="font-size:0.95em; font-size:95%; color: #54595d;">A subscription is required to read this URL.</div>

Gutes Beispiel

In diesem Beispiel wird das Design-Token color-subtle genutzt, mit #54595d als Fallback-Farbe für den Fall, dass ein Skin die CSS-Variablen nicht unterstützt. Das gibt Skins mit Dunkelmodus die nötigen Informationen um passende Farben anzubieten.

<!-- Always define a CSS fallback value for skins which do not support Codex e.g. Monobook. -->
<span style="font-size:95%; color:var(--color-subtle, #54595d);">A subscription is required to read this URL.</div>

Überschreiben der Dunkelmodus-Stile / Deaktivieren der Dunkelmodus-Anpassungen

In der aktuellen Implementation des Page Content Service (genutzt in der Mobilansicht zur Anzeige der Artikel), funktioniert der Dunkelmodus indem die Farbe der meisten Elemente mithilfe des CSS-Attributs !important überschrieben werden. Dies passiert wegen der großen Zahl an Vorlagen und Elemente mit expliziten Inline-Stilen. In der Webversion passiert dies in geringerem Umfang, hauptsächlich innerhalb von , und ähnlichen häufig verwendeten Vorlagen.

In manchen Fällen kann dieses Überschreiben der Farbangaben ungerechtfertigt sein oder Autoren damit nicht einverstanden sein. In solche Fällen kann durch Einfügen der Klasse notheme das Überschreiben verhindert werden. Dadurch wird ein Element unabhängig vom verwendeten Theme (z.B. dunkel/hell/sepia) immer exakt gleich dargestellt.

Schlechtes Beispiel

In diesem Beispiel wird ein Theme die Farben überschreiben (also im Dunkelmodus invertieren):

<div class="pane">Text</div>

Gutes Beispiel

In diesem Beispiel wird explizit aufgefordert die Farben nicht zu überschreiben.

<div class="pane notheme mw-no-invert">Text</div>

Filter für dunkle Bilder mit transparentem Hintergrund

Manche Bilder (z.B. Signaturen in Infoboxen) haben schwarzen Inhalt mit transparentem Hintergund. Im Dunkelmodus werden diese unlesbar weil der schwarze Inhalt auf schwarzem Hintergrund dargestellt wird. Um dies zu beheben kannst Du mit der Klasse skin-invert bzw. skin-invert-image einen CSS-Invert-Filter hinzufügen. Wenn ein Bild mit einer Beschriftung versehen ist, muss die Klasse skin-invert-image verwendet werden, um zu verhindern, dass die Beschriftung mit invertiert wird.

Schlechtes Beispiel

In diesem Beispiel wird die schwarze Signatur im Dunkelmodus auf schwarzem Hintergrund dargestellt.

[[File:Tupac Shakur's signature.svg|thumb]]
[[File:Gas flare fr.svg|thumb|left|Éléments d'une torchère.|alt=Schéma. Le gaz est séparé du pétrole, déshumidifié, et envoyé vers la cheminée, il y a un allumeur au sommet.]]

Gutes Beispiel

In diesem Beispiel werden die Farben invertiert, sodass die Signatur weiß dargestellt wird.

[[File:Tupac Shakur's signature.svg|thumb|class=skin-invert]]
[[File:Gas flare fr.svg|thumb|left|class=skin-invert-image|Éléments d'une torchère.|alt=Schéma. Le gaz est séparé du pétrole, déshumidifié, et envoyé vers la cheminée, il y a un allumeur au sommet.]]

For templates with no option to specify the class, you can use a <div> tag to wrap around the template and apply the class there. For example:

<div class="skin-invert-image">
    {{multiple image|align=center|total_width=540
        |image1=...
    }}
</div>

To invert all images in a gallery , you can add either the skin-invert or skin-invert-image class to the ‎<gallery> tag, depending on the context. (If your gallery uses captions, you should use skin-invert-image to avoid inverting the caption text.)

Gallery example

<gallery class="skin-invert-image">
Tupac Shakur's signature.svg
Gas flare fr.svg|Éléments d'une torchère.|alt=Schéma. Le gaz est séparé du pétrole, déshumidifié, et envoyé vers la cheminée, il y a un allumeur au sommet.
</gallery>

When skin-invert does not work

Certain images will not be easily invertible in night mode without losing important information (for instance, images with a dark base accompanied by bright colors). In these cases, the best option to preserve the image's original colors is probably to provide a light-colored background rather than invert the image, so that it can be seen in both day and night modes.


Vermeide background: none und background: transparent

Diese sind in der Regel unnötig und stören die automatischen Anpassungen für den Dunkelmodus. Sie sollten entfernt oder wo notwendig in TemplateStyles ausgelagert werden.

Schlechtes Beispiel

<div style="background: transparent;">Text with transparent background</div>

Gutes Beispiel

Die Hintergrundangabe ist unnötig.

<div>Text with transparent background</div>

Akzeptables Beispiel

Wenn der Hintergrund nötig ist definiere auch color: inherit.

<div style="background: transparent; color: inherit;">Text with transparent background</div>

Advice for editors building alternative themes

More generally, we want to encourage editors to think of templates and articles as being agnostic with respect to theming and styles. In addition to night mode, there can be any number of potential color themes, and indeed the Wikipedia mobile apps (via the Page Content Service) already offer a "sepia" theme, as well as a "black" theme intended for power-saving OLED screens.

To invert or not to invert?

An invert using CSS filters provides a quick way to convert content designed in a light theme into a darker theme. While we cannot recommend this approach for all content , it is still a useful tool that can often be utilized safely and cheaply. The Wikipedia night mode gadget uses the invert CSS filter property to style content. You can prevent an element from having colors inverted by adding the mw-no-invert class. You can also use the skin-invert class to request that the content is inverted by the software when available.

Consider patterns rather than background colors

Colorblind readers can have difficulties telling apart and recognizing small colored items. In articles, consider using patterns rather than, or in addition to, color where appropriate. Ideally, where the pattern is separate from the text. Consider using monochrome CSS Background Patterns and reading about how Trello introduced a colorblind friendly mode.

Bad example

Template:Example/styles.css

html.skin-theme-clientpref-night .ib-youtube-above {
	background-color: #B60000;
	color: white;
}

Good example

Template:Example/styles.css

@media screen {
	html.skin-theme-clientpref-night .ib-youtube-above {
		background-image: linear-gradient(135deg, #ff1c00 25%, transparent 25%), linear-gradient(225deg, #ff1c00 25%, transparent 25%), linear-gradient(45deg, #ff1c00 25%, transparent 25%), linear-gradient(315deg, #ff1c00 25%, var(--background-color-base) 25%);
		background-position: 8px 0, 8px 0, 0 0, 0 0;
		background-size: 8px 8px;
		background-repeat: repeat-x;
	}
}

It is quite common for editors to create tables with background colors defined on rows or columns. If the table contains links this can be problematic, as often the color choices will be tailored towards accessibility in the standard theme, or will not consider accessibility at all.

For example the links in this table are accessible in light theme but not the dark theme:

Phab ticket Description
T360844 Links in elements with background color should become black with an underline so they are accessible
T357575 File pages are not compatible with night mode

Instead of blue links inside these tables, such links will appear as black. If this behaviour is not wanted, please revise your tables to not use inline styles.

More information in phab:T371411.

Note this behaviour only applies to article namespace. If you are using a table with different colored rows in another namespace, you should consider creating a template that provides support for making links pass WCAG AA color contrast standards. You can use Extension:TemplateStyles to style links appropriately.

Disabled text does not necessarily need to meet color contrast guidelines

From https://www.w3.org/WAI/WCAG21/Understanding/non-text-contrast.html

User Interface Components that are not available for user interaction (e.g., a disabled control in HTML) are not required to meet contrast requirements. An inactive user interface component is visible but not currently operable. An example would be a submit button at the bottom of a form that is visible but cannot be activated until all the required fields in the form are completed.

The page looks fine to me, despite not following these rules, why?

To reduce the amount of initial work that is required for wikis to adopt night mode, various generalized solutions may have been applied for the time being to pages to help them comply with night mode. These styles will eventually be removed, when wikis have adapted to the new theme.

These are listed here:

  • WikimediaMessages SiteAdminHelper - the site admin helper ships various styles that improve night mode support - this includes disabling/updating backgrounds and borders in elements with the class .navbox, .infobox, .quotebox, .side-box, .metadata, .navigation-box, and all elements on the main page. It also enforces black text color on any element which defines an inline style with a background rule. Note, while this fixes the large majority of issues, this also causes breakage to some elements, in particular any style attribute that sets background: inherit and background: transparent.
  • MediaWiki:Vector-2022.css / MediaWiki:Minerva.css rules - some wikis may have adopted generalized rules that change links to black underlined text to any table element that have inline styles that apply backgrounds. For example English Wikipedia.
  • A local solution may have already been applied to the template you are looking at. Be sure to inspect the element and look at any associated styles provided by template styles that may be applying specific rules when the night theme classes are detected on the HTML element.

Examples

The following tickets explain fixes for various namespaces/templates and types of pages that were applied to a single project. They may be useful to other projects with similar templates or outdated copies of those templates.

Please be sure to read the associated discussion – and ask questions if you have any so other projects can benefit from sharing expertise.

General issues

Portals

  • Portal:Current events

T357717

Templates / modules

  • Template:Color

T360683

  • Module:Track listing

T357730

Messages

Please review the following messages on your wiki: