スクロールバーがスペースを占有することで発生するバグを修正しました

スクロールバーがスペースを占有することで発生するバグを修正しました

背景

このバグは滾動條占據空間ことで発生していました。いくつかの情報を確認して、ようやく解決しました。ちなみに、このプロパティを調べて要約を作成し、皆さんと共有しました。

文章

昨日、テスターから問題が報告されました。聚焦提示偏了現象です。以下のように修正します。

最初は赤いボックスの位置が間違っていると思ったので、コードを探しました。

<入力
  // ...
  onFocus={() => setFocusedInputName('guidePrice')}
  onBlur={() => setFocusedInputName('')}
/>

<表
  データフォーカス列={focusedInputName}
  // ...
/>

コードに問題はなく、手動で設定されておらず、私、別の同僚、および PM の PC で正常に動作します。

当初の判断では、赤枠の位置決済に差があり、その差は17pxほどですが、この差はどのようにして生じたのでしょうか?

テスターの PC に行って、細かい点に気づきました。私の PC では、スクロール バーが停止していました。

彼の PC では、スクロール バーがスペースを占有しています。

彼は自分のコンピューター上で、元のoverscroll-y: scroll overscroll-y: overlay問題は解決しました。

したがって、滾動條占據空間ことがバグの原因であると判断されます。

オーバースクロール-y: オーバーレイ

overflow CSS プロパティは、要素のコンテンツが大きすぎてブロック書式設定コンテキストに収まらない場合に何を行うかを定義します。これは、overflow-x および overflow-y の短縮プロパティです。

/* デフォルト値。コンテンツは切り取られず、要素ボックスの外側にレンダリングされます*/
オーバーフロー: 表示可能;

/* コンテンツは切り取られ、残りのコンテンツは表示されなくなります */
オーバーフロー: 非表示;

/* コンテンツは切り詰められ、ブラウザには残りのコンテンツを表示するためのスクロールバーが表示されます */
オーバーフロー: スクロール;

/* ブラウザによって決定されますが、コンテンツがクリップされている場合は、スクロールバーが表示されます */
オーバーフロー:自動;

/* オーバーフロー属性値が親要素から継承されることを指定します*/
オーバーフロー: 継承;

公式の説明:

overlay autoと同じように動作しますが、スクロールバーはスペースを占有するのではなく、コンテンツの上に描画されます。 WebKit ベース ( Safariなど) および Blink ベース ( ChromeOperaなど) のブラウザでのみサポートされます。

パフォーマンス:

html{
  overflow-y: オーバーレイ;
}

互換性

caniuse でこのプロパティの互換性を見つけられなかったのですが、誰かが次のような質問も出しました:

問題のシナリオと解決策

1. 外側のコンテナのスクロールバー

ここでの外部コンテナーは、最も外側のレイヤーに直接追加される HTML を指します。

html{
  overflow-y: スクロール;
}

この機能を手動で追加すると、スクロール幅のスペースが常に占有されます。

デメリット: スクロールしていないときでもスクロールバーが表示されるので、あまり美しくありません。

利点: 便利、互換性の問題なし。

2. 外部コンテナ絶対位置決め方式

絶対配置を使用すると、本体の幅が常に完全なスペースを維持することが保証されます。

html{
  overflow-y: scroll; // ie8 と互換性あり、サポートされていません: root、vw
}

:根 {
  オーバーフロー-y: 自動;
  オーバーフロー-x:非表示;
}

:ルート本体{
  位置: 絶対;
}

体 {
  幅:100vw;
  オーバーフロー: 非表示;
}

3. 内部コンテナの互換性

.ラッパー{
    overflow-y: scroll; // フォールバック
    overflow-y: オーバーレイ;
}

要約する

個人的には、 overlayを使用し、バックアップとしてスクロールを使用することをお勧めします。

以上が内容のすべてです。皆さんの励みになれば幸いです。

記事に誤りがありましたら、コメント欄にてご指摘いただければ幸いです。

参考文献

https://developer.mozilla.org/zh-CN/docs/Web/CSS/オーバーフロー

https://github.com/Fyrd/caniuse/issues/4027

スクロールバーがスペースを占有することで発生するバグの修正に関するこの記事はこれで終わりです。スクロールバーがスペースを占有することで発生するバグの詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

<<:  JavaScriptとTypeScriptの関係

>>:  Web デザイン体験: 5 つの優れた Web デザイン コンセプトの完全分析 (画像)

推薦する

サーバー間のファイル バックアップ ソリューション、サーバー ファイルを別のサーバーに自動的にバックアップする方法は?

多くの組織ではファイル サーバーをバックアップする必要があり、あるサーバーから別のファイル サーバー...

MySQL ユーザーのホスト属性を素早く変更する方法

MySQL にリモートでログインする場合、使用するアカウントには特別な要件があります。アカウントのデ...

MySQL における ESCAPE キーワードの使用法の詳細な説明

MySQL エスケープエスケープとは、エスケープ文字の本来の意味を意味します。エスケープ文字の目的は...

MySQLカスタム変数の概念と特徴

MySQL カスタム値は、値を保存するための一時的なコンテナです。サーバーへの接続がアクティブである...

Vueダイナミックフォームの詳細な応用

概要バックグラウンド管理システムには多くのフォーム要件があります。データをjson 形式で書き込み、...

nginx が複数のプロキシ層を通過して実際の送信元 IP を取得するプロセスの詳細な説明

質問Nginx は $remote_addr を実際の IP アドレスとして受け取りますが、実際には...

Mysql WorkBench のインストールと設定のグラフィックチュートリアル

この記事では、Mysql WorkBenchのインストールと設定のグラフィックチュートリアルを参考ま...

MySQL Innodbインデックスの原理の詳細な説明

導入振り返ってみると、4年前、私がMySQLのインデックスについて学んでいたとき、先生はインデックス...

JSはマップを使用してdouble配列を統合します

目次序文データのシミュレーション結合されたデータ合併のアイデアコードの表示と分析最初のステップステッ...

CSS3 Flex エラスティックレイアウトのサンプルコードの詳細な説明

1. 基本概念 //任意のコンテナを Flex レイアウトとして指定できます。 。箱{ ディスプレイ...

MySQL 完全崩壊: クエリフィルタ条件の詳細な説明

概要実際のビジネス シナリオ アプリケーションでは、ビジネス条件に基づいて対象データを取得およびフィ...

Nginx 仮想ホストを構成する 3 つの方法 (ドメイン名に基づく)

Nginx は、IP ベースの仮想ホスト構成、ポート ベースの仮想ホスト構成、ドメイン名ベースの仮...

Vue の動的メニュー、動的ルートの読み込みと更新の落とし穴

目次必要:アイデア:レッスン:テキストを共有する:要約する必要:インターフェイスからサブメニュー デ...

MySQLパスワード変更例の詳細な説明

MySQLパスワード変更例の詳細な説明長い間 MySQL を使用していませんでした。今日、MySQL...