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

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

背景

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

文章

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

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

<入力
  // ...
  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 デザイン コンセプトの完全分析 (画像)

推薦する

この記事では、Vueのフロントエンドページングとバックエンドページングを実装する方法を説明します。

目次1: フロントエンドの手書きページング(データ量が少ない場合) 2: バックエンドのページング、...

Vueカスタムコンポーネントはイベント修飾子を使用してピットレコードを踏む

序文今日、自作のコンポーネントを使っていたところ、突然、長い間忘れていたバブリングイベントに遭遇しま...

Ubuntu での MySQL および MySQL Workbench のインストール チュートリアル

Ubuntu に jdk をインストールする: [リンク] UbuntuにEclipseをインストー...

Ubuntu 20.04の新バージョンでルートユーザーを使用してシステムにログインする方法の詳細なチュートリアル

Ubuntu 20.04 では、デフォルトで root ログインが有効になっていないため、デスクトッ...

Pure CSS3はdivの出入りを順番に実現します

この記事は主に、純粋な CSS3 を使用して div が順番に出入りする効果を紹介します。一定の参考...

Vue で webSocket を使用してリアルタイムの天気を更新する方法

目次序文webSocket の操作と例について:ウェブソケット1. webSocketについて2. ...

vue3.0+echarts は 3 次元の縦棒グラフを実現します

序文: Vue3.0はechartsの3次元縦棒グラフを実装します結果: 実装手順: 1. echa...

CSS3 で translate と transition を使用する方法

translate と transition は非常に強力で、習得するのは不可能だといつも感じていま...

MySQL 5.7 および 8.0 データベースのルート パスワードを忘れた場合の解決策

注: MySQL5.7 で root パスワードをクラックするには、パスワード認証をスキップしてデー...

JSが絵柄デジタル時計を実現

この記事の例では、画像デジタル時計を実現するためのJSの具体的なコードを参考までに共有しています。具...

DockerとDocker-Composeの使用例

Docker は、アプリケーションをより速く配信するのに役立つオープンソースのコンテナ エンジンです...

ウェブサイトのコンテンツの100~1%はナビゲーションである

ウェブサイトでは、コンテンツの(100-1)%がナビゲーションです1. ジェシー・ジェームズ・ギャレ...

単一選択折りたたみメニュー機能を実現するCSS

前回の「最もシンプルなスイッチを実現するCSS」のように、HTML5とCSS3でほとんどの機能をすで...

Vue は動的なプログレスバー効果を実現します

この記事では、動的なプログレスバー効果を実現するためのVueの具体的なコードを例として紹介します。具...

Vueでミックスインを使用する方法

目次序文使い方要約する序文Vue にはコードの再利用に使われる mixins という設定項目がありま...