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:
Tweet (list)
fantasaiからの指摘で発覚したバグで、-moz-text-decoration-colorと-moz-text-decoration-styleはtext-decorationを後から指定した場合にリセットすべきだ、というものです。
CSS3では、text-decorationはロングハンドから、ショートハンドに変更され、text-decoration-lineプロパティ、text-decoration-styleプロパティ、text-decoration-colorプロパティ、それからblink値が列挙されることになります。このため、これらのサブプロパティの値は全て、text-decoration: underline;といった指定があった場合にリセットされなくてはいけません。この修正が間に合わなかったのが、Firefox 5からはバックアウトされた理由です。
このバグの修正で、-moz-text-decoration-lineを実装しました。ただし、値は、underline、overline、line-throughのみで、cancel-*は実装していません。これらの値はCSS 2.1に準拠したtext-decorationの描画を実装しなくては不可能だからです(GeckoもWebKitもCSS2準拠で、CSS2.1の描画方法にはまだ未対応)。
また、blink値をショートハンドプロパティに直接指定する、というイレギュラーな仕様はそのままではGeckoは実装できないので、既にCSS3では没になったプロパティをそのままプレフィックス付きで実装しました。-moz-text-blinkで、noneとblinkをその値にとります。
つまり、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 none、text-decoration: none blink等といった、none指定時に他の値がある場合には引き続き、無効な値として扱っています。つまり、Webデザイナから見れば、text-decorationは引き続き、-moz-text-decoration-lineと、-moz-text-blinkのショートハンドプロパティには見えません。
最後に、getComputedStyle()を利用してtext-decorationの算出値を取得する場合、本来であればショートハンドプロパティは常に空の文字列を返すべきなのですが、互換性のために今までと同じように、underline、overline、line-through、blinkの組み合わせか、noneを返します。これは明確な仕様違反ですが、おそらく、仕様の方が変更になるのではないかと思います。ただし、
-moz-text-decoration-styleや、-moz-text-decoration-colorを使用し、初期値とは異なる値が指定されていた場合、その作者はCSS3のtext-decorationを理解していることになりますので、この場合には算出値は仕様通り、空の文字列を返すことになります。
最後の一文は、serializeの部分の動作の仕様でした。ただ、懸念があるのでdbaronと相談してみます。