CSS クロスフェード() を使用して半透明の背景画像効果を実現するサンプルコード

CSS クロスフェード() を使用して半透明の背景画像効果を実現するサンプルコード

1. 要件の説明

特定の要素については、背景background-imageを半透明にしたいが、テキストやアイコンなど、要素内の他のコンテンツは不透明のままにしたいとします。

単色の背景や CSS グラデーションの背景であれば、扱いは簡単です。RGBA またはhslaカラーrgbaを使用するだけです。

ただし、 url()背景画像の場合は、どうしようもないようです。

インライン<img>画像であれば、扱いは簡単です。フィルター、マスク、 opacity設定のいずれでも、効果を得ることができます。ただし、これは背景画像であり、上記のすべての方法はテキストの正常な表示に影響します。

多くの人は、たとえば::before / ::after疑似要素の使用を思いつくと思います。

。箱 {
   位置: 相対的;
   zインデックス: 0;
}
.box::before {
   コンテンツ: '';
   位置: 絶対;
   左: 0; 右: 0; 上: 0; 下: 0;
   背景: url(xxx.jpg) 繰り返しなし 中央 / 含む;
   Zインデックス: -1;
   不透明度: .5;
}

リアルタイム効果は以下のとおりです(効果がない場合、原作者のZhang Xinxuをご覧ください)。

投稿者: zhangxinxu

ただし、この方法は冗長かつコストがかかりすぎる (スタック コンテキストが大量に作成され、サイズを調整する必要がある) ため、大規模に使用することはできません。

それを実装する良い方法はありますか?

cross-fade()画像関数を使用してみてください。

2. cross-fade() は背景画像を半透明にする

cross-fade()関数を使用すると、2 つの画像を半透明にブレンドできます。

例えば:

<div class="クロスフェードイメージ"></div>
.クロスフェードイメージ{
    幅: 300ピクセル; 高さ: 300ピクセル;
    背景: 繰り返しなし 中央 / 含む;
    背景画像: -webkit-cross-fade(url(1.jpg), url(2.jpg), 50%);
    背景画像: クロスフェード(url(1.jpg), url(2.jpg), 50%);   
}

効果は下図のようになります。

画像2.jpgは、画像1.jpgと 50% の透明度で混合されてレンダリングされます。

上記の例では、 cross-fade()関数の従来の構文を使用しています。構文は次のとおりです。

<dfn id="ltimage-combination">
<画像の組み合わせ>
</dfn> = クロスフェード( <画像>, <画像>, <パーセンテージ> )

ここで、 <percentage>は透明度を指し、2 番目の画像の透明度のみを変更します。最終的な効果は、最初の画像が完全に不透明になり、2 番目の画像が半透明になることです。

cross-fade()画像関数のパーセンテージ値に関しては、次の画像の透明度のみを変更します。かなり前にテスト用のデモページを作成しました。こちらをクリックしてください: CSS3 クロスフェード属性透明度オブジェクトテスト

スクリーンショットは次のとおりです。

cross-fade()関数の本来の目的は、複数の画像を半透明に重ね合わせることですが、実際の開発ではそのようなシナリオに遭遇することはほとんどありません。そのため、 cross-fade()は単一の背景画像の半透明効果を制御するのに適しています。

実装原理は非常にシンプルです。最初の画像には透明な画像を使用し、2 番目の画像にはターゲット画像を使用します。

例えば:

ダークモードでは背景画像が明るすぎます。背景画像の明るさを調整したいです。cross cross-fade()は、次の CSS コードで実装されています (幅と高さの設定の CSS は省略されています)。

。暗い {
    /* フォールバック、IE および Firefox ブラウザ*/
    背景画像: url(2.jpg);
    --transparent: url(data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==);
    /* 最新バージョンの Safari ではプライベートプレフィックスは不要になりました */
    背景画像: クロスフェード(var(--transparent), url(2.jpg), 40%);
    /* カスタム プロパティを使用する場合は、-webkit- ステートメントを private プレフィックスなしのステートメントの下に配置する必要があります */
    背景画像: -webkit-cross-fade(var(--transparent), url(2.jpg), 40%);

    背景サイズ: カバー;
}

効果は以下のとおりです。

とてもシンプルですね。疑似要素の実装よりもはるかに信頼性が高いのではないでしょうか。対応するデモはここにあります。

cross-fade()は本質的に<image>画像データタイプであり、 url()イメージ、グラデーション イメージ、および image-set() 関数のプロパティであり、 border-imagemask-imageなどの属性で使用できます。

したがって、 url()関数の代わりにcross-fade()関数を使用して背景画像の半透明効果を実現するのが、最もコストが低く、最適な方法です。

3. 優れたモバイル互換性

cross-fade()関数は、iOS 5 や Android 4.4 など、Webkit ブラウザーで長い間サポートされてきました。ただし、次の図に示すように、プライベート プレフィックスを設定する必要があります。

そのため、モバイルデバイスでも安心してご利用いただけます。PCに関しては、IEブラウザを考慮する必要がなければ安心してご利用いただけます。IEを考慮する必要があっても問題ありません。唯一の違いは、背景画像が依然として完全に不透明であり、視覚的な体験がわずかに低いことです。

この世に役に立たない CSS プロパティなど存在しません。ただ、適切なシナリオに遭遇していないだけです。独身の皆さんと同じように、適切な相手にまだ出会っていないだけです。

また、 cross-fade()関数は CSS 仕様に追加された後、より柔軟で強力な新しい構文になりましたが、現在サポートしているブラウザがないため、この記事では紹介しません。

CSS クロスフェード() を使用して背景画像の半透明効果を実現するサンプルコードに関するこの記事はこれで終わりです。CSS クロスフェード() 背景画像の半透明効果の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

<<:  フォント宝庫 50 種類の素晴らしい無料英語フォントリソース パート 2

>>:  MySql ページングで limit+order by を使用する場合のデータ重複の解決策

推薦する

HTML でスクロールバーを非表示にしたり削除したりする方法

1. 属性付きHTMLタグXML/HTML コードコンテンツをクリップボードにコピー< htm...

Windows システム mysql5.7.18 インストール グラフィック チュートリアル

Windows システム向け MySQL インストール チュートリアルダウンロード1. https:...

ChromeはCookieの変更を監視し、値を割り当てます

次のコードは、Chrome による Cookie の変更の監視を導入しています。コードは次のとおりで...

CSS3 を使って本のページめくり効果を実現するサンプルコード

重要なポイント: 1. CSS3 3Dアニメーションをマスターする2. ページめくり後のページ内容の...

CSS スタイルを使用して表のフォントを垂直中央に配置する方法

CSS スタイルを使用して表内のフォントを垂直方向に中央揃えする方法は次のとおりです。下図のようなカ...

MySQLログシステムの詳細情報共有

大規模なシステムに取り組んだことがある人なら誰でも、ログの役割を過小評価してはならないことを知ってい...

MySQLの空の値とnull値の違いを知っていますか?

序文最近、友人がSQLを書くときにnull値を判定する方法が間違っていて、プログラム内のデータにエラ...

CSSのoutline-offsetプロパティを使用してプラス記号を実装する

次のような初期コードがあると仮定します。 <!DOCTYPE html> <htm...

MySQL のダウンロードとインストールの詳細グラフィックチュートリアル

1. MySQLデータベースをダウンロードするには、公式Webサイトにアクセスしてください:http...

Linux ディスク パーティションの実装の原理と方法の分析

覚えて: IDE ディスク: 最初のディスクは hda、2 番目のディスクは hdb...最初のディ...

Linux での UDP について学ぶ

目次1. UDPとLinuxの基礎の紹介2. 各機能の使い方1. ソケット機能の使用2. バインド機...

MySQLのネクストキーロックのロック範囲についての簡単な説明

序文ある日、突然 MySQL の次のキー ロックについて尋ねられ、私の即座の反応は次のようなものでし...

MySQL 8.0.12 クイックインストールチュートリアル

MySQL 8.0.12 のインストールには 2 日かかり、さまざまな問題が発生しました。以下にまと...

シームレスなトークンリフレッシュを実現する方法

目次1. 需要方法1方法2方法3 2. 実装3. 問題解決質問1: トークンの複数回の更新を防ぐ方法...

Linux TTY/PTS の違いの概要

キーボードで文字を入力すると、対応するプロセスにどのように送信されるのでしょうか? ps や who...