CSS スティッキー配置位置の詳細な説明: スティッキー問題の落とし穴

CSS スティッキー配置位置の詳細な説明: スティッキー問題の落とし穴

前書き: position:sticky は CSS ポジショニングの新しい属性です。相対ポジショニングと固定ポジショニングの組み合わせと言えます。主にスクロール イベントを監視するために使用されます。簡単に言えば、スライド プロセス中に、要素とその親要素間の距離が固定ポジショニングの要件 (top: 100px など) に達した場合、このときの position:sticky の効果は固定ポジショニングと同等であり、適切な位置に固定されます。

使用:

#スティッキーナビゲーション{
位置: 固定;
上: 100px;
}

位置を固定に設定し、同時に(上、下、右、左)のいずれかを指定します

使用条件:

1. 親要素には、overflow:hidden 属性または overflow:auto 属性を指定できません。

2. 上、下、左、右のいずれかの値を指定する必要があります。そうでない場合は相対的な位置になります。

3. 親要素の高さは固定要素の高さより低くすることはできない

4. スティッキー要素は親要素内でのみ有効です

例: CSS コード:

* {
            マージン: 0;
            パディング: 0
        }
        
        html 本文 {
            高さ:100vh;
            幅: 100%
        }
        
        h1 {
            高さ: 200px;
            位置: 相対的;
            背景色: 水色;
        }
        
        h1:後{
            コンテンツ: '';
            位置: 絶対;
            上: 100px;
            左: 0;
            幅: 100%;
            高さ: 2px;
            背景色: 赤;
        }
        
        #スティッキーナビゲーション{
            位置: 固定;
            /*位置: 絶対;*
            左: 0;*/
            上: 100px;
            幅: 100%;
            高さ: 80px;
            背景色: 黄緑;
        }
        
        .スクロールコンテナ{
            高さ: 600px;
            幅: 100%;
            背景色: ライトグレー;
        }

HTMLコード:

<h1>高さ 200 ピクセル、上から 100 ピクセル</h1>
    <div id="sticky-nav">これはタブ切り替えバーです。スティッキーを top=100px に配置します</div>
    <p class="scroll-container">スクロールが発生します</p>
    <p class="scroll-container" style="background:lightgoldenrodyellow;">スクロールが発生します</p>

プロジェクトで遭遇した落とし穴:

まず、各カーネルの position:sticky のサポートについて見てみましょう。

問題の説明:

小規模なプログラム開発プロジェクトでは、タブ コンポーネントはタブ バーの切り替えを含む固定配置を使用します。タブ バーの下部には、大きなリストのリスト コンテナー コンテンツが表示されます。表示されるコンテンツにはクリック イベント (またはタッチ イベント) があります。iOS および PC ブラウザーでのクリック テストは正常ですが、Android フォンでは正常ではありません。 ! ! !なんと、クリックが完了しました! !また、リスト コンテナー内の項目のクリック ジャンプを削除しようとしたところ、タブ スイッチのクリックに応答がなく、イベントが消えてしまいました。 ! !

ブレークポイントを設定して、イベント フローの方向を表示します。まず、イベント キャプチャ --> ターゲット ノード タブ --> イベント バブリング。このバブルは、実際にコンテナー リスト内の項目に到達します。 。 。悪夢です。大まかに言うと、プロジェクトの構造は次のとおりです。

HTML構造:

<div class="service-wrap">
        <tab>これはタブスイッチです</tab>
        <div class="リストコンテナ">
            <!--for ループには多くの項目があります-->
            <アイテム></アイテム>
            <アイテム></アイテム>
        </div>
    </div>

解決:

1. コンポーネントライブラリのタブを使用する場合は、クリックの侵入や異常なイベントフローを防ぐために、外側のレイヤーにdivを配置するか(ビジネスシナリオに応じて一時的な解決策)

2. コンポーネントライブラリのスタイルは変更できません。タブコンポーネントのインラインスタイルとして Sticky を使用します。このタブをビューポイントの一番上に直接使用するため、この効果は固定で実現できます。呼び出しクラスの外部で position:fixed !import を設定しました。このスタイルは、コンポーネント ライブラリ内の配置スタイルをオーバーライドする最高の優先順位を持ち、すべて正常に動作します。

いくつかの考え:

position:sticky と Android の互換性は、単純に悲痛です。現在、携帯電話のユーザーが多く、両方を考慮する必要があります。Android システムは sticky ポジショニングをサポートしていないため、ビジネス シナリオが他のポジショニングで解決できる場合は、sticky を使用しない方がよいでしょう。 。 。 。悲しい涙を残して。 。 。 。

追伸: 他に解決策がありましたら、ぜひ教えてください。よろしくお願いします。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

<<:  グリッドはページのレイアウトプランです

>>:  さまざまなブラウザでのhrタグの説明

推薦する

JSはアニメーションのレイアウト変換を実装します

JS でアニメーションを記述する場合、移動前に相対位置を絶対位置に変換してからアニメーション機能を実...

MySQLカスタム関数の簡単な使用例

この記事では、例を使用して MySQL カスタム関数の使用方法を説明します。ご参考までに、詳細は以下...

docker コンペ応募でよく使われるコマンドのまとめ

アカウントにログイン DOCKER_REGISTRY=registry.cn-hangzhou.al...

Vue ポーリング リクエスト ソリューションの完全な例

世論調査の理解実際、ポーリングの焦点はループ自体ではなく、実行間の間隔にあります。 Ajax は非同...

Zabbix で監視項目と集約されたグラフを設定するためのサンプルコード

1. ローカルマシンを監視するためにZabbixエージェントをインストールするエージェントソフトウェ...

jsはタイトルと説明のキーワードを検出し、見つかった場合は置換するか他のページにジャンプします。

キーワード 一般タイトルには、クラック、キー、シリアル番号、キージェネレータなどの単語を含めることは...

MySQL 悲観的ロックと楽観的ロックの実装

目次序文実際の戦闘1. ロックなし2. 悲観的ロック3. 楽観的ロック要約する序文悲観的ロックと楽観...

Docker イメージの作成、アップロード、プル、およびデプロイ操作 (Alibaba Cloud を使用)

学習プロセス中にプッシュ イメージが常にタイムアウトすることがわかったため、Alibaba Clou...

MySQL のスロークエリの方法と例

1. はじめにスロークエリログを有効にすると、MySQL は指定された時間を超えるクエリステートメン...

MySQL ストアド プロシージャと共通関数のコード分析

mysql ストアド プロシージャの概念:特定のタスク (クエリと更新) を実行できる、データベース...

Google Web Fonts でウェブサイトに無制限のフォントを追加

長い間、リソースの制約により、使用できるフォントが限られていたため、Web サイトの開発は妨げられて...

MySQL サーバーの接続、切断、および cmd 操作

mysql コマンドを使用して MySQL サーバーに接続します。 MySQL サーバーが起動したら...

一般的なテーブルコンポーネントの Vue カプセル化の完全な手順記録

目次序文テーブル コンポーネントをカプセル化する必要があるのはなぜですか?ステップ1: 共通コンポー...

太字の <b> と <strong> の違いの分析

私たちウェブマスターは皆、ウェブサイトを最適化する際に記事内のキーワードを太字にすることが最適化に非...