filter
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.
filter
は CSS のプロパティで、ぼかしや色変化などのグラフィック効果を要素に適用します。フィルターは画像、背景、境界の描画を調整するためによく使われます。
いくつかの関数、例えば blur()
や contrast()
などが利用でき、あらかじめ定義された効果を実現するのに役立てることができます。
試してみましょう
構文
/* <filter-function> 値 */
filter: blur(5px);
filter: brightness(0.4);
filter: contrast(200%);
filter: drop-shadow(16px 16px 20px blue);
filter: grayscale(50%);
filter: hue-rotate(90deg);
filter: invert(75%);
filter: opacity(25%);
filter: saturate(30%);
filter: sepia(60%);
/* URL */
filter: url("filters.svg#filter-id");
/* 複数のフィルター */
filter: contrast(175%) brightness(3%);
filter: drop-shadow(3px 3px red) sepia(100%) drop-shadow(-3px -3px blue);
/* フィルターを使用しない */
filter: none;
/* グローバル値 */
filter: inherit;
filter: initial;
filter: revert;
filter: revert-layer;
filter: unset;
次のように関数と共に使用してください。
filter: <filter-function> [<filter-function>]* | none;
url()
を使用して SVG の filter 要素を参照することができます。 SVG の <filter>
要素を参照するには、次のような構文を使用してください。
filter: url(file.svg#filter-element-id);
関数
filter
プロパティは none
または以下にある関数を一つ以上使って指定します。いずれかの関数の引数が妥当でない場合、関数は none
を返します。特に示す場合を除いて、パーセント記号付きの値(34%
など)を取る関数は、 10 進数の値(0.34
など)も受け付けます。
filter
プロパティ値に複数の関数が指定されている場合、フィルターは順番通りに適用されます。
blur()
-
入力画像にガウスぼかしを適用します。
cssfilter: blur(5px);
brightness()
-
関数は、入力画像に線形乗数を適用して明るさを明るくしたり暗くしたりします。
0%
の値を設定すると、完全な黒の画像が作成されます。100%
の値を指定すると、入力は変更されません。100%
を超える値が許されており、より明るい結果が得られます。cssfilter: brightness(2);
contrast()
-
入力画像のコントラストを調整します。
0%
の値を指定するとグレーの画像が作成されます。100%
の値を指定すると、入力画像は変更されません。100%
を超える値を指定すると、コントラストを増加させます。cssfilter: contrast(200%);
drop-shadow()
-
引数
<shadow>
を画像の輪郭に沿ってドロップシャドウとして適用します。影の構文は<box-shadow>
(CSS 背景と境界モジュールで定義されています)と似ていますが、inset
キーワードとspread
引数は使用できません。すべてのfilter
プロパティ値と同様に、drop-shadow()
以降のフィルターが影に適用されます。cssfilter: drop-shadow(16px 16px 10px black);
grayscale()
-
画像をグレースケールに変換します。値
100%
は完全にグレースケールです。初期値の0%
は入力を変更しません。0%
と100%
の間の値は、効果に対する線形乗数です。cssfilter: grayscale(100%);
hue-rotate()
-
色相の角度を回転させます。
<angle>
の値は、入力サンプルが調整される色相環の度数を定義します。0deg
の値では入力は変更されません。cssfilter: hue-rotate(90deg);
invert()
-
入力画像のサンプルを反転します。
100%
の値を指定すると、完全に反転されます。0%
では入力画像が変化しないままになります。0%
と100%
の間は効果の線形乗数になります。cssfilter: invert(100%);
opacity()
-
透過率を適用します。
0%
は画像を完全に透明にし、100%
は画像をそのままにします。cssfilter: opacity(50%);
saturate()
-
画像の彩度を設定します。
0%
は完全に彩度をなくし、100%
はそのまま、100%
以上の値は彩度を上げます。cssfilter: saturate(200%);
sepia()
-
画像をセピア調にします。値を
100%
にすると画像は完全にセピアになり、0%
にすると何も変わりません。cssfilter: sepia(100%);
関数の組み合わせ
関数をいくつでも組み合わせてレンダリングを操作できます。フィルターは宣言順に適用されます。次の例は画像のコントラストと明るさを強調します。
filter: contrast(175%) brightness(103%);
補間
公式定義
初期値 | none |
---|---|
適用対象 | すべての要素。 SVG の場合は <defs> 要素やすべてのグラフィック要素を除いたコンテナー要素に適用される |
継承 | なし |
計算値 | 指定通り |
アニメーションの種類 | フィルター関数のリスト |
形式文法
filter =
none |
<filter-value-list>
<filter-value-list> =
[ <filter-function> | <url> ]+
<filter-function> =
<blur()> |
<brightness()> |
<contrast()> |
<drop-shadow()> |
<grayscale()> |
<hue-rotate()> |
<invert()> |
<opacity()> |
<sepia()> |
<saturate()>
<url> =
<url()> |
<src()>
<blur()> =
blur( <length>? )
<brightness()> =
brightness( [ <number> | <percentage> ]? )
<contrast()> =
contrast( [ <number> | <percentage> ]? )
<drop-shadow()> =
drop-shadow( [ <color>? && <length>{2,3} ] )
<grayscale()> =
grayscale( [ <number> | <percentage> ]? )
<hue-rotate()> =
hue-rotate( [ <angle> | <zero> ]? )
<invert()> =
invert( [ <number> | <percentage> ]? )
<opacity()> =
opacity( [ <number> | <percentage> ]? )
<sepia()> =
sepia( [ <number> | <percentage> ]? )
<saturate()> =
saturate( [ <number> | <percentage> ]? )
<url()> =
url( <string> <url-modifier>* ) |
<url-token>
<src()> =
src( <string> <url-modifier>* )
例
フィルター関数の適用
filter
プロパティは 2 つ目の画像に適用され、画像とその境界の両方を灰色にして不鮮明にします。
img {
border: 5px solid yellow;
}
/* 2 番目の画像を 40% グレー化、 5px でぼかす */
img:nth-of-type(2) {
filter: grayscale(0.4) blur(5px);
}
<img src="pencil.jpg" alt="元画像はシャープ" />
<img src="pencil.jpg" alt="画像と境界は不鮮明でミュートされています。" />
繰り返しフィルター機能
フィルター機能は現れる順に適用されます。同じフィルター関数を繰り返すことができます。
#MDN-logo {
border: 1px solid blue;
filter: drop-shadow(5px 5px 0 red) hue-rotate(180deg)
drop-shadow(5px 5px 0 red);
}
フィルターは順番に適用されます。最初のドロップシャドウの色相は hue-rotate()
と関数によって変更されますが、 2 つ目のドロップシャドウの色相は変更されません。
仕様書
Specification |
---|
Filter Effects Module Level 1 # FilterProperty |
ブラウザーの互換性
BCD tables only load in the browser
関連情報
- CSS
backdrop-filter
プロパティ - CSS 合成と混合モジュール(CSS の
background-blend-mode
およびmix-blend-mode
プロパティを含む) - CSS の
mask
プロパティ - SVG (SVG の
<filter>
要素やfilter
属性を含む) - HTML コンテンツへの SVG 効果の適用