filter:none; 「「2/*初期値*/」」
filter:blur(「「5n」」px);
filter:drop-shadow(「「5n」」px 「「5n」」px 「「5n」」px 「「5color」」);
filter:opacity(「「50~1」」);
filter:invert(「「50~1」」);
filter:sepia(「「50〜1」」);
filter:grayscale(「「50〜1」」);
filter:hue-rotate(「「5n」」deg);
filter:brightness(「「50〜1〜」」);
filter:saturate(「「50〜1〜」」);
filter:contrast(「「50〜1〜」」);
SVGコーディングブック
Apple Booksでみる
こんにちは、「ふ」です。
今回はCSSのフィルターについて紹介します。
filterプロパティを利用することで、ぼかしや影、色の補正など、CSSだけで画像編集ソフトのような効果を与えることができます。
<img class = "sample" src = "sample.png">
.sample {
filter:「「2none」」;
}
filterプロパティの初期値は「none(何もしない)」となっています。
以下に用意されている関数を値に指定すると、filerを掛けることができます。
当記事ではそれぞれの変化の仕組みについても解説しながら、各フィルターの使い方について紹介していきます。仕組みを理解しておくことで、アレンジの幅も広がることでしょう。
blur関数は、要素にぼかし効果を与えます。
.element {
filter:blur(「「2広がり範囲」」);
}
( )の値部分はぼかしの広がり範囲を指定します。
.sample {
filter:blur(2px);
}
2pxのぼかしが掛かりました。
drop-shadow関数は、不透明な部分に対して影を落とします。
影にぼかしを付けたり、影自体の色を指定したりもできます。
.element {
filter:drop-shadow(「「2x方向 y方向 ぼかし 色」」);
}
( )の中の値ですが、1、2番目はxy方向のオフセット(元の位置からの距離)を指定します。
3つ目は影をぼかしを付けたいとき、その範囲を指定します。
また4つ目の値では影の色を指定することができます。
<img class = "no_back" src = "no_back.png">
先ほど使ったサンプルには透過部分が存在しないので、背景なしの画像を用意しました。
.no_back {
filter:drop-shadow(2px 2px 5px blue);
}
x/yのオフセットが2px、ぼかし5px、blueの影が付きました。
.element {
filter:drop-shadow(「「22px 2px」」 #00a0e9);
}
4つの値のうちオフセットとぼかし範囲については、大きさを指定する「サイズ値」です。
サイズ値を2つだけ記述しているときは、x/y方向のオフセットとして扱われます。ぼかしは発生しません。
.element {
filter:drop-shadow(2px 2px 「「25px」」 #00a0e9);
}
サイズ値を3つ指定すると、3つ目のものがぼかし範囲に適用されます。
.element {
filter:drop-shadow(2px 「「20px」」 5px #00a0e9);
}
ちなみにサイズ値1つではdrop-shadowは作用しません。どちらかの方向にオフセットを取りたくない、などのバヤイは「0px」と明記するようにしましょう。
.element {
filter:drop-shadow(2px 2px 5px);
}
ちなみに。4つ目の色指定が明記されていないバヤイは、影の色はデフォルトの#000(完全な黒)で描画されます。
.element_a {
filter:drop-shadow(「「22px 2vw 3px」」 #00a0e9);
}
.element_b {
filter:blur(「「25px」」);
}
blurのぼかし範囲や、drop-shadowの1〜3ばん目の値は「サイズ値」です。
サイズ値にはpxやvwなどの普段CSSで使っているものがそのまま使えますが、%だけは使う事ができません。CSSのフィルターはピクセル情報にもとづいて処理がなされる関係で、直接自身のサイズを参照できない仕様になっているのです。
以降で紹介している「サイズ値ではない%表記」については問題ありません。
drop-shadowの4ばん目の値である影の色に関しては、制限なく通常の色指定値を使用することができます。
opacity関数は、不透明度を変化させ、要素を透過させることができます。
.element {
filter:opacity(「「20〜1」」);
}
値は0〜1で指定します。0にすると完全な透明に、1にすると完全な不透明(変化なし)となります。
単位は0〜1のほかに、0%〜100%で指定することもできます。
.sample {
filter:opacity(0.5);
}
画像が半透明になりました。
invertは、色調を反転させるフィルターです。
色調反転とは?
聞きなれない言葉ですが、つまりはR/G/B値それぞれが中心の128に対して反転する、ということです。
⬆︎で、1ばん左が元のソース、1ばん右が完全に逆転したものです。
RGB値の表示をみてください。逆転前/後ではそれぞれが128に対して反転しています。
.element {
filter:invert(「「20〜1」」);
}
値は0〜1で指定し、0では元の状態のまま。1にすると完全に反転します。
単位は0〜1のほかに、0%〜100%で指定することもできます。
.sample {
filter:invert(80%);
}
さわやかな晴れ模様が一転して、何か恐ろしい出来事の前触れのようになりました💧
RGB反転の中心は「128」でしたね。
なので「0.5」を指定すると..
.sample {
filter:invert(0.5);
}
要素に含まれるすべての色がRGB(128,128,128)となり、全体がグレーになってしまいます。
sepia関数は、モノクロ写真の経年劣化をシミュレーション。レトロな雰囲気を醸し出すことができます。
.element {
filter:sepia(「「20〜1」」);
}
赤などの暗めの色はどんどん茶色掛かっていき、黄色など明るめの色は白に近づいていきます。
値は0〜1で指定し、0では元の状態のまま。1にすると完全なセピア調になります。
単位は0〜1のほかに、0%〜100%で指定することもできます。
.sample {
filter:sepia(0.9);
}
年月が経ち劣化した、昔の白黒写真のようになりました。
gray-scale関数は、要素をモノクロ化させる効果があります。
.element {
filter:grayscale(「「20〜1」」);
}
値は0〜1もしくは0%〜100%で指定します。0のときがデフォルト状態で、1になると完全なモノクロとなります。
.sample {
filter:grayscale(0.5);
}
grayscaleを「0.5」としました。元画像にくらべ、色味が少なくなっています。
モノクロ色は、RGB値が等しくなっている状態です。grayscale関数はRGB値を徐々に同じ値に寄せていく、という仕事をしているのです。
hue-rotate関数は、色相を回転させた結果を返します。
「色相の回転?」
色相(hue)とは「赤」や「青」など、濃淡や明るさを抜きにした「色合い」のみを成分として取り上げたものです。
色相はしばしば色相環という円形に並べられたもので表現され、0°〜360°の角度で特定される方式が取られます。「赤なら0°、紫なら270°」といった具合です。
hue-rotateは現在位置している色相環上の位置から、角度指定によって回転させたものを結果として返します。
.element {
filter:hue-rotate(「「2〇〇deg|〇〇turn|〇〇rad」」;)
}
角度表記についてですが、慣れ親しんでいる度数法(30度回転、とかの「度」)で記述するほか、radian(弧度法)やturn(1turn = 360°)などの単位も使用できます。
色相環の法則にのっとり、1回転で元の色に戻ります。
.sample {
filter:hue-rotate(180deg);
}
回転角度を180°とし、反転させてみました。
全く違った印象になりましたね。また先に紹介したinvert関数による「RGBの反転」とも違った結果になります。
brightness関数は、色の明るさを調整します。
CSSの色指定ではRGB色空間を使ったものがおなじみですが、ここではHSL色空間で考えてみましょう。
HSL色空間は、hue(色彩)/saturate(彩度)/luminance(輝度)の3要素を使って色を特定する方法です。
H - hue(色彩)については、hue-rotateのところで紹介しましたね。
S - saturate(彩度)は、色の鮮やかさのパラメータです。
L - luminance(輝度)は、見た目の明るさを表す指標で、0%〜100%の範囲で表されます。他2つのパラメータの値にかかわらず、「0%」で完全な黒、「100%」で完全な白となります。
brightness関数は、HSLのluminance(輝度)を操作して明るさを変化させます。
〽️ 配色パターンを秒作。
HSL色空間については⬆︎の記事で詳しく紹介しています。
極めたい方は参考にしてください。
.element {
filter:brightness(「「2n|n%」」);
}
値は単位なしの数値または%指定で記述します。
1(または100%)の状態が元の色、0(または0%)になると輝度が0〜完全な黒となります。
値を大きくしていくと、明るい色(そもそも輝度が高かった色)は早々に輝度maxに到達し、完全な白となります。
.sample {
filter:brightness(1.2);
}
brightnessを1.2にしてみました。
かなり明るくなりましたね。
.sample {
filter:brightness(1.5);
}
1.5くらいにすると、明るさとともに色味も変わってきています。
画像要素を補正するときは、値をほんのちょっとだけ大小させるのが良いのかもしれません。
saturate関数は、色の鮮やかさを変化させます。
先ほど紹介したHSL色空間で言えば、saturate(彩度)を変化させる働きをします。
「鮮やかさ」というとピンとこないかもしれません。
⬆︎は、彩度100%と28%の比較。100%のほうが明らかに「濃い」ですよね。
28%のほうは「薄い」。さらに彩度を下げていくと、最後には完全なモノクロ色になってしまいます。
「色の鮮やかさ ≒ 色の濃さ」という解釈で問題ありません。
.element {
filter:saturate(「「2n|n%」」);
}
値は単位なしの数値または%指定で記述します。
1(または100%)の状態が元の色、0(または0%)になると彩度が0〜完全なモノクロとなります。
値はどんどん大きくしていくことができますが、彩度maxになった時点でそれ以上は変化しなくなります。
.sample {
filter:saturate(5);
}
saturateを「5」と大きく掛けてみました。全体がかなり色濃くなっています。
contrast関数は、明暗差を調節します。
.element {
filter:contrast(「「2n|n%」」);
}
暗めの色(上)と明るめの色(下)の変化を比較したもの⬆︎。
「1」が元の状態です。値を下げていくと、2つの色の明暗差は小さくなっていき、最終的には同じグレーになります。
面白いのが、値を「1」よりも大きくしていったとき。
上の暗い色はより暗くなっていき、黒に近くなっていきます。下の明るい色はいっそう明るくなっていき、白に近づいていきます。
.sample {
filter:contrast(2);
}
contrast「2」にしてみました。
brightnessやsaturateに比べ、色味の変化を抑えつつ、くっきりさせることができています。
最後までお読みくださり、ありがとうございました。
今回はCSSのfilterについて紹介してきました。10種類とたくさんあって、全部は覚えきれないですよね。
もちろん、すべてを覚える必要はありません。web制作中に「あれってどうやるんだっけ?」なときに再度、このページを訪れてみてください。すぐに答えにたどり着けます。
ではまた〜 🎵
ベクターグラフィック、web、ガジェットなど。役立つ情報や観ていてたのしいページを書いていきたいと思います。