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

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

もずはっく日記(2010年4月)

2010年4月7日

Bug-org 183646 ::-moz-selection does not work in form controls (input[type=text], input[type=password], textarea)
初回投稿日時: 2010年04月07日12時59分10秒
カテゴリ: Mozilla Core バグ修正
SNS: (list)

input要素やtextarea要素では::-moz-selectionが適用されないというバグです。

Geckoはこれらの要素ではnative anonymousな要素を生成します。具体的には以下のようなDOMツリーが形成されます。

<input>(もしくは<textarea>)
  +- <div>
       +- text node
       +- <br>
       +- ...

これをもとにフレームを作ると

nsTextControlFrame
  +- nsBlockFrame
       +- nsTextFrame
       +- nsBRFrame
       +- ...

となっています。

::-moz-selectionは特殊で、nsTextFrameが選択されたテキストを描画する段階で直接、そのフレームのノードの::-moz-selection疑似要素のスタイルを参照しにいきます。このため、常にnative anonymousなdiv要素のスタイルを参照しに行って、スタイルが取得できていない、というのがその原因でした。もちろん、実際にはnsTextControlFrameのスタイルを参照しなくてはいけません。

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

bug-org 183646を含むエントリ