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と相談してみます。