純粋なCSSを使用してスクロールシャドウ効果を実現します

純粋なCSSを使用してスクロールシャドウ効果を実現します

端的に言うと、スクロール可能な要素には非常によくある状況があります。通常、スクロールすると、要素が現在表示領域外にスクロールされていることを示すために、次のようにスクロールに垂直な側に影が追加されます。

スクロール処理中に影が表示されることがわかります。

スクロール中に両側の列が静止したまま境界線に付着してしまう問題については、CSS では通常、 position: stickyを使用して解決します。

ただし、スクロール処理中に表示される影 (スクロール コンテナー内のコンテンツが端に触れていない場合は影が表示され、端に触れている場合は影が消えます) については、これまでのアプローチでは常に JS を使用する必要がありました。

では、純粋な CSS で実現できるソリューションはあるのでしょうか?ふふふ、そうですね。非常に巧妙なトリックがありますので、それを段階的に明らかにしていきましょう。

魔法のbackground-attachment

純粋な CSS を使用して上記のスクロール シャドウを実現するには、使用する最も重要な要素はbackground-attachmentです。

以前の記事「CSS パララックス効果」では、 background-attachmentについて詳しく説明しました。background background-attachment: fixed使用すると、次のように、Web サイトでスクロール パララックス効果や、画像をクリックしたときのような波紋効果を簡単に実現できます。

もちろん、今日の主役はbackground-attachment: fixedではなく、 background-attachment: srcollです。

background-attachment: srcoll

まず、 background-attachmentについて説明します。background background-imageが指定されている場合、 background-attachment背景をビューポートに固定するか、背景を含むブロックとともにスクロールするかを決定します。

簡単に言えば、スクロール可能なコンテナー内で背景パターンがどのように移動するかを決定します。 2 つの簡単なデモを通じて、 background-attachment: srcollbackground-attachment: local理解します。

background-attachment: local 、これは日常的な使用法と一致しており、スクロール可能なコンテナの背景パターンはコンテナとともにスクロールします。

background-attachment: scroll 、これが今日の主役です。これは、背景が要素の内容とともにスクロールするのではなく、要素自体に対して固定されていることを示します。

まだ違いがわからない場合は、次のデモをチェックして自分で確認してください。

CodePen デモ -- bg-attachment デモ

srcolllocalを一緒に使ってトリックを実現する

この時点で、多くの学生はまだ混乱しているかもしれません。具体的に何をすればよいのでしょうか?これはこの記事のスクロール シャドウとどのように関係するのでしょうか?

心配しないでください。スクロール シャドウの難しさは、最初にスクロールしていないときはシャドウがないことです。シャドウは、スクロールが始まったときにのみ表示されます。

そこで、ここでは、 background-attachment: srcollbackground-attachment: localスクロールの開始時には、影の背景を隠すために、2 つの背景レイヤーを重ねて使用します。実際にスクロールするときには、重なり合った部分を削除し、影の部分のみを露出させます。

えっと?どういう意味ですか。スクロール コンテナーに、それぞれbackground-attachment: srcollbackground-attachment: localを使用して 2 つのグラデーション効果を追加し、次のように重ね合わせます。

<!-- スクロール可能なコンテナ -->
<ul>
    <li>...</li>
    ...
    <li>...</li>
</ul>
// シナリオ 1:
.g-ワン{
    背景: 線形グラデーション(#fff, #f00);
    背景サイズ: 100% 10px;
    背景繰り返し: 繰り返しなし;
    背景添付: ローカル;
}
 
// シナリオ 2:
.g-2 {
    背景: 放射状グラデーション(50% 0、#000、#0f0 70%);
    背景サイズ: 100% 10px;
    背景繰り返し: 繰り返しなし;
    背景添付: スクロール;
}
 
// シナリオ 3:
.g-結合{
    背景:
        線形グラデーション(#fff, #f00)、
        放射状グラデーション(50% 0%、#000、#0f0 70%);
    背景サイズ: 100% 10px、100% 10px;
    背景繰り返し: 繰り返しなし;
    背景添付: ローカル、スクロール;
}

実際の効果は次のようになります。1 つの背景はコンテナーとともにスクロールし、もう 1 つの背景はコンテナーとともに固定されます。コンテナとともにスクロールする背景は、初期マスクとして機能します。

スクロールすると、最後に重ねられた画像が、実際にはスクロール時に異なる色 (影) を表示するために必要な効果であることがわかります。 2 つのグラデーションの色を調整し、マスク レイヤー ( background-attachment: local ) を白に設定してから、放射状グラデーションを使用して、固定シャドウ レイヤー ( background-attachment: scroll ) に必要なシャドウの色をシミュレートします。

CSS コードは次のようになります。

.g-final {
    背景:
        線形グラデーション(#fff、透明度100%)、
        線形グラデーション(rgba(0, 0, 0, .5), 透明度100%);
    背景サイズ: 100% 30px、100% 10px;
    背景繰り返し: 繰り返しなし;
    背景添付: ローカル、スクロール;
}

灰色の影はlinear-gradient(rgba(0, 0, 0, .5), transparent 100%)を使用してシミュレートされます。

はい、完了です。上記のすべてのデモは、こちらから確認できます:

CodePen デモ - 純粋な CSS スクロール シャドウ

記事の冒頭で示したように、この手法はtableに直接適用することもできます。

CodePen デモ - 純粋な CSS テーブル スクロール シャドウ

いくつかの質問の順序

もちろん、上記のプロセスには実際に問題があります。影はbackgroundによってシミュレートされるため、最終的な効果はコンテンツが影の中にある(背景の上)ということになりますが、実際の効果はそれほど変わりません。これを許容できる場合は、このソリューションは完全に使用できます。

互換性

さて、もちろん、 background-attachmentの互換性という別の問題もあります。 CAN I USEを見てみましょう:

「Can i use」の下のコメントは、ほとんどの互換性の問題がbackground-attachment: fixedによって発生していることを示しており、この記事の有効性にはほとんど影響しません。

やっと

この記事のテクニックはオリジナルではありません。私が最初にこのテクニックを知ったのは、次の記事でした: CSS 属性 *-gradient の実用的な価値を探り、実際に使用できるかどうかをさらに探る。

純粋な CSS を使用してスクロール シャドウ効果を実現する方法については、これで終わりです。スクロール シャドウ コンテンツを実現するためのより関連性の高い CSS については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

<<:  ビューポートの基本原理と詳細な使用方法

>>:  Lvs+Nginx クラスターを使用して高並列アーキテクチャを構築する例

推薦する

選択にスタイルを追加するための純粋な CSS (スクリプトなし) 実装

通常は ul、li を介して選択のデフォルト スタイルを変更して、実現をシミュレートします。このよう...

MySQLクエリデータを時間別に表示します。データがない場合は0を入力してください。

需要背景統計インターフェースでは、フロントエンドは 2 つの配列を返す必要があります。1 つは 0 ...

乱数、文字列、日付、検証コード、UUIDを生成するMySQLメソッド

目次乱数を生成する0から1までの乱数を生成する指定された範囲内で乱数を生成します6桁のモバイル認証コ...

Element における複数データ読み込み最適化の実装

目次シナリオコードの実装要約:シナリオ最近、ElementUI をベースにしたバックグラウンド管理シ...

mysql5.7 リモート アクセス設定

mysql5.7 でリモート アクセスを設定することは、ユーザーを作成して権限を付与するだけでアクセ...

きちんとしたHTMLマークアップを使用してページを構築します

インターネットは絶えず進化する有機体です。長期にわたってインターネットの発展に適応できるページを構築...

Alibaba Cloud Server の詳細な展開 (グラフィック チュートリアル)

最近、Web 開発のフロントエンドとバックエンドの技術を学んだので、その後の管理を容易にするためにプ...

MySQL コピーテーブルと許可分析の 3 つの実装方法

テーブルを素早くコピーする方法まず、テーブル db1.t を作成し、1000 行のデータを挿入します...

MySQLデータベースのトランザクション分離レベルの詳細な説明

データベーストランザクション分離レベルデータベース トランザクションには、低から高まで 4 つの分離...

Docker コンテナの正常なシャットダウン前にトラップを使用して環境のクリーンアップを実行する

実行中のコンテナが終了したときに、コンテナが完全に終了する前に環境をクリーンアップするなど、いくつか...

検索履歴を実装するjQueryプラグイン

毎日jQueryプラグイン - 検索履歴を作成するためのものです。参考までに、具体的な内容は次のとお...

grep を使用して MySQL エラー ログ情報を取得する方法の詳細な説明

MySQL のメンテナンスを容易にするために、エラー情報を収集するためのインターフェースを提供するス...

Linux で Nginx 1.16.0 をインストールするための詳細なチュートリアル

最近 Linux をいじっていたので、nginx の新しいバージョンをインストールしたいと思いました...

MySQL データベースのインデックス順序の詳細な説明

目次事件の原因解剖学ファイルの並べ替えファイルのソートが非常に遅いのですが、他に解決策はありますか?...

Node.js はクライアントリクエストデータ内の中国語文字化けの問題を解決します

Node.js はクライアントリクエストデータ内の中国語文字化けの問題を解決しますコード例: var...