hue-rotate()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2016.

Die hue-rotate() CSS Funktion rotiert den Farbton (hue) eines Elements und seines Inhalts. Das Ergebnis ist eine <filter-function>.

Hinweis: hue-rotate() wird als Matrixoperation auf der RGB-Farbe spezifiziert. Es konvertiert die Farbe nicht wirklich in das HSL-Modell, was eine nicht-lineare Operation ist. Daher kann es die Sättigung oder Helligkeit der ursprünglichen Farbe nicht bewahren, insbesondere bei gesättigten Farben.

Probieren Sie es aus

filter: hue-rotate(0);
filter: hue-rotate(90deg);
filter: hue-rotate(-0.25turn);
filter: hue-rotate(3.142rad);
<section id="default-example">
  <img
    class="transition-all"
    id="example-element"
    src="/shared-assets/images/examples/firefox-logo.svg"
    width="200" />
</section>

Syntax

css
hue-rotate(angle)

Werte

angle Optional

Die relative Änderung des Farbtons der Eingabeprobe, angegeben als ein <angle>. Ein Wert von 0deg lässt die Eingabe unverändert. Eine positive Farbtonrotation erhöht den Farbtonwert, während eine negative Rotation den Farbtonwert verringert. Der Anfangswert für Interpolation ist 0. Es gibt keinen minimalen oder maximalen Wert. Der Effekt von Werten über 360deg wird bei hue-rotate(Ndeg) als N modulo 360 ausgewertet. Der Standardwert ist 0deg.

Der CSS-Datentyp <angle> repräsentiert einen Winkelwert, der in Grad, Gradian, Radiant oder Umdrehungen ausgedrückt wird. Die folgenden sind gleichwertig:

css
hue-rotate(-180deg)
hue-rotate(540deg)
hue-rotate(200grad)
hue-rotate(3.14159rad)
hue-rotate(0.5turn)

Formale Syntax

<hue-rotate()> = 
hue-rotate( [ <angle> | <zero> ]? )

Beispiele

Mit der Eigenschaft backdrop-filter

Dieses Beispiel wendet einen hue-rotate() Filter über die CSS-Eigenschaft backdrop-filter auf den Absatz an, wodurch der Bereich hinter dem <p> farblich verschoben wird.

css
.container {
  background: url("/shared-assets/images/examples/listen_to_black_women.jpg")
    no-repeat left / contain #011296;
}
p {
  backdrop-filter: hue-rotate(240deg);
  text-shadow: 2px 2px #011296;
}

Mit der Eigenschaft filter

Dieses Beispiel wendet einen hue-rotate() Filter über die CSS-Eigenschaft filter an und fügt die Farbverschiebung dem gesamten Element hinzu, einschließlich Inhalt, Rahmen und Hintergrundbild.

css
p {
  filter: hue-rotate(-60deg);
  text-shadow: 2px 2px blue;
  background-color: magenta;
  color: goldenrod;
  border: 1em solid rebeccapurple;
  box-shadow:
    inset -5px -5px red,
    5px 5px yellow;
}

Mit url() und dem SVG-Farbton-rotationsfilter

Das SVG-<filter>-Element wird verwendet, um benutzerdefinierte Filtereffekte zu definieren, die dann durch id referenziert werden können. Der <filter>-Primitive <feColorMatrix>-Typ hueRotate bietet denselben Effekt. Gegeben folgendes:

html
<svg
  xmlns="http://www.w3.org/2000/svg"
  viewBox="0 0 220 220"
  color-interpolation-filters="sRGB"
  height="220"
  width="220">
  <filter id="hue-rotate">
    <feColorMatrix type="hueRotate" values="90" />
  </filter>
</svg>

Diese Werte führen zu denselben Ergebnissen:

css
filter: hue-rotate(90deg); /* 90deg rotation */
filter: url(#hue-rotate); /* with embedded SVG */
filter: url(folder/fileName.svg#hue-rotate); /* external svg filter definition */

Dieses Beispiel zeigt drei Bilder: das Bild mit einer angewandten hue-rotate() Funktion, das Bild mit einem gleichwertigen url() Filter und die Originalbilder zum Vergleich:

hue-rotate() bewahrt nicht Sättigung oder Helligkeit

Das unten stehende Diagramm vergleicht zwei Farbverläufe, die mit Rot beginnen: Der erste wird mit hue-rotate() erzeugt, der zweite verwendet tatsächliche HSL-Farbwerte. Beachten Sie, wie der hue-rotate() Verlauf offensichtlich Unterschiede in Sättigung und Helligkeit in der Mitte zeigt.

html
<div>
  <p>Using <code>hue-rotate()</code></p>
  <div id="hue-rotate"></div>
</div>
<div>
  <p>Using <code>hsl()</code></p>
  <div id="hsl"></div>
</div>
js
const hueRotate = document.getElementById("hue-rotate");
const hsl = document.getElementById("hsl");

for (let i = 0; i < 360; i++) {
  const div1 = document.createElement("div");
  div1.style.backgroundColor = `hsl(${i}, 100%, 50%)`;
  hsl.appendChild(div1);

  const div2 = document.createElement("div");
  div2.style.backgroundColor = "red";
  div2.style.filter = `hue-rotate(${i}deg)`;
  hueRotate.appendChild(div2);
}

Spezifikationen

Specification
Filter Effects Module Level 1
# funcdef-filter-hue-rotate

Browser-Kompatibilität

Siehe auch