Chrome 145のスクロール挙動変更に対応

shoelace-style/webawesome

Chrome 145で導入された新機能により、<wa-dropdown>要素のフォーカス時に意図しないドキュメントスクロールが発生する問題が修正されました。この変更は、focus()メソッドにpreventScrollオプションを追加することで、Floating UIによる既存のスクロール管理を維持しています。

背景

Chrome 145ではスクロール動作に関する新機能が導入されました。この変更により、ドロップダウンメニュー内の項目にフォーカスが移動する際に、ブラウザがその要素を可視領域に表示しようとして自動的にスクロールする動作が発生するようになりました。

WebAwesomeのドロップダウンコンポーネントはFloating UIを使用してポップアップの位置とスクロールを管理していますが、Chrome 145の新しいスクロール動作がこれと競合し、意図しないスクロールが発生していました。#2075はこの競合を解消しています。

技術的な変更

focus()メソッドの呼び出しに{ preventScroll: true }オプションが追加されました。この変更はdropdown.tsに7箇所、dropdown-item.tsに1箇所の計8箇所に適用されています。

変更前:

const items = this.getItems();
if (items.length > 0) {
  items.forEach((item, index) => (item.active = index === 0));
  items[0].focus();
}

変更後:

const items = this.getItems();
if (items.length > 0) {
  items.forEach((item, index) => (item.active = index === 0));
  items[0].focus({ preventScroll: true });
}

主な変更箇所は以下の通りです:

  • ドロップダウン表示時の初期フォーカス設定
  • キーボード操作(Escape、Arrow、Home/End)によるフォーカス移動
  • サブメニューの開閉に伴うフォーカス移動
  • トリガー要素へのフォーカス復帰

これらすべてのケースでpreventScrollオプションが追加され、ブラウザによる自動スクロールが抑制されるようになりました。

設計判断

すべてのfocus()呼び出しに一律でpreventScrollを適用する方式が採用されました。

Chrome固有の問題ではありますが、条件分岐によるブラウザ判定は行わず、すべてのブラウザで統一的にスクロールを無効化しています。これは、Floating UIがすでにポップアップの配置とスクロール管理を担っているため、ブラウザの自動スクロールが不要であるという前提に基づいています。

preventScrollオプションはWeb標準のFocusOptionsインターフェースの一部であり、Chrome以外のブラウザでも広くサポートされています。ブラウザ判定を避けることで、将来的に他のブラウザで同様の挙動が導入された場合にも対応できる設計になっています。

まとめ

本PRは、Chrome 145の新機能によるスクロール動作の変更に対し、focus()メソッドにpreventScrollオプションを追加することで対応した変更です。Floating UIによる既存のスクロール管理を維持しながら、ブラウザの自動スクロールを抑制することで、意図しないスクロール動作を防いでいます。ブラウザ判定を避けた汎用的な解決策により、将来の互換性も確保されています。

記事メタデータ

Generated by:
Claude Sonnet 4.5 for DiffDaily

この記事はAIによって自動生成されています。内容の正確性については、必ずソースコードやPRを確認してください。

品質レビュー結果

Review Status:
リトライ後承認
Review Count:
2回 (改善を経て承認)
Reviewed by:
Gemini 2.5 Pro for DiffDaily

Review Criteria:

記事構成 ✓ PASS

Title, Context, Technical Detailの存在と明確さ

「総論→各論→結論」の3部構成が記事全体と各セクションで明確に適用されており、リード文、背景、技術詳細、設計判断、まとめの各要素が適切に配置されています。

カスタムMarkdown構文 ✓ PASS

シンタックスハイライト・GitHubリンク記法の正確性

ファイル名付きシンタックスハイライト(```typescript:path/to/file.ts)とPR番号のリンク記法([#2075](URL))が正しく使用されています。

対象読者への適合性 ✓ PASS

エンジニア向けの適切な技術レベルと表現

focus()メソッドのオプションやFloating UIといった具体的な技術に言及しており、専門知識を持つエンジニアという対象読者に適した内容です。

パラグラフ・ライティング ✓ PASS

トピックセンテンス・1段落1トピック・段落長

各セクションが総論→各論の構成になっており、各段落はトピックセンテンスで始まるなど、パラグラフ・ライティングの原則が守られており、非常に読みやすいです。

Diff内容との照合 ✓ PASS

コードブロックとDiff内容の一致

引用されているコード例はDiffの内容と完全に一致しています。また、「dropdown.tsに7箇所、dropdown-item.tsに1箇所の計8箇所」という変更箇所の数もDiffと正確に合致しています。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

`preventScroll`、`Floating UI`、`FocusOptions`などの技術用語が正確かつ適切な文脈で使用されています。

説明の技術的正確性 ✓ PASS

技術的主張の正確性と論理性

Chrome 145の変更が原因でスクロールの問題が発生し、それを`preventScroll`オプションで解決したという説明は、技術的に正確で論理的です。

事実の突合 ✓ PASS

PR情報による主張の裏付け(ハルシネーション検出)

記事内の主張はすべてPRのDescriptionやDiffの内容によって裏付けられています。「設計判断」セクションはコードの変更内容から論理的に導出されたもので、ハルシネーションは見られません。

数値・固有名詞の確認 ✓ PASS

PR番号・コミットID・バージョン等の正確性

PR番号(#2075)、バージョン番号(Chrome 145)、変更ファイル数(7+1=8箇所)など、すべての数値と固有名詞が正確です。

タイトル・説明との一致 ✓ PASS

記事タイトル・説明とPR内容の一致

記事のタイトル「Chrome 145のスクロール挙動変更に対応」は、PRのタイトル「Fix dropdown scroll bug in Chrome 145」の内容を的確に要約しています。

外部知識の正確性 ⚠ WARNING

PRに記載のない外部知識(LTS、サポート状況など)の不使用

「`preventScroll`オプションはWeb標準...」という記述はPRに明記されていない外部知識ですが、設計判断を補強する技術的に自明な情報であり、捏造ではありません。

時間表現の正確性 ✓ PASS

時間表現がPR情報と一致しているか

「導入されました」「発生していました」など、PRの変更内容を反映した時間表現が正確に使用されています。