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タグの説明

推薦する

Linux で NFS ファイル共有サーバーを構築するための詳細な手順

Linux が NFS サーバーを構築異なるオペレーティング システム間でデータを共有するために、通...

パーソナライズされたクリエイティブなウェブサイトデザインの例 (30)

そこで、個性的なスタジオやフリーランスを表現する組み合わせを 30 個選びました。デザインを目立たせ...

繰り返し送信、繰り返し更新、バックオフ防止に関する問題と解決策の分析

1つ。序文<br />この種の質問は、どの専門掲示板でも見かけます。Google で検索...

ボタンの権限判定を実装するためのVueカスタムv-has命令

アプリケーションシナリオバックグラウンド管理システムを例にとると、各ユーザーには異なるボタン権限があ...

Expressはログイン認証を実装

この記事では、ログイン認証を実装するためのExpressの具体的なコードを例として紹介します。具体的...

静的ページと動的ページの実行メカニズムの説明

1. 静的ページとは、Web ページ内に HTML タグのみが含まれるページです。WEB 開発者がこ...

Linux ncコマンドの概要

NC のフルネームは Netcat (Network Knife) で、作成者は Hobbit &a...

MySQL 学習: 初心者のための 3 つのパラダイム

目次1. パラダイム基盤1.1 パラダイムの概念2. 3つの主要なパラダイム2.1 3つの主要なパラ...

docker createコマンドの使用方法

docker create コマンドは、イメージに基づいてコンテナを作成できます。このコマンドの効果...

JavaScript フロントエンドのタイムアウト非同期操作に最適なソリューション

目次コードの実行に長い時間がかかる場合はどうなりますか? Axiosにはタイムアウト処理機能が搭載さ...

MySQL における varchar 型と char 型の違い

目次前述のVARCHAR型VARCHAR適用可能な状況CHAR型テストVARCHAR(5)とVARC...

Win10にnginxをインストールする方法

会社から、負荷を実装するためにnginxをベースにFordプロジェクトのWebServiceサーバー...

Portainer を使用して Docker のビジュアル インターフェースを構築する方法

ポーテナーの紹介Portainer は、ステータス表示パネル、アプリケーション テンプレートの迅速な...

Apple の携帯電話のロックを解除するときに光沢のあるフォント効果を実現するために CSS3 を使用する例

0. はじめに2016 年 8 月 18 日 今日、iPhone をスライドさせてロックを解除すると...

MySQL データベースのエンコーディングを utf8mb4 に変更する方法

utf8mb4 エンコーディングは utf8 エンコーディングのスーパーセットであり、utf8 と互...