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

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

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

2011年4月24日

Bug-org 647421 -moz-text-decoration-color and -moz-text-decoration-style should be reset by text-decoration
初回投稿日時: 2011年04月24日08時38分10秒
最終更新日時: 2011年04月24日23時08分22秒
カテゴリ: Mozilla Core Mozilla6 バグ修正
SNS: (list)

fantasaiからの指摘で発覚したバグで、-moz-text-decoration-color-moz-text-decoration-styletext-decorationを後から指定した場合にリセットすべきだ、というものです。

CSS3では、text-decorationはロングハンドから、ショートハンドに変更され、text-decoration-lineプロパティ、text-decoration-styleプロパティ、text-decoration-colorプロパティ、それからblinkが列挙されることになります。このため、これらのサブプロパティの値は全て、text-decoration: underline;といった指定があった場合にリセットされなくてはいけません。この修正が間に合わなかったのが、Firefox 5からはバックアウトされた理由です。

このバグの修正で、-moz-text-decoration-lineを実装しました。ただし、値は、underlineoverlineline-throughのみで、cancel-*は実装していません。これらの値はCSS 2.1に準拠したtext-decorationの描画を実装しなくては不可能だからです(GeckoもWebKitもCSS2準拠で、CSS2.1の描画方法にはまだ未対応)。

また、blink値をショートハンドプロパティに直接指定する、というイレギュラーな仕様はそのままではGeckoは実装できないので、既にCSS3では没になったプロパティをそのままプレフィックス付きで実装しました。-moz-text-blinkで、noneblinkをその値にとります。

つまり、text-decorationプロパティはGeckoでは、-moz-text-decoration-line-moz-text-decoration-style-moz-text-decoration-color、そして-moz-text-blinkのショートハンドプロパティになりました。

ただし、いくつか、仕様に反した挙動をとることで他のブラウザとの互換性を維持しているので、安心してください。

まず、text-decorationは、-moz-text-decoration-style-moz-text-decoration-colorの値を指定していても無視します。というか、指定されていると不正な値と見なし、その宣言自体が無かったことになります。バグのサマリにあるように、単にこれらの値はtext-decorationプロパティの宣言があると、その時点で一旦リセットされるだけです。

次に、text-decoration: none noneや、text-decoration: underline nonetext-decoration: none blink等といった、none指定時に他の値がある場合には引き続き、無効な値として扱っています。つまり、Webデザイナから見れば、text-decorationは引き続き、-moz-text-decoration-lineと、-moz-text-blinkのショートハンドプロパティには見えません

最後に、getComputedStyle()を利用してtext-decorationの算出値を取得する場合、本来であればショートハンドプロパティは常に空の文字列を返すべきなのですが、互換性のために今までと同じように、underlineoverlineline-throughblinkの組み合わせか、noneを返します。これは明確な仕様違反ですが、おそらく、仕様の方が変更になるのではないかと思います。ただし-moz-text-decoration-styleや、-moz-text-decoration-colorを使用し、初期値とは異なる値が指定されていた場合、その作者はCSS3のtext-decorationを理解していることになりますので、この場合には算出値は仕様通り、空の文字列を返すことになります。

最後の一文は、serializeの部分の動作の仕様でした。ただ、懸念があるのでdbaronと相談してみます。

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

bug-org 647421を含むエントリ