Nicht alle Menschen nutzen digitale Inhalte auf dieselbe Weise. Manche Menschen bevorzugen den Dunkelmodus ihres Betriebssystems oder vergößeren aufgrund einer Seheinschränkung die Ansicht. Andere ändern die Schriftgröße im Browser oder, was vielleicht weniger bekannt ist, stellen dort eigene Farben für Texte und Hintergründe ein.

Solche Farbeinstellungen können allerdings dazu führen, dass Inhalte oder einzelne Elemente und deren Zustände nur noch schwer oder gar nicht zu erkennen sind. Dieser Artikel zeigt vier typische Fälle aus der Praxis. Er erklärt, woran es scheitert und wie es sich lösen lässt.

Firefox-Farbeinstellungen

Firefox bietet die Möglichkeit, für Text und Hintergrund sowie für besuchte und unbesuchte Links eigene Farben einzustellen.

Die Oberfläche ändert sich häufig. Entsprechend dem Stand von Oktober 2026 finden Sie die Optionen unter:

  1. Einstellungen — Barrierefreiheit — Bereich „Kontraststeuerung“
  2. Unter „Farben überschreiben“ die Option „Benutzerdefiniert“ wählen
  3. Schaltfläche „Farben verwalten“ — im Dialog Text zum Beispiel auf Gelb und Hintergrund auf Schwarz stellen

Technisch schaltet Firefox damit in den Modus „forced colors“. Was dabei passiert, versteht man am besten, wenn man sich ansieht, woher Farben im Browser überhaupt kommen.

Systemfarben

Der Browser führt eine Liste von Farben, in der jeder Eintrag für eine bestimmte Art von Element zuständig ist. Anders ausgedrückt: jeder Eintrag hat eine bestimmte Rolle: Hintergrund der Seite, Text der Seite, Fläche von Schaltflächen, Beschriftung von Schaltflächen und einige weitere.

Diese Liste gibt es nicht erst seit dem Web, sondern schon seit jeher für Betriebssysteme. Alle Programme, die darauf zugreifen, sehen damit einheitlich aus — daher der Name Systemfarben.

Der Browser bedient sich aus dieser Liste für sein eigenes Stylesheet — also für die Grundgestaltung, die jede Seite bekommt, bevor das Entwicklungsteam die erste Zeile CSS geschrieben hat. Die Farben sind in dem Stylesheet nicht fest definiert, sondern verweisen mithilfe von Schlüsselwörtern auf diese Liste. Vereinfacht sieht das so aus:

html {
    color: CanvasText;
    background-color: Canvas;
}
a:link {
    color: LinkText;
}

Das Schlüsselwort Canvas steht für den Hintergrund der Seite oder eines Inhaltsbereichs, CanvasText für die Textfarbe der Seite oder eines Inhaltsbereichs, LinkText für die Farbe von Links.

Eine Seite ohne eigenes CSS nutzt standardmäßig Schwarz auf Weiß, weil in den Listeneinträgen üblicherweise Schwarz für Text und Weiß für Hintergrund steht. Genau diese Einträge füllen Nutzende mit der Firefox-Farbeinstellung neu.

Allerdings deckt die Einstellung nicht die ganze Liste ab. Firefox lässt Nutzende nur vier Farben festlegen: Text, Hintergrund und die beiden Linkfarben. Die übrigen Einträge — etwa die für Schaltflächen — füllt der Browser selbst. Ein Windows-Kontrastdesign deckt dagegen mehr davon ab.

Wann der Browser auf diese Liste zugreift, hängt davon ab, was die Seite beziehungsweise das CSS selbst vorgibt und ob Nutzende eigene Farben eingestellt haben:

  • Wenn die Seite eine Farbe nennt, etwa background-color: #25377a , dann hat diese Angabe Priorität, die Systemfarben kommen nicht zum Zug.
  • Wenn die Seite keine Farbe nennt, greift der Browser auf die Systemfarben zurück.
  • Wenn Nutzende eigene Farben einstellen, werden die entsprechenden Systemfarben mit diesen Farben belegt. Für die Rolle Textfarbe kommt die eingestellte Textfarbe zum Einsatz, für die Rolle Hintergrund die eingestellte Hintergrundfarbe. Der Browser ersetzt bestimmte Farbangaben der Seite durch diese neu aufgefüllten Systemfarben. Damit setzen sich die Farbeinstellungen der Nutzenden gegenüber den ursprünglichen Farbangaben der Seite durch.

Dieser Modus heißt in CSS „forced colors“ und lässt sich mithilfe einer Media Query abfragen: @media (forced-colors: active). Damit kann CSS gezielt auf die Einstellung von Nutzenden reagieren. Wir kommen später darauf zurück.

Der Begriff „Hochkontrastmodus“ meint im Sprachgebrauch in der Regel die Einstellung des Betriebssystems, die sich in einem Detail etwas anders verhält (siehe unten beim Beispiel Symbolschaltflächen). Daher wird er an dieser Stelle vermieden.

Eigene Farben berücksichtigen

Um zu vermeiden, dass Inhalte der Seite bei eigenen Farben nicht mehr sichtbar sind, können in bestimmten Situationen das Schlüsselwort currentColor oder Systemfarben helfen. Umsetzende können damit erreichen, dass sich die Inhalte an die Darstellungsumgebung anpassen. Die folgenden vier Anwendungsfälle sollen dies zeigen.

Drei der vier Fälle lassen sich mit currentColor lösen, ganz ohne Media Query. Erst der vierte Fall braucht die Systemfarben und damit die Schlüsselwörter aus der bereits erwähnten Liste.

Icons mit fester Farbe

Icons erfüllen im Web unterschiedliche Aufgaben: Sie sollen auf einen Blick Informationen vermitteln oder Text mithilfe eines Symbols ergänzen – sowohl dekorativ als auch inhaltlich. Beispiele dafür sind:

  • ein Häkchen oder Kreuz in einer Tabelle als Statusanzeige
  • ein Telefonsymbol vor einer Telefonnummer als informationstragende Grafik

Solche Icons werden häufig als Inline-SVGs mit fest definierter Füllfarbe eingebunden, etwa fill="#000000" am <path>. Die Farbe steckt als Attribut im exportierten SVG.

Das Problem ist dabei, dass diese fest definierte Farbe beibehalten wird, wenn Nutzende eigene Farben einstellen. Ein schwarzes Häkchen in einer Tabelle ist bei einer Einstellung von gelber Schrift auf schwarzem Hintergrund nicht mehr zu sehen. Es liegt dann schwarz auf schwarz. Die Information geht verloren.

Die Farbe bleibt in Firefox stehen, unabhängig davon, ob sie als Attribut im SVG oder als CSS-Angabe notiert ist.

Das Schlüsselwort currentColor kann hier helfen. Neben den Schlüsselwörtern für Systemfarben oder den Farbnamen, wie blue oder pink, ist es eine weitere Möglichkeit, Farben im CSS anzugeben.

Dabei dient currentColor als Stellvertreter für den aktuellen Farbwert der CSS-Eigenschaft color eines Elements. Auf diese Weise lässt sich die Textfarbe auch für andere Farbeigenschaften verwenden, beispielsweise für fill.

Definiert man die Füllfarbe eines SVG-Elements mit currentColor, statt mit einer festen Farbe, übernimmt das Icon den aktuellen Wert der CSS-Eigenschaft color und damit die Textfarbe des Elements.

    .icon {
      fill: currentColor;
    }

    Das Icon wird in unserem Beispiel gelb, da wir eine gelbe Textfarbe auf schwarzem Hintergrund eingestellt haben.

    Definiert man die Farbe im CSS, muss das fill-Attribut aus dem SVG verschwinden, denn eine geerbte CSS-Angabe setzt sich nicht gegen ein Attribut am <path> durch. Das Häkchen steht in einer Tabellenzelle und erbt deren Farbe, sodass keine eigene Textfarbe erforderlich ist.

    Wichtig ist der Unterschied zwischen den drei Angaben:

    • color: blue legt die CSS-Textfarbe fest.
    • fill: blue legt die Füllfarbe eines SVG-Elements explizit fest (feste Füllfarbe).
    • fill: currentColor verwendet dagegen den aktuellen Wert von color — und den ersetzt der Browser bei eigenen Farbeinstellungen.
    Zwei Tabellen mit Häkchen. Links, schwarz auf Weiß: beide Häkchen sind schwarz. Rechts, gelb auf Schwarz: das Häkchen mit festem fill bleibt dunkel und geht unter, das mit currentColor wird gelb.
    Status-Häkchen

    SVGs mit fester Farbe behalten diese bei eigenen Farbeinstellungen und gehen im Hintergrund unter. currentColor löst das.

    Quelle: tollwerk GmbH, , Alle Rechte vorbehalten

    Symbolschaltflächen

    Viele Benutzeroberflächen nutzen Icons, um Funktionen visuell zu kennzeichnen. Bei Schaltflächen ohne sichtbare Beschriftung vermittelt das Icon allein, welche Aktion die Schaltfläche auslöst. Typische Beispiele sind:

    • ein Lupensymbol für „Suche“
    • ein Stift-Symbol für „Bearbeiten“
    • ein Papierkorb für „Löschen“

    Wird das Icon unsichtbar, bleibt eine leeres Fläche. Die Lösung ist hier ebenfalls fill: currentColor.

    <button aria-label="Bearbeiten">
      <svg viewBox="0 0 24 24">
        <path d="M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25z…" />
      </svg>
    </button>
    .button {
      color: #25377a;
      fill: currentColor;
      background-color: #ffffff;
      border: 2px solid #25377a;
    }

    fill greift hier auf die Eigenschaft color desselben Elements zurück — nicht auf die Textfarbe der Seite.

    Das Icon lässt sich also beliebig einfärben, während der umgebende Text schwarz bleibt. Es folgt trotzdem der Farbe, die der Browser bei eigenen Farbeinstellungen für Beschriftungen vorsieht.

    Bei Schaltflächen gibt es jedoch eine Besonderheit: Ein <button> bekommt nicht die eingestellten Seitenfarben, sondern das Systemfarbpaar für Schaltflächen — ButtonFace für die Fläche, ButtonText für die Beschriftung.

    Welche Farben das sind, lässt sich nicht vorhersagen. In Firefox stammen sie nicht aus den vier eingestellten Werten, sondern der Browser wählt ein helles oder dunkles Paar, passend zur Helligkeit des eingestellten Hintergrunds. Unter einem Windows-Kontrastdesign stammen sie aus dem Design, dort gehört „Schaltflächentext“ zu den einstellbaren Farben.

    Gerade weil man die Farbe der Fläche nicht kennt, ist currentColor hier richtig: Das Icon übernimmt die Beschriftungsfarbe und damit die Farbe, die das System als Gegenstück zu dieser Fläche vorsieht.

    Eine feste Farbe im SVG bleibt auch hier stehen, während Fläche und Beschriftung ersetzt werden. Auf der neuen Fläche kann sie dadurch untergehen.

    Zwei Symbolschaltflächen mit Stift. Links, schwarz auf Weiß: beide Stifte sind blau auf weißer Schaltfläche. Rechts, gelb auf Schwarz: die Schaltflächen haben eine dunkelgraue Fläche, der Stift mit festem fill bleibt dunkelblau und ist kaum zu erkennen, der mit currentColor wird weiß.
    Stift-Symbol

    Bei eigenen Farben bekommt die Schaltfläche ihr eigenes Systemfarbpaar. Nur der Stift mit currentColor übernimmt die Beschriftungsfarbe und bleibt sichtbar.

    Quelle: tollwerk GmbH / Sonja Weckenmann, , Alle Rechte vorbehalten

    Grafische Elemente aus Hintergrundfarben

    currentColor ist nicht auf SVG beschränkt. Es ist ein ganz normaler Farbwert und überall erlaubt, wo CSS eine Farbe erwartet — also auch bei background-color, border-color, outline-color oder text-decoration-color.

    Manche grafische Elemente bestehen dabei allein aus background-color. Dazu gehören beispielsweise:

    • ein Hamburger-Icon aus drei Balken
    • ein Statuspunkt als Kreis mit border-radius: 50%
    • die Füllung eines Fortschrittsbalkens

    Werden die Farben überschrieben, ersetzt der Browser background-color durch die eingestellte Hintergrundfarbe. Die Farbe des grafischen Elements und die Hintergrundfarbe fallen zusammen. Das Element verschwindet.

    Hier liegt ein wichtiger Unterschied zum SVG-Fall: Ein fest eingetragenes fill bleibt stehen. Der Fehler tritt also nur bei manchen Farbkombinationen auf. Eine feste background-color wird dagegen tatsächlich ersetzt. Das Element verschwindet deshalb immer, unabhängig davon, welche Farben jemand gewählt hat.

    <span class="hamburger">
      <span></span>
      <span></span>
      <span></span>
    </span>
    .hamburger span {
      display: block;
      height: 2px;
      background-color: currentColor;
    }

    Genau wie bei fill löst currentColor zur Textfarbe des Elements auf. Bei überschriebenen Farben ist das die eingestellte Vordergrundfarbe. Der Balken wird so dunkel oder hell wie der Text daneben und hebt sich von der Fläche ab. Auch hier braucht es keine Media Query.

    Zwei Hamburger-Icons aus je drei Balken. Links, schwarz auf Weiß: beide sind schwarz. Rechts, gelb auf Schwarz: das Icon mit fester Hintergrundfarbe ist vollständig verschwunden, das mit currentColor ist gelb.
    Hamburger-Icon

    Eine feste Hintergrundfarbe wird durch die eingestellte ersetzt, das Icon ist nicht mehr zu sehen. Mit currentColor als Hintergrundfarbe werden die Balken in der Textfarbe eingefärbt.

    Quelle: tollwerk GmbH / Sonja Weckenmann, , Alle Rechte vorbehalten

    Wenn currentColor nicht ausreicht

    Nicht immer reicht es, wenn ein Element die eingestellte Textfarbe übernimmt. Bei manchen Elementen wird eine Auswahl dadurch hervorgehoben, dass sich sowohl die Hintergrundfarbe als auch die Textfarbe ändern: Die gewählte Option bekommt eine farbige Fläche, während die Schrift darauf hell dargestellt wird.

    Typische Anwendungsfälle sind:

    • Filter, die wie Schaltflächen aussehen
    • der aktive Tab in einer Tab-Leiste
    • segmentierte Umschalter, etwa zur Auswahl einer Größe: Klein / Mittel / Groß

    Werden die Farben überschrieben, sehen alle Optionen gleich aus. Sie bekommen die gleiche eingestellte Hintergrundfarbe, und der Zustand ist nicht mehr erkennbar.

    Entscheidend ist, ob allein die Fläche die Information vermittelt. Gibt es ein zweites Merkmal, etwa ein Icon, bleibt der Zustand auch ohne Farbe ablesbar.

    Das Schlüsselwort currentColor hilft in diesem Anwendungsfall nicht. Es liefert nur eine Farbe: die Textfarbe. Gebraucht werden jedoch zwei, und zwar genau die beiden, die Nutzende eingestellt haben.

    Die Lösung liegt hier in den Systemfarben, die sich im CSS direkt ansprechen lassen: Canvas ist der Hintergrund der Seite, CanvasText der Text.

    <input type="radio" name="size" id="size-m">
    <label for="size-m">Mittel</label>
    /* Das input ist visuell verborgen, das label ist als Kästchen gestaltet*/
      label {
        color: #25377a;
        background-color: #ffffff;
        border: 2px solid #25377a;
      }
      input:checked + label {
        color: #ffffff;
        background-color: #25377a;
      }
    @media (forced-colors: active) {
      label {
        color: CanvasText;
        background-color: Canvas;
        border-color: CanvasText;
      }
      input:checked + label {
        color: Canvas;
        background-color: CanvasText;
      }
    }

    Damit die ausgewählte Option invertiert dargestellt wird, muss zunächst per CSS der Modus „forced colors“ abgefragt werden (@media (forced-colors: active)), Firefox aktiviert diesen Modus technisch, sobald benutzerdefinierten Farben zum Einsatz kommen.

    Anschließend werden im CSS CanvasText als Textfarbe und Canvas als Hintergrund zugewiesen. Bei der ausgewählten Option sind diese beiden Farben vertauscht, sodass sie invertiert erscheint.

    Die beiden eingestellten Farben sind dabei zwangsläufig gut voneinander abgesetzt — schließlich liest die Person damit die gesamte Seite. Tauscht man sie, hebt sich die Auswahl deutlich ab und erreicht denselben Kontrast wie normaler Fließtext.

    Auswahl „Zellgröße&quot;: Klein, Mittel, Groß, gewählt ist Mittel. Links, schwarz auf Weiß: in beiden Varianten ist die gewählte Option blau gefüllt mit weißer Schrift. Rechts, gelb auf Schwarz: mit festen Farben sehen alle drei gleich aus, mit vertauschten Systemfarben ist die gewählte Option gelb gefüllt mit schwarzer Schrift.
    Auswahlschalter

    Bei eigenen Farben bekommen alle Optionen dieselbe Hintergrundfarbe, die Auswahl verschwindet. Bei vertauschten Systemfarben ist sie wieder sichtbar.

    Quelle: tollwerk GmbH / Sonja Weckenmann, , Alle Rechte vorbehalten

    Zusammenfassung

    currentColor repräsentiert den Wert von color am Element selbst. Wer damit Icons, Flächen, Rahmen oder Linien einfärbt, bindet sie an die Textfarbe — und die ersetzt der Browser bei eigenen Farbeinstellungen. Die Farbe wird für das Element also übernommen. Firefox ersetzt ein festes fill übrigens nicht, obwohl der Standard das vorsieht.

    Reicht eine Farbe nicht aus, kommen die Systemfarben ins Spiel. Stellen Nutzende eigene Farben ein, schaltet der Browser in den Modus „forced colors“, und genau den kann CSS abfragen: @media (forced-colors: active). Innerhalb dieser Media Query lassen sich Canvas und CanvasText direkt ansprechen, also die beiden Farben, die Nutzende selbst gewählt haben. Sie stammen aus der Einstellung, daher überschreibt der Browser sie nicht.

    Ressourcen