この日記はMozillaのプロダクトへの貢献者としての私の成果を中心に、気になったバグやWeb界隈の話題について書いていますが、 断り書きがある場合を除き、いかなる団体のオフィシャルな見解ではありません。あくまでも個人的なものです。 Mozilla Foundation、Mozilla Corporation、及び関連企業の公式情報ではないことに注意してください。

現在、XHTML 1.0 (もどき)から、HTML5なコンテンツに修正中です。古い日記は修正が完了していませんので表示が崩れます。 順次、修正していく予定ですのでしばらくお待ちください。

もずはっく日記(2008年12月)

2008年12月23日

Bug 3611 マウスでフォームのセレクトを選択できない
初回投稿日時: 2008年12月23日06時27分20秒
最終更新日時: 2008年12月23日06時31分15秒
カテゴリ: Mozilla Core バグ検証中
SNS: (list)

:hover { position: relative; }という指定があるとドロップダウンリストがうまく機能しなくなるというバグです。今となってはすごく変なスタイル指定ですが、IE全盛だった頃であれば、このスタイルはa要素ぐらいにしか効かなかったので、このようなセレクタの使い方はよく見かけました。ですが、今となっては、このような間違った指定でモダンブラウザの方が苦しめられている、という訳です。未来への互換性、という点ではWebデザイナは標準仕様を常に遵守するか、コンテンツを永遠にメンテし続けないといけない、ということが分かる話ですね。

それはさておき、このバグは、マウスカーソルの下にあるCSSのボックスが異なるものになる度にそのボックスの要素をルートとしてreflowが発生してしまい、コンボボックスもドロップダウンリストも再生成されてしまうというのが原因です。これにより、初期状態、つまりドロップダウンリストが閉じた状態に戻ってしまっている訳です。

Geckoのコンボボックスのドロップダウンリストはコンボボックスが生成して所有しているオブジェクトである、というのがこのバグが発生している一番直接的な設計のマズイ点でしょうか。しかし、このへんを正直に正攻法で修正するのはちと大がかりなことになりそうに思えます。

現在提案しているパッチは、ドロップダウンがreflowによって自動的に閉じられてしまっても、reflow終了時に自動的に再度開かれるというものです。見た目は不格好ですが、ひとまず、アクセシビリティ上の問題は避けられそうです(まだいくつか修正すべき問題がありますので日程的にももうFx3.1には厳しいですが)。

大島さんの環境のようにLinuxではこれがクリティカルなアクセシビリティバグであるケースもあるようなので、本来なら無理をしてでも修正すべきなのでしょうが、正直なところ、このへんのコードには詳しくないのでコードフリーズの近いFx3.1での修正は断念した方が良いように思えます。さすがにkey hellの再現は嫌ですし。

関連するかもしれないエントリ

bug 3611を含むエントリ