Google Chrome は Flexbox ビューポートを使用して展開方向を固定します
P粉852578075
P粉852578075 2023-08-25 17:44:46
0
1
605
<p>Google Chrome で、<code>スペース</code Expand/collapse> または <em>隣接</em> Flex アイテムを持つ Flexbox コンテナ内に要素を配置すると問題が発生します。 code>center</code> ビューポートに対してコンテンツをさまざまな方向に揃えます。 </p> <p>Firefox、IE11、Edge、または Safari では、要素は常に下に展開されるため、これは問題になりません。 </p> <p>興味があります:</p>
    <li>Chrome は特定の仕様に従って動作しますか?もしそうなら、どれですか? </li> <li>そうでない場合、なぜ Chrome でそれを行うのでしょうか? (私見ですが、画面外にランダムに消えるトリガーをクリックするのはひどいユーザー エクスペリエンスです。) </li> <li>何らかの方法で Chrome の動作を変更または無効にすることはできますか?例えば。 CSS またはメタタグ経由ですか? </li> </ul> <p><strong>更新 1: 可能であれば、Chromium 開発者からの洞察/説明を求めるために、Chrome バグ トラッカーに問題 #739860 を送信しました。 </strong></p> <時間> <p>2 つの例を以下に挿入します。問題を説明する完全なテスト スイートは、このペンで見つけることができます: https://codepen.io/jameswilson/full/xrpRPg/ この例では、展開/折り畳みの動きがアニメーション化されて目を引くように、 SlipToggle を使用することにしました。同じ動作が詳細タブでも発生しますが、クロスブラウザーはまだサポートされておらず、展開/折りたたみがあまりにも不安定です。</p> <p><strong>例 1:Chrome 针对齐 Flexbox 間の空格の展示/折叠行は</strong></p> <p> <pre class="brush:js;toolbar:false;">$('button').click(function() { $(this).next().slideToggle(); })</pre> <pre class="brush:css;toolbar:false;">body { マージン: 30px; フォントファミリー: サンセリフ; } それはさておき、 ディビジョンはさておき、 まとめ、 主要、 ボタン、 詳細ページ、 ボタンP { 背景: rgba(0,0,0,.09); 境界線: なし。 パディング: 20px; マージン: 0; } .flexcontainer { ディスプレイ: フレックス; } 脇に{ フレックス: 1; 位置: 相対的; 最大幅: 25%; 背景: ミントクリーム。 ディスプレイ: フレックス; フレックス方向: 列; 位置: 相対的; } 脇に.スペース{ コンテンツの位置揃え: 間のスペース; } 余談.センター { コンテンツの位置揃え: 中央; } 主要 { フレックス: 3; 位置: 相対的; 最大幅: 75%; 背景: アリスブルー; 垂直配置: 上; 高さ: 100%; } メイン > * * { マージントップ: 20px; } ボタンP { 表示: なし。 }</pre> <pre class="brush:html;toolbar:false;"><script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"> ;</スクリプト> <セクションクラス="フレックスコンテナ"> <aside class="space-between"> <div>上部サイドバー</div> <div>下部サイドバー</div> </余談> <メイン> <div> <button>slideToggle</button> <p>その他のブラウザ: 常に下に展開されます。<br> Chrome: トップサイドバーは常に表示されるため、常に下に展開する必要があります。</p> </div> <div> <button>slideToggle (通常は下に展開します)</button> <p>その他のブラウザ: 常に下に展開されます。<br> Chrome: 下部サイドバーと上部サイドバーの両方が表示されている間、下に展開する必要があります。ただし、トップサイドバーが画面外になるまで下にスクロールすると、上に拡大されます。</p> </div> <div> <button>slideToggle (通常は下に展開します)</button> <p>その他のブラウザ: 常に下に展開されます。<br> Chrome: 下部サイドバーと上部サイドバーの両方が表示されている間、下に展開する必要があります。ただし、トップサイドバーが画面外になるまで下にスクロールすると、上に拡大されます。</p> </div> </メイン> </section></pre> </p> <p><strong>例 2:Chrome 对居中对齐の Flexbox の展示/折叠行は</strong></p> <p> <pre class="brush:js;toolbar:false;">$('button').click(function() { $(this).next().slideToggle(); })</pre> <pre class="brush:css;toolbar:false;">body { マージン: 30px; フォントファミリー: サンセリフ; } それはさておき、 ディビジョンはさておき、 まとめ、 主要、 ボタン、 詳細ページ、 ボタンP { 背景: rgba(0,0,0,.09); 境界線: なし。 パディング: 20px; マージン: 0; } .flexcontainer { ディスプレイ: フレックス; } 脇に{ フレックス: 1; 位置: 相対的; 最大幅: 25%; 背景: ミントクリーム。 ディスプレイ: フレックス; フレックス方向: 列; 位置: 相対的; } 脇に.スペース{ コンテンツの位置揃え: 間のスペース; } 余談.センター { コンテンツの位置揃え: 中央; } 主要 { フレックス: 3; 位置: 相対的; 最大幅: 75%; 背景: アリスブルー; 垂直配置: 上; 高さ: 100%; } メイン > * * { マージントップ: 20px; } ボタンP { 表示: なし。 }</pre> <pre class="brush:html;toolbar:false;"><script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"> ;</スクリプト> <セクションクラス="フレックスコンテナ"> <aside class="center"> <div>中央サイドバー</div> </余談> <メイン> <div> <button>slideToggle (通常は下に展開します)</button> <p>その他のブラウザ: 常に下に展開されます。<br> クロム:通常は下に展開します。コンテナの上端がビューポートからスクロールアウトすると、両方向に展開されます。</p> </div> <div> <button>slideToggle</button> <p>その他のブラウザ: 常に下に展開されます。<br> クロム:通常は下に展開します。コンテナの上端がビューポートからスクロールアウトすると、両方向に展開されます。</p> </div> <div> <button>slideToggle (通常は下に展開します)</button> <p>その他のブラウザ: 常に下に展開されます。<br> クロム:通常は下に展開します。コンテナの上端がビューポートの外にスクロールすると両方向に拡大しますが、中央のサイドバーがスクロールしてビューポートの外に出ると再び下方向に拡大を再開します。</p> </div> </メイン> </section></pre> </p>
P粉852578075
P粉852578075

全員に返信(1)
P粉283559033

このコードを Flex コンテナに追加します:

  • オーバーフロー アンカー: なし

これにより、ボックスが上に拡張される「スクロール アンカー」と呼ばれる Chrome の機能が無効になります (改訂されたコード ペン )。


Chrome では、展開可能なボックスの上下方向は、レイアウト自体ではなく、ビューポート内のスクロール位置によって決まります。

ユーザー エクスペリエンスを向上させるために、Chrome はこの動作に対して独自のアプローチを採用しています。

基本的に、DOM 要素を現在のスクロール位置にバインドします。画面上のこの特定の (「アンカー」) 要素の移動により、スクロール位置 (存在する場合) の調整が決定されます。

彼らはこの方法を「スクロール アンカリング」と呼んでいます。アルゴリズムはこのページで説明されています。 https://github.com/WICG/ScrollAnchoring/blob/master/explainer.md

この動作は現時点では Chrome に固有のものですが、Google は標準化を推進しています。

スクロール アンカーのドキュメントによると、適切な要素に overflow-anchor: none を適用すると、スクロール アンカーの調整が無効になります。

###詳しくは:###

    https://github.com/WICG/ScrollAnchoring/blob/master/interpreter.md
  • https://bugs.chromium.org/p/chromium/issues/details? id=739860
  • https://hacks.mozilla.org/2019 /03/scroll-anchoring-in-firefox-66/
  • CSS フレックス順序を変更するとスクロールが発生する
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート