純粋な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 クラスターを使用して高並列アーキテクチャを構築する例

推薦する

Vue3 + TypeScript 開発の概要

目次Vue3 + TypeScript 学習1. 環境設定1.1 最新のVue scaffoldin...

vue-seamless-scrollがスクロールしていいねをするときのデータ同期の問題を解決する

VUE は vue-seamless-scroll を使用して、自動的にスクロールしていいねします。...

IEの送信フォームの記録履歴クリックリターン情報を実現するためのCSSスタイルコントロールはまだ残っています

これは主に CSS スタイルのコントロールと META タグです。コードをコピーコードは次のとおりで...

MySQL alter ignore構文の詳細な説明

今日仕事中に、ビジネス側から次のような質問をされました。テーブルがあり、一意のフィールドを追加する必...

ウェブページの内部アンカーポイントを実現するための純粋なCSSの上下オフセットコード例

最近、「フットボール ナビゲーション」Web サイトに取り組んでいるときに、上部の固定ナビゲーション...

nginx を使用して同じドメイン名で複数の Vue プロジェクトをデプロイし、リバース プロキシを使用する方法

効果現在、プロジェクトは2つ(project1、project2)あり、nginxに付属するinde...

Linux システムに 3 つ以上の Tomcat をインストールする (詳細な手順)

複数のTomcatをインストールする場合は、システムにJDKがインストールされている必要があり、 T...

JQuery を放棄すべきでしょうか?

目次序文jQuery 以外の場合は何を使うのでしょうか? DOMとイベントAJAX リクエスト要約す...

WeChatアプレット+EChartsで動的更新プロセス記録を実現

序文最近、小さなプログラムでリアルタイムにチャートを更新するという要件に遭遇しました。最初は wx-...

Vue の双方向イベントバインディング v-model の原理についての簡単な説明

目次説明する:要約する補充するDOM を直接変更して操作する js や jQuery とは異なり、V...

Dockerイメージのサイズを縮小する6つの方法

2017 年に Vulhub に取り組み始めてから、私は厄介な問題に悩まされてきました。Docker...

Linux nslookup コマンドの使用方法の詳細な説明

[nslookup とは?] 】 nslookup コマンドは、Linux で非常によく使用されるネ...

Linux システムで .sh ファイルを実行する方法

Linux システムで .sh ファイルを実行する方法は 2 つあります。たとえば、ルート ディレク...

ハイパーリンクに関するいくつかの質問

<br />ポテトチップスパーティーのこのエピソードに参加して、何人かの友達に会えてとて...

Web プロジェクト開発 VUE の混合と継承の原則

目次ミキシンMixin ノート (重複名)ローカルミックスイングローバル ミックスイン定義とグローバ...