CSSのfilter
フィルター プロパティを使うと、画像の彩度、明度、コントラスなどを変更したり、ぼかしを加えたりすることが可能です。このページではfilter
の使い方をサンプルCSS付きで解説します。
CSSのfilterの使い方 書き方 CSSのfilter
は次の図のように書きます。
sepia
をcontrast
に変えれば「彩度」を調整するフィルターになります。70%
を100%
に変えれば、よりフィルターの効きが強くなります。
filterによる加工例
フィルター前の画像
実際に、この画像にセピア・フィルターをかけてみたいと思います。HTMLでは次のようにexample
というクラスを指定しておきます。
< img src = " ◯◯.jpg" class = " example" loading = " lazy" >
✍️すべての画像(<img>
)にフィルターが適用されてしまうのは不便だと思うので、example
というクラスを持つ画像のみフィルターをかけることにします。
<> HTML
# CSS
< div class = " container" >
< div>
フィルター前
< img src = " https://res.cloudinary.com/code-kitchen/image/upload/c_lfill,w_1100/q_auto/v1582515398/posts/wpztyezydkbszh6n9ypz.jpg" loading = " lazy" >
</ div>
< div>
フィルター後
< img src = " https://res.cloudinary.com/code-kitchen/image/upload/c_lfill,w_1100/q_auto/v1582515398/posts/wpztyezydkbszh6n9ypz.jpg" class = " example" loading = " lazy" >
</ div>
</ div>
< style> .container {
display : table;
table-layout : fixed;
margin : 0 -3px;
}
.container div {
display : table-cell;
border : solid 3px #FFF;
font-size : 12px;
text-align : center;
color : gray;
}
</ style>
.example {
filter : sepia ( 70%) ;
}
すべて表示 👆写真がセピア調になったのが分かると思います。filter
を使えば、このように画像を簡単に加工できるのです。
CSSフィルターの種類 ここからはフィルターの種類をサンプル付きで紹介します。
brightness(30%明度) <> HTML
# CSS
< div class = " container" >
< div>
フィルター前
< img src = " https://res.cloudinary.com/code-kitchen/image/upload/c_lfill,w_1100/q_auto/v1582515398/posts/wpztyezydkbszh6n9ypz.jpg" loading = " lazy" >
</ div>
< div>
フィルター後
< img src = " https://res.cloudinary.com/code-kitchen/image/upload/c_lfill,w_1100/q_auto/v1582515398/posts/wpztyezydkbszh6n9ypz.jpg" class = " example" loading = " lazy" >
</ div>
</ div>
< style> .container {
display : table;
table-layout : fixed;
margin : 0 -3px;
}
.container div {
display : table-cell;
border : solid 3px #FFF;
font-size : 12px;
text-align : center;
color : gray;
}
</ style>
.example {
filter : brightness ( 200%) ;
}
すべて表示 brightness
ブライトネス では、明るさを調整します。100%が元の明るさ を表します。brightness(200%)
とすると、元の2倍の明るさになります。
逆に暗くしたいときにはbrightness(30%)
のように100%以下の数値にします。
saturate(彩度) <> HTML
# CSS
< div class = " container" >
< div>
フィルター前
< img src = " https://res.cloudinary.com/code-kitchen/image/upload/c_lfill,w_1100/q_auto/v1582515398/posts/wpztyezydkbszh6n9ypz.jpg" loading = " lazy" >
</ div>
< div>
フィルター後
< img src = " https://res.cloudinary.com/code-kitchen/image/upload/c_lfill,w_1100/q_auto/v1582515398/posts/wpztyezydkbszh6n9ypz.jpg" class = " example" loading = " lazy" >
</ div>
</ div>
< style> .container {
display : table;
table-layout : fixed;
margin : 0 -3px;
}
.container div {
display : table-cell;
border : solid 3px #FFF;
font-size : 12px;
text-align : center;
color : gray;
}
</ style>
.example {
filter : saturate ( 200%) ;
}
すべて表示 saturate
サーチュレイト では、彩度を調整します。100%が元の彩度 を表します。より鮮やかにしたければsaturate(200%)
のように100%以上の数値にします。
彩度を下げるときはsaturate(30%)
のように100%以下の数値にします。0%で白黒画像になります。
contrast(コントラスト) <> HTML
# CSS
< div class = " container" >
< div>
フィルター前
< img src = " https://res.cloudinary.com/code-kitchen/image/upload/c_lfill,w_1100/q_auto/v1582515398/posts/wpztyezydkbszh6n9ypz.jpg" loading = " lazy" >
</ div>
< div>
フィルター後
< img src = " https://res.cloudinary.com/code-kitchen/image/upload/c_lfill,w_1100/q_auto/v1582515398/posts/wpztyezydkbszh6n9ypz.jpg" class = " example" loading = " lazy" >
</ div>
</ div>
< style> .container {
display : table;
table-layout : fixed;
margin : 0 -3px;
}
.container div {
display : table-cell;
border : solid 3px #FFF;
font-size : 12px;
text-align : center;
color : gray;
}
</ style>
.example {
filter : contrast ( 200%) ;
}
すべて表示 contrast
ではコントラストを調整します。100%が元のコントラスト を表します。コントラストを上げるにはcontrast(200%)
のように100%以上の数値にします。
コントラストを下げるときはcontrast(30%)
のように100%以下の数値にします。
blur(ぼかし) <> HTML
# CSS
< div class = " container" >
< div>
フィルター前
< img src = " https://res.cloudinary.com/code-kitchen/image/upload/c_lfill,w_1100/q_auto/v1582515398/posts/wpztyezydkbszh6n9ypz.jpg" loading = " lazy" >
</ div>
< div>
フィルター後
< img src = " https://res.cloudinary.com/code-kitchen/image/upload/c_lfill,w_1100/q_auto/v1582515398/posts/wpztyezydkbszh6n9ypz.jpg" class = " example" loading = " lazy" >
</ div>
</ div>
< style> .container {
display : table;
table-layout : fixed;
margin : 0 -3px;
}
.container div {
display : table-cell;
border : solid 3px #FFF;
font-size : 12px;
text-align : center;
color : gray;
}
</ style>
.example {
filter : blur ( 2px) ;
}
すべて表示 blur
ブラー を使うと、画像をぼかすことができます。ポイントは、%ではなくpxで ぼかしの強さを指定する点です。実際にぼかしを適用しながら、少しずつpx値を調整するのが良いでしょう。
grayscale(グレースケール) <> HTML
# CSS
< div class = " container" >
< div>
フィルター前
< img src = " https://res.cloudinary.com/code-kitchen/image/upload/c_lfill,w_1100/q_auto/v1582515398/posts/wpztyezydkbszh6n9ypz.jpg" loading = " lazy" >
</ div>
< div>
フィルター後
< img src = " https://res.cloudinary.com/code-kitchen/image/upload/c_lfill,w_1100/q_auto/v1582515398/posts/wpztyezydkbszh6n9ypz.jpg" class = " example" loading = " lazy" >
</ div>
</ div>
< style> .container {
display : table;
table-layout : fixed;
margin : 0 -3px;
}
.container div {
display : table-cell;
border : solid 3px #FFF;
font-size : 12px;
text-align : center;
color : gray;
}
</ style>
.example {
filter : grayscale ( 70%) ;
}
すべて表示 grayscale
グレースケール は画像をモノクロにしたいときに使います。0%が元の状態 で、100%で完全にモノクロ になります。
sepia(セピア) <> HTML
# CSS
< div class = " container" >
< div>
フィルター前
< img src = " https://res.cloudinary.com/code-kitchen/image/upload/c_lfill,w_1100/q_auto/v1582515398/posts/wpztyezydkbszh6n9ypz.jpg" loading = " lazy" >
</ div>
< div>
フィルター後
< img src = " https://res.cloudinary.com/code-kitchen/image/upload/c_lfill,w_1100/q_auto/v1582515398/posts/wpztyezydkbszh6n9ypz.jpg" class = " example" loading = " lazy" >
</ div>
</ div>
< style> .container {
display : table;
table-layout : fixed;
margin : 0 -3px;
}
.container div {
display : table-cell;
border : solid 3px #FFF;
font-size : 12px;
text-align : center;
color : gray;
}
</ style>
.example {
filter : sepia ( 90%) ;
}
すべて表示 sepia
は画像をセピアにするためのものです。0%が元の状態 で、100%で完全にセピア になります。
hue-rotate(色相) <> HTML
# CSS
< div class = " container" >
< div>
フィルター前
< img src = " https://res.cloudinary.com/code-kitchen/image/upload/c_lfill,w_1100/q_auto/v1582515398/posts/wpztyezydkbszh6n9ypz.jpg" loading = " lazy" >
</ div>
< div>
フィルター後
< img src = " https://res.cloudinary.com/code-kitchen/image/upload/c_lfill,w_1100/q_auto/v1582515398/posts/wpztyezydkbszh6n9ypz.jpg" class = " example" loading = " lazy" >
</ div>
</ div>
< style> .container {
display : table;
table-layout : fixed;
margin : 0 -3px;
}
.container div {
display : table-cell;
border : solid 3px #FFF;
font-size : 12px;
text-align : center;
color : gray;
}
</ style>
.example {
filter : hue-rotate ( 30deg) ;
}
すべて表示 あまり使う機会はないような気もしますが、hue-rotate
を使うと色相を変更できます。ポイントはhue-rotate(◯◯deg)
のように数値をdeg で指定することです。
180degで色相が反転します。360degにすると(一周回って)元の色相になります。
invert(階調) <> HTML
# CSS
< div class = " container" >
< div>
フィルター前
< img src = " https://res.cloudinary.com/code-kitchen/image/upload/c_lfill,w_1100/q_auto/v1582515398/posts/wpztyezydkbszh6n9ypz.jpg" loading = " lazy" >
</ div>
< div>
フィルター後
< img src = " https://res.cloudinary.com/code-kitchen/image/upload/c_lfill,w_1100/q_auto/v1582515398/posts/wpztyezydkbszh6n9ypz.jpg" class = " example" loading = " lazy" >
</ div>
</ div>
< style> .container {
display : table;
table-layout : fixed;
margin : 0 -3px;
}
.container div {
display : table-cell;
border : solid 3px #FFF;
font-size : 12px;
text-align : center;
color : gray;
}
</ style>
.example {
filter : invert ( 100%) ;
}
すべて表示 invert
インヴァート は階調を調整するときに使います。0%だと元の状態のまま となり、100%だと階調が反転 します。
opacity(画像の透明度) <> HTML
# CSS
< div class = " container" >
< div>
フィルター前
< img src = " https://res.cloudinary.com/code-kitchen/image/upload/c_lfill,w_1100/q_auto/v1582515398/posts/wpztyezydkbszh6n9ypz.jpg" loading = " lazy" >
</ div>
< div>
フィルター後
< img src = " https://res.cloudinary.com/code-kitchen/image/upload/c_lfill,w_1100/q_auto/v1582515398/posts/wpztyezydkbszh6n9ypz.jpg" class = " example" loading = " lazy" >
</ div>
</ div>
< style> .container {
display : table;
table-layout : fixed;
margin : 0 -3px;
}
.container div {
display : table-cell;
border : solid 3px #FFF;
font-size : 12px;
text-align : center;
color : gray;
}
</ style>
.example {
filter : opacity ( 40%) ;
}
すべて表示 opacity
オパシティ では、画像の透明度を調整します。%が小さいほど透明に近づきます。0%にすると完全に透明に なり、100%にすると元の状態 になります。
✍️ filter: opacityを使うメリット CSSにopacity
という同じく要素を透明にするプロパティがあります。どちらを使っても画像は透明になりますが、filter: opacity()
を使った方が一部のブラウザでパフォーマンス的に優れていると言われています(参考リンク )。
drop-shadow(ドロップシャドウ) <> HTML
# CSS
< div class = " container" >
< div>
フィルター前
< img src = " https://res.cloudinary.com/code-kitchen/image/upload/c_lfill,w_1100/q_auto/v1582515398/posts/wpztyezydkbszh6n9ypz.jpg" loading = " lazy" >
</ div>
< div>
フィルター後
< img src = " https://res.cloudinary.com/code-kitchen/image/upload/c_lfill,w_1100/q_auto/v1582515398/posts/wpztyezydkbszh6n9ypz.jpg" class = " example" loading = " lazy" >
</ div>
</ div>
< style> .container {
display : table;
table-layout : fixed;
margin : 0 -3px;
}
.container div {
display : table-cell;
border : solid 3px #FFF;
font-size : 12px;
text-align : center;
color : gray;
}
</ style>
.example {
filter : drop-shadow ( 0 3px 5px rgba ( 0, 0, 0, 0.4) ) ;
}
すべて表示 drop-shadow
ドロップシャドウ を使うと、画像に影をつけることができます。影の指定の仕方は、CSSのbox-shadow
プロパティと基本的に同じでdrop-shadow(x方向 y方向 ぼかし半径 色)
というようになります。
drop-shadowとbox-shadowの違い filter: drop-shadow()
と、CSSのbox-shadow
プロパティの違いは何なのでしょうか?大きな違いは、SVGやPNG画像を使ったときにdrop-shadowなら画像の中のオブジェクトに影をつけてくれる 点です。
<> HTML
# CSS
< div class = " container" >
< div>
box-shadow
< img src = " https://cdnjs.cloudflare.com/ajax/libs/twemoji/14.0.2/svg/1f367.svg" class = " box-shadow" loading = " lazy" >
</ div>
< div>
filter: drop-shadow
< img src = " https://cdnjs.cloudflare.com/ajax/libs/twemoji/14.0.2/svg/1f367.svg" class = " drop-shadow" loading = " lazy" >
</ div>
</ div>
< style> .container {
display : table;
table-layout : fixed;
margin : 0 -3px;
}
.container div {
display : table-cell;
border : solid 3px #FFF;
font-size : 12px;
text-align : center;
color : gray;
}
.container img {
width : 80%;
}
</ style>
.box-shadow {
box-shadow : 0 3px 5px silver;
}
.drop-shadow {
filter : drop-shadow ( 0 3px 5px silver) ;
}
すべて表示 👆box-shadow
では要素のまわりに影がつくのに対して、filter: drop-shadow()
では画像の中に含まれる物体自体に影がついています。
また、一部のブラウザではfilter: drop-shadow()
の方がパフォーマンスが優れています。
filterを使うときのテクニック 同時に複数のフィルターをかける filter : フィルター1 フィルター2 フィルター3;
複数のフィルターをかけたい場合は、半角スペース区切りで並べて指定 すればOKです。
<> HTML
# CSS
< img src = " https://res.cloudinary.com/code-kitchen/image/upload/c_lfill,w_1100/q_auto/v1582515398/posts/wpztyezydkbszh6n9ypz.jpg" class = " example" loading = " lazy" width = " 200" style =" display : block; margin : 0 auto; " >
.example {
filter : brightness ( 70%) blur ( 1px) ;
}
すべて表示 👆このようにbrightness()
とblur()
のフィルターを同時にかけることもできます。
ホバー時にフィルターをかける <> HTML
# CSS
< img src = " https://res.cloudinary.com/code-kitchen/image/upload/c_lfill,w_1100/q_auto/v1582515398/posts/wpztyezydkbszh6n9ypz.jpg" class = " example" loading = " lazy" width = " 200" style =" display : block; margin : 0 auto; " >
.example {
transition : 0.4s ease;
}
.example:hover {
filter : brightness ( 60%) blur ( 1px) ;
}
すべて表示 👆ホバー時(画像の上にカーソルをのせたとき)にのみフィルターをかけたい場合はimg:hover { filter: ◯◯ }
のように指定すればOKです。
✍️フィルターをかける要素にtransition
プロパティを指定しておくと、フィルターのかかり方が滑らかになります。
フィルターをかけない(filter: none) <> HTML
# CSS
< img src = " https://res.cloudinary.com/code-kitchen/image/upload/c_lfill,w_1100/q_auto/v1582515398/posts/wpztyezydkbszh6n9ypz.jpg" class = " example" loading = " lazy" width = " 200" style =" display : block; margin : 0 auto; " >
.example {
transition : 0.4s ease;
filter : brightness ( 60%) blur ( 1px) ;
}
.example:hover {
filter : none;
}
すべて表示 👆逆に、あらかじめ画像にフィルターをかけておき、ホバー時にオフにする場合はfilter: none
を指定します。
動画にフィルターをかける CSSのfilter
は動画(<video>
)やインラインフレーム(<iframe>
)にも使用できます。
<> HTML
# CSS
< video
controls
src = " https://res.cloudinary.com/code-kitchen/video/upload/v1555082747/movie.mp4"
style =" width : 100%"
> </ video>
video {
filter : grayscale ( 100%) ;
transition : 0.3s;
}
video:hover {
filter : none;
}
すべて表示 👆こちらは動画をモノクロにしておき、ホバー時にフィルターを解除する例です。
カードでfilterを使うCSSサンプル 最後にWebページでよく見るようなエフェクトのあるカードのサンプルを紹介します。
<> HTML
# CSS
< a href = " #" class = " card" >
< img src = " https://res.cloudinary.com/code-kitchen/image/upload/v1582515398/posts/iqrcbfz5cxbinq8ik14o.jpg" loading = " lazy" class = " card__img" >
< div class = " card__title" > Are You Ready?</ div>
</ a>
.card {
display : block;
position : relative;
overflow : hidden;
border-radius : 5px;
}
.card__title {
position : absolute;
bottom : 0;
left : 0;
width : 100%;
padding : 1em;
text-decoration : none;
color : #FFF;
font-weight : bold;
font-size : 1.6em;
}
.card__img {
display : block;
width : 100%;
filter : brightness ( 70%) ;
transition : 0.3s;
}
.card:hover .card__img {
filter : brightness ( 150%) ;
transform : scale ( 1.3) ;
}
すべて表示 👆カードをホバーすると、画像が拡大しながら明るくなることが分かります。このようにfilter
を使うと画像ファイルを編集することなく、フィルター加工できるようになります。
filter: sepia(70%)
とすれば「画像を70%の強さでセピアに」という意味になります。