CSSフィルターにはどんな魔法の用途があるか

CSSフィルターにはどんな魔法の用途があるか

背景

基本概念

CSS filterプロパティは、ぼかしや色の変化などのグラフィック効果を要素に適用してフィルターを形成します。フィルターは、画像、背景、境界線のレンダリングを調整するためによく使用されます。その値は、 filter関数<filter-function>またはurlを使用して追加された SVG フィルターになります。

フィルター: <フィルター関数> [<フィルター関数>]* | なし
フィルター: url(file.svg#filter-element-id)

<filter-function>filterおよびbackdrop-filter属性と共に使用できます。データ型は、次のいずれかのフィルター関数によって指定されます。各関数にはパラメータが必要です。パラメータが無効な場合、フィルタは有効になりません。フィルター関数の意味の説明は次のとおりです。

  • blur() : 画像をぼかす
  • brightness() : 画像を明るくしたり暗くしたりします
  • contrast() : 画像のコントラストを増減する
  • drop-shadow() : 画像の後ろにドロップシャドウを適用します
  • grayscale() : 画像をグレースケールに変換する
  • hue-rotate() : 画像全体の色相を変更します
  • invert() : 画像の色を反転します
  • opacity() : 画像の透明度を変更する
  • saturate() : 入力画像を過飽和または不飽和にする
  • sepia() : 画像をセピア色に変換します

使用例

/* SVG フィルターの使用 */
フィルター: url("filters.svg#filter-id");
/* フィルター機能を使用する */
フィルター: ぼかし(5px);
フィルター: 明るさ(0.4);
フィルター:コントラスト(200%);
フィルター: ドロップシャドウ(16px 16px 20px 青);
フィルター: グレースケール(50%)
フィルター: 色相回転(90度);
フィルター: 反転(75%)
フィルター: 不透明度(25%)
フィルター: 飽和(30%)
フィルター:セピア(60%)
/* 複数のフィルター */
フィルター: コントラスト(175%) 明るさ(3%)
/* フィルターを使用しない */
フィルター: なし;
/* グローバル変数 */
フィルター: 継承;
フィルター: 初期;
フィルター: 未設定; 

応用事例

よりスマートな影

要素に影を追加する場合、通常はbox-shadowプロパティを使用します。box box-shadow(x偏移, y偏移, 模糊大小, 陰影大小, 色值, inset)の構文を使用して、要素に影の効果を簡単に追加できます。ただし、 box-shadowは欠点もあります。つまり、透明な画像に影の効果を追加する場合、要素を貫通できず、透明な画像要素のボックス モデルにのみ追加できます。このとき、 filter属性のdrop-shadow方式は、この問題をうまく解決できます。これによって追加された影は、要素のボックスモデルの境界に追加されるのではなく、要素を貫通できます。

drop-shadowで追加した影は、透明な要素を透過できるほか、 box-shadowと同じ影効果が得られます。ブラウザがハードウェアアクセラレーションをサポートしている場合、 filterを使用して追加した影効果はよりリアルになります。

drop-shadow構文は次のとおりです ( inset設定をサポートしていないことを除いてbox-shadowとまったく同じです)。

フィルター: ドロップシャドウ(x オフセット、y オフセット、ぼかしサイズ、カラー値);

のように:

フィルター: ドロップシャドウ(1px 1px 15px rgba(0, 0, 0, .5));

次の図は、透明な要素に影を追加するためにbox-shadowfilter: drop-shadowを使用する方法を比較したものです。

<img class="box-shadow" src="futurama.jpg" />
<img class="drop-shadow" src="futurama.jpg" />
.box-shadow {
  ボックスの影: 1px 1px 15px rgba(0, 0, 0, .5);
}
.ドロップシャドウ {
  フィルター: ドロップシャドウ(1px 1px 15px rgba(0, 0, 0, .5));
}

要素とウェブページをグレーアウトする

大規模な災害やその他の悲嘆すべき出来事が発生すると、国営企業や政府の Web サイトでは、すべての Web ページをグレー表示にする必要が生じることがよくあります。また、多くの Web ページには、マウスをhoverと灰色の要素が色付きの要素に変わるスタイル効果があります。このとき、要素のグレースケールを調整できるfilter属性のgrayscaleメソッドを使用できます。ページ要素にfilter: grayscale(100%)を設定すると、ページ要素をグレー表示できます。次の例では、 bodyタグの下にh1imgタグがあり、 filterスタイルを追加する前は次のようになります。

<本文>
  <h1 class="title">フューチュラマ</h1>
  <img class="img" width="500" src="./images/futurama.jpg" />
</本文>

ここでbody要素に.grayクラスを追加し、 <body>で Web ページ全体のグレー効果を実現できます。

.グレー{
  フィルター: グレースケール(100%)
}

IE8などの他の下位バージョンのブラウザとの互換性を保つために、ブラウザ プレフィックスとsvgフィルターを追加できます。 😤

.グレー{
  -webkit-フィルター: グレースケール(1);
  -webkit-フィルター: グレースケール(100%);
  -moz-filter: グレースケール(100%);
  -ms-filter: グレースケール(100%);
  -o-filter: グレースケール(100%);
  フィルター: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0 0 0 0 1 0\'/></filter></svg>#grayscale");
  フィルター: progid:DXImageTransform.Microsoft.BasicImage(グレースケール=1);
  フィルター: グレースケール(100%)
}

ウェブページを緊急にグレーアウトする必要がある場合、一定期間オンラインになった後にこの機能を削除する必要があることがよくあります。また、初回起動時に次の同様のメソッドを追加して、グレーアウト効果の自動オンライン時間とオフライン時間を制御し、スケジュールされた時間に達すると自動的に削除できるようにして、構築プロセスを2回実行する必要はありません。 🤣

(関数setGray() {
  var endTime = Date.parse("2077 年 4 月 6 日 00:00:01");
  var タイムスタンプ = Date.parse(new Date());
  タイムスタンプ <= 終了時刻の場合
    document.querySelector('html').classList.add('gray');
  }
})();

要素の強調、ハイライト

brightnessメソッドは、要素を強調表示する効果を実現します。メニュー バーや画像リストのhover効果に適用して、マウスで現在ホバーしているコンテンツや選択されているコンテンツを強調できます。以下は、ボタン メニュー バーのグループにbrightnesssaturateを追加し、明るさと彩度を変更して要素を強調表示する 2 つの方法です。

<div class="コンテナ">
  <a class="button">🍋</a>
  <a class="button">🍎</a>
  <a class="button">🍐</a>
  <a class="button dark">🥑</a>
  🍄
  🌽
  <a class="button disabled">🍒</a>
  <a class="button disabled">🍅</a>
  <a class="button disabled">🥔</a>
</div>
。容器 {
  マージン: 40px;
}
。ボタン {
  パディング: 0.5em 0.5em;
  背景: #E0E0E0;
  境界線の半径: 3px;
}
.button.dark {
  背景: #333;
}
.button:hover:not(.disabled) {
  カーソル: ポインタ;
  境界線の半径: 3px;
  フィルター: 明るさ(110%) 彩度(140%)
}
.ボタンが無効{
  フィルター: グレースケール(100%)
}

すりガラス効果

Frosted glass効果は、その名の通り、半透明のすりガラスの効果に似ています。iOSやWindows 10などのiOS UIで広く使用されています。すりガラス効果を使用すると、視覚的な体験を向上させることができます。 《CSS揭秘》などの書籍にも体系的な説明があります。 ここではfilter: blurbackdrop-filter: blurを使用してこの効果を実現する方法をまとめます。

同じクラス名glassを持つ 2 つのdiv要素があり、2 つのメソッドを区別するために、2 つのクラスglass-by-filterglass-by-backdrop-filterが追加されています。

<div class="glass glass-by-filter"></div>
<div class="glass glass-by-backdrop-filter"></div>

一般的なスタイル、サイズ、丸い角、その他の曇りガラス要素の基本スタイルを設定します。

。ガラス {
  高さ: 300px;
  幅: 300ピクセル;
  境界線: 1px 溝 #EFEFEF;
  境界線の半径: 12px;
  背景: rgba(242, 242, 242, 0.5);
  ボックスシャドウ: 0 0.3px 0.7px rgba(0, 0, 0, 0.126),
    0 0.9px 1.7px rgba(0, 0, 0, 0.179)、0 1.8px 3.5px rgba(0, 0, 0, 0.224)、
    0 3.7px 7.3px rgba(0, 0, 0, 0.277), 0 10px 20px rgba(0, 0, 0, 0.4);
}

filter: blurメソッドは、要素に::before疑似クラスを追加してblurメソッドを設定し、それを最下層に配置してすりガラス効果を実現します。

.ガラスフィルター {
  zインデックス: 1;
  ボックスのサイズ: 境界線ボックス;
  位置: 相対的;
}
.glass-by-filter::before {
  コンテンツ: "";
  位置: 絶対;
  上: 0; 右: 0; 下: 0; 左: 0;
  Zインデックス: -1;
  背景: 継承;
  フィルター: ぼかし(10px);
}

backdrop-filter: blur要素にblurメソッドを直接追加して、すりガラス効果を実現します。

.glass-by-backdrop-filter {
  背景フィルター: ぼかし(10px);
}

効果は次の図に示されています (左: filter 、右: backdrop-filter )。

拡張機能を読む: ぼやけたガラスの境界線効果: https://css-tricks.com/blurred-borders-in-css

芸術的な写真ですね! insatagram簡易版も実現可能

レトロ、版画、油絵、コミック、液化、古い写真、ミニマリスト、モランディ、サイバーパンク、ワンダヴィジョンのスタイルをすべて実現できます。

すべてのfilter方法を組み合わせることで、必要な効果を作成できます。以下は、各方式の値を調整し、画像のフィルター効果をリアルタイムで表示できるシンプルなfilter方式レギュレーターです。下の図の通りです。

ページのメイン コードは次のとおりです。コントロール領域#imageEditorformです。フォームの各行は、フィルター メソッドの値を制御します。表示領域#imageContainerにはimg要素が含まれており、生成されたfilterこの要素に対して動作します。

<フォーム id="imageEditor">
  <p>
    <label for="gs">グレースケール</label>
    <input id="gs" name="gs" type="range" min="0" max="100" value="0">
  </p>
  <p>
    <label for="blur">ぼかし</label>
    <input id="blur" name="blur" type="range" min="0" max="10" value="0">
  </p>
  <p>
    <label for="br">露出</label>
    <input id="br" name="br" type="range" min="0" max="200" value="100">
  </p>
  <p>
    <label for="ct">コントラスト</label>
    <input id="ct" name="ct" type="range" min="0" max="200" value="100">
  </p>
  <p>
    <label for="huer">色相回転</label>
    <input id="huer" name="huer" type="range" min="0" max="360" value="0">
  </p>
  <p>
    <label for="opacity">不透明度</label>
    <input id="不透明度" name="不透明度" type="範囲" min="0" max="100" value="100">
  </p>
  <p>
    <label for="invert">反転</label>
    <input id="invert" name="invert" type="range" min="0" max="100" value="0">
  </p>
  <p>
    <label for="saturate">飽和させる</label>
    <input id="saturate" name="saturate" type="range" min="0" max="500" value="100">
  </p>
  <p>
    <label for="sepia">セピア</label>
    <input id="セピア" name="セピア" type="範囲" min="0" max="100" value="0">
  </p>
  <input type="reset" form="imageEditor" id="reset" value="リセット" />
</フォーム>
<div id="imageContainer" class="center">
  <img src="futurama.jpg">
</div>
関数editImage() {
  var gs = $("#gs").val(); // グレースケール
  var blur = $("#blur").val(); // ぼかし
  var br = $("#br").val(); // 明るさ
  var ct = $("#ct").val(); // コントラスト
  var huer = $("#huer").val(); // 色相回転
  var opacity = $("#opacity").val(); // 不透明度
  var invert = $("#invert").val(); // 反転
  var saturate = $("#saturate").val(); // 飽和
  var sepia = $("#sepia").val(); // セピア
  $("#imageContainer 画像").css(
    「フィルター」、'グレースケール(' + gs+
    '%) ぼかし(' + ぼかし +
    'px) 明るさ(' + br +
    '%) コントラスト(' + ct +
    '%) 色相回転(' + huer +
    '度) 不透明度(' + 不透明度 +
    '%) 反転(' + 反転 +
    '%) 飽和(' + 飽和 +
    '%) セピア(' + セピア + '%)'
  );
  $("#imageContainer 画像").css(
    "-webkit-filter", 'グレースケール(' + gs+
    '%) ぼかし(' + ぼかし +
    'px) 明るさ(' + br +
    '%) コントラスト(' + ct +
    '%) 色相回転(' + huer +
    '度) 不透明度(' + 不透明度 +
    '%) 反転(' + 反転 +
    '%) 飽和(' + 飽和 +
    '%) セピア(' + セピア + '%)'
  );
}
// 入力値が変更されたときにフィルターを適用します $("input[type=range]").change(editImage).mousemove(editImage);

現在、フィルターのリアルタイムプレビューのみが実現されています。実現される予定の今後の機能には、複雑なsvgフィルター テンプレートのサポート、エクスポート、ダウンロードなどが含まれます。これらの手順を完了すると、写真にフィルターを追加するために他のAPP😅をダウンロードする必要がなくなります。完全なサンプルコード: https://codepen.io/dragonir/pen/abJmqxM

スペースを節約し、ウェブページの読み込み速度を向上

実践により、明るさ、コントラスト、色相の彩度を下げた後の同じ画像の容量は、元の画像と比較して大幅に削減できることが証明されています。約2Mの写真は、弱めて保存すると約1Mに圧縮できます。弱化画像を Web ページで使用し、その後CSS filterを使用して復元することができます。このようにして、リソース量を圧縮し、Web ページの読み込み速度を上げ、ユーザー エクスペリエンスを向上させるという目的を達成できます。

詳細な操作については、次のチュートリアルをお読みください。

コントラストスワップテクニック: CSS filterを使用した画像パフォーマンスの向上 https://css-tricks.com/contrast-swap-technique-improved-image-performance-css-filters

互換性

caniuseクエリ結果から、 css filter属性は最新のブラウザで十分にサポートされていることがわかります。IE IEを除いて、他のほとんどのブラウザで正常に使用できます。必要に応じて、ブラウザ カーネル プレフィックスを追加できます。ただし、公式サイトには次の 3 つの問題プロンプトも表示されています。これらの問題は、ブラウザがアップグレードされるにつれて徐々に修正されると思います。

  • Safari では、子要素がアニメーション化されている場合、フィルターは適用されません。
  • 現在、 drop-shadowフィルターのspread-radiusメソッドをサポートしているブラウザーはありません。
  • Edgeブラウザでは、要素またはサブ要素に負值z-indexが設定されている場合、フィルターを適用できません。

要約する

この記事では、 CSS filterを使用したよく使用されるページ効果をいくつか簡単にリストしました。実際には、 filterの各組み込みメソッドには、拡張と適用の無限の可能性があります。たとえば、色のinvert hover効果にも適用でき、Web ページのsepiaブラウンの値を調整することで目の保護効果を実現できます。想像力と創造力を使えば、 filter実際にうまく適用できます。

以下の例は良い応用例です。興味があれば、さらに詳しく読むことができます。

すりガラス効果 https://codepen.io/KazuyoshiGoto/pen/nhstF

割れたガラスのエフェクト https://codepen.io/bajjy/pen/vwrKk

フィルターを使用したホバー効果 https://codepen.io/nxworld/details/ZYNOBZ

反転カラーボタン https://codepen.io/monkey-company/pen/zZZvRp

古い写真 https://codepen.io/dudleystorey/pen/pKoqa

高度なフィルターエディター: https://codepen.io/stoumann/pen/MWeNmyb

最後に、上記のフィルター エディターを使用して調整した復古莫蘭迪色性冷淡油畫效果フィルターの写真を添付し​​ます。 (わあ、これはすごいですね。CSS CSS本当に素晴らしいですyyds🤣 )

以上が CSS フィルターの魔法のような使い方の詳細です。CSS フィルターの魔法のような使い方の詳細については、123WORDPRESS.COM の他の関連記事をご覧ください。

<<:  HTMLページの文字セットを指定する2つの方法

>>:  HTMLの基本タグと構造の詳細な説明

推薦する

Centos8.2 クラウド サーバー環境に Tomcat8.5 をインストールするための詳細なチュートリアル

Tomcatをインストールする前に、まずJDK環境をインストールしてくださいLinux サーバー上で...

Dockerコンテナが起動直後に終了する問題を解決する

最近、Docker がコンテナの起動時に特定のプロセスを直接実行できるようにする方法を調べていたとこ...

HTML コードの書き方に関する提案のまとめ

リソースファイルのプロトコルを省略する画像、メディアファイル、スタイル、スクリプトの URL では、...

MySQLでトランザクションを開始する方法

序文この記事では主にMySQLでトランザクションを開始する方法について紹介します。関連情報については...

Docker 上で Redis クラスターを構築する

目次1. イメージをプルする2. Redisコンテナを作成する3. コンテナを起動するためにクラスタ...

Linux Centos7 に mysql8 をインストールするチュートリアル

1. RPMバージョンのインストールデータベースの他のバージョンがあるかどうかを確認し、ある場合は完...

CSS3 シンプルカットカルーセル画像実装コード

実装のアイデアまず、親コンテナーを作成し、2 つの順序なしリストを使用して、柔軟なレイアウトで親コン...

Linux インストール MySQL チュートリアル (バイナリ配布)

このチュートリアルでは、LinuxにMySQLをインストールする詳細な手順を参考までに紹介します。具...

JavaScript デザインパターン プロキシパターンの学習

目次概要実装保護エージェント仮想エージェント画像の遅延読み込みを実現する仮想プロキシ概要プロキシ パ...

デュアル VIP を使用した高可用性 MySQL クラスタの構築

目次1. プロジェクトの説明: 2. プロジェクト環境: 2. プロジェクトの手順: 3. プロジェ...

div の特定の実装は自動的に折り返されず、HTML で折り返されないよう強制されます。

1. 改行なしを実現するには<nobr>タグを使用するコードをコピーコードは次のとおりで...

jsプロジェクトでの双方向データバインディングの簡単な実装方法

目次序文パブリッシュ・サブスクライバ・パターン結果電話要約する序文双方向データ バインディングとは、...

Mysqlクエリ条件で文字列の末尾にスペースがあっても一致しない問題の詳細な説明

1. テーブル構造テーブル人id名前1あなた2あなた(スペース) 3あなた(スペース2つ) 2. ク...

MySQL のマスタースレーブレプリケーションと読み取り書き込み分離の原理と使用法の詳細な説明

この記事では、例を使用して、MySQL マスター/スレーブ レプリケーションと読み取り/書き込み分離...

CSS で背景ぼかし効果を実装するサンプルコード

以下のような効果でしょうか?もしそうなら、ぜひ読み進めてください! コードデモンストレーション(上の...