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.

hue-rotate()CSS関数で、要素およびその中身のコンテンツの色相環を回転させます。結果は <filter-function> です。

メモ: hue-rotate() は RGB 色に対する行列演算として定義されています。これは実際には色を HSL モデルに変換するものではなく、非線形操作です。そのため、特に彩度の高い色の場合、元の色の彩度や明度が維持されない場合があります。

試してみましょう

構文

hue-rotate() 関数は、適用された要素に色相回転を適用します。

css
hue-rotate(angle)

引数

angle

入力サンプルの色相の相対的な変化量を、 <angle> で指定します。 0deg は入力を変更しないままにします。正の回転角は色相の値を増加させるのに対し、負の回転角は色相の値を減少させます。補間の初期値は 0 です。最小値または最大値はありません。 360deg を超える値の効果は、 hue-rotate(Ndeg) とした場合、 N を 360 で割った余りと等価です。

CSS のデータ型 <angle> は、度、グラディアン、ラジアン、回転で表された角度の値を表します。次のものは同等です。

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

形式文法

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

backdrop-filter プロパティで

この例では、 hue-rotate() フィルターを CSS プロパティの backdrop-filter を使用して段落に適用し、<p> の背後の領域の色を変化させています。

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

filter プロパティで

この例では、 hue-rotate() フィルターを CSS プロパティの filter を使用して適用し、色のずらしをコンテンツ、境界線、背景画像を含む要素全体に追加します。

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;
}

url() と SVG の hue-rotate フィルターで

SVG の <filter> 要素は、カスタムフィルター効果を定義するために使用でき、 id で参照することができます。 <filter><feColorMatrix> プリミティブの hueRotate 型は、同様の効果を提供します。次のものが指定されたとします。

svg
<filter id="filterID">
  <feColorMatrix type="hueRotate" values="90" />
</filter>

これらの値は同じ結果をもたらします。

css
filter: hue-rotate(90deg); /* 90deg 回転 */
filter: url(#filterID); /* 埋め込み SVG で */
filter: url(folder/fileName.svg#filterID); /* 外部 SVG フィルター定義 */

この例では、 3 つの画像を表示させています。 hue-rotate() フィルター関数を適用した画像、同等の url() フィルターを適用した画像、比較用の元画像です。

hue-rotate() は彩度や明度を維持しない

下記の図は、赤から始める 2 つの色のグラデーションを比較したものです。最初のグラデーションは hue-rotate() を使用して生成し、 2 つ目は実際の HSL 色値を使用しています。 hue-rotate() グラデーションが中間部分で明度と彩度の明らかな違いを示す様子に注目してください。

html
<div>
  <p><code>hue-rotate()</code> を使用</p>
  <div id="hue-rotate"></div>
</div>
<div>
  <p><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);
}

仕様書

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

ブラウザーの互換性

BCD tables only load in the browser

関連情報