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

推薦する

Nginx コンテンツ キャッシュと共通パラメータ設定の詳細

使用シナリオ:プロジェクトのページでは、頻繁に変更されず、個別のカスタマイズも伴わない大量のデータを...

Mysql はテーブル内の古いデータを定期的にクリアし、いくつかのデータを保持します (推奨)

以下の目標を達成するため: Mysql データベースは、一定の間隔 (2 時間または 1 日、カスタ...

Ubuntu 16.04.5LTS に SVN をインストールする手順

この記事では、UbuntuシステムでSVNを設定するプロセスを簡単に紹介します。ソースを更新sudo...

js はランダムロールコールを実装します

この記事では、ランダムロールコールを実装するためのjsの具体的なコードを参考までに共有します。具体的...

VMware15 centos7 ブリッジモード ssh に突然アクセスできなくなる問題を解決する

仮想マシンに独自の LAN IP を持たせたいので、テストを容易にするためにブリッジを使用します。 ...

Windows Server 2008 のサーバー パフォーマンス監視に関するチュートリアル

次に、ログ管理、ログのアーカイブ、ログのトラブルシューティング、イベントの転送と収集のためのコンピュ...

JVMシリーズのメモリモデルの詳細な説明

目次1. メモリモデルとランタイムデータ領域2. マインドマップと凡例3. オブジェクトはJVMから...

フロントエンドの上級者向けコースでは、JavaScript のストレージ機能の使い方を学習します。

目次序文背景実施計画の考え方js ストレージ機能ソリューション設計やっと要約する序文どの SaaS ...

Vueはシンプルなスライダー検証を実装する

この記事の例では、Vueスライダー検証の実装を共有しています。コードは次のとおりです。 <テン...

Dockerでmysqlのルートパスワードを変更する方法

最初のステップはmysqlコンテナを作成することです docker exec -it コンテナID ...

LinuxベースのApacheウェブサイトサービス構成の詳細な説明

オープンソース ソフトウェアである Apache は、最も広く使用されている Web アプリケーショ...

MySQL の 3 つの Binlog 形式の概要と分析

1つ。 Mysql Binlog フォーマットの紹介 Mysql binlog ログには、State...

Centos7 システムでの MySQL マスター スレーブ同期構成スキーム

序文最近、高可用性プロジェクトに取り組む際には、データの同期が必要になっています。ノードが 2 つし...

MySQL 圧縮パッケージ版 zip インストール設定方法

圧縮版の記事ではデータの初期化がされていないなどいくつか問題があったため、Windows にインスト...