* 構文 ** 値 [15] - [CODE(CSS)@en[[[-moz-anchor-decoration]]]] - [CODE(CSS)@en[[[blink]]]] - [CODE(CSS)@en[[[double]]]] - [CODE(CSS)@en[[[inherit]]]] - [CODE(CSS)@en[[[initial]]]], [CODE(CSS)@en[[[-moz-initial]]]] - [CODE(CSS)@en[[[line-through]]]] - [CODE(CSS)@en[[[none]]]] - [CODE(CSS)@en[[[overline]]]] - [CODE(CSS)@en[[[underline]]]] - [CODE(CSS)@en[[[word]]]] * CSSOM ** スタイル・シートの CSSOM 表現 *** WinIE [9] [[WinIE 6]] は [[CSS]] で与えられた値から [[CSSOM]] に現れる値へと次のように変換するようです: = 基本的に、[[空白]][[区切り]]の [CODE(CSS)@en[[[IDENT]]]] の[[並び]]と見なします。もちろん先頭と末尾に[[空白]]があってもおkです。[[escape]] があってもおkです。[[大文字]]・[[小文字]]は区別しません ([[ASCII]]; [CODE(char)[[[U+0130]]]] はだめでした)。 = [[注釈]]は挿入できますが、前後に[[空白]]なしで[[注釈]]を使うと[[宣言]]ごと[[無視]]されます。 = [CODE(CSS)@en[[[IDENT]]]] が1つもないと[[宣言]]ごと[[無視]]されます。 = 理解する値なら何個使っても構いません。理解しない値があると[[宣言]]ごと[[無視]]されます。 = 以上で[[無視]]されていなければ、まず、 [CODE(DOMa)@en[[[textDecorationNone]]]], [CODE(DOMa)@en[[[textDecorationUnderline]]]], [CODE(DOMa)@en[[[textDecorationOverline]]]], [CODE(DOMa)@en[[[textDecorationLineThrough]]]], [CODE(DOMa)@en[[[textDecorationBlink]]]] をすべて [CODE(IDL)@en[[[false]]]] にします。 = 前から順に [CODE(CSS)@en[[[IDENT]]]] を見ていきます。それぞれ、 == 対応する[[属性]]に [CODE(IDL)@en[[[true]]]] を設定していきます。 == ただし、 [CODE(CSS)@en[[[none]]]] の場合は、それ以外の[[属性]]をすべて [CODE(CSS)@en[[[false]]]] にします。 例えば、 [CODE(CSS example)@en[[[underline]] [[none]] [[blink]] [[blink]]]] だと [CODE(DOMa)@en[[[textDecorationNone]]]] と [CODE(DOMa)@en[[[textDecorationBlink]]]] が [CODE(IDL)@en[[[true]]]]、 他は [CODE(IDL)@en[[[false]]]] になります。 ([[名無しさん]]) [10] [[WinIE 6]] では、[CODE(CSS)@en[textdecorationunderline]] という[[特性]]を [[CSS]] で与えると、なぜか4文字 ([[空白]]は含み、[[注釈]]は含まない、ただし[[特性値]]全体の最初と最後の[[空白]]は含まない) の場合 ([[宣言]]ごと[[無視]]) を除き、 [CODE(DOMa)@en[[[textDecorationUnderline]]]] が [CODE(JS)@en[[[true]]]] に設定されます。 ([[名無しさん]]) [11] [[WinIE 6]] の通常(?)の [[CSSOM]] の方の [CODE(CSS)@en[[[text-decoration]]]] の値は、 [CODE(charname)@en[[[SPACE]]]] 1個で区切られた[[小文字]]の[[escape]]なしの [CODE(CSS)@en[[[IDENT]]]] の[[並び]]になります。 対応する個別の[[属性]]が [CODE(JS)@en[[[true]]]] なら、それが追加されます。 順序は [CODE(CSS)@en[[[none]]]], [CODE(CSS)@en[[[underline]]]], [CODE(CSS)@en[[[overline]]]], [CODE(CSS)@en[[[line-through]]]], [CODE(CSS)@en[[[blink]]]] です。 対応する[[属性]]がすべて [CODE(JS)@en[[[false]]]] なら、 [[空文字列]]になります。 *** Opera [12] [[Opera]] 9 の [[CSS]]→[[CSSOM]] - [CODE(CSS)@en[[[none]]]] や [CODE(CSS)@en[[[inherit]]]] は単独でなければなりません。 そうでない場合は[[宣言]]ごと[[無視]]されます。 - それ以外の4つの値は1個以上[[空白]]区切りで並べられます。 -- 重複があっても構いません。 -- [[空白]]の代わりに[[注釈]]だけでも構いません。 - [[CSSOM]] に現れる値は、 [CODE(CSS)@en[[[underline]]]], [CODE(CSS)@en[[[overline]]]], [CODE(CSS)@en[[[line-through]]]], [CODE(CSS)@en[[[blink]]]] の順で [CODE(charname)@en[[[SPACE]]]] 1個区切りに[[正規化]]されています。 *** Firefox [13] [[Firefox]] 2 >>12 と同じですが、値は高々4つしか指定できません。それ以上あると[[宣言]]ごと[[無視]]されます。 *** Firefox [TIME[2013-09-08T10:47:52.700Z]] [410] 値は blink underline overline line-through の順序に正規化されます。 *** Chrome [TIME[2013-09-08T10:48:12.000Z]] [411] 値の順序は正規化されません。同じものを複数回指定でき、そのままでてきます。 [412] [CODE(CSS)@en[[[none]]]] が1つ目の字句だとそれ以後何があっても無視されて [CODE(CSS)@en[[[none]]]] だけになります。 ** 算出値 *** WinIE [4] [CITE@en[reading CSS textdecoration - JavaScript]] ([CODE[2008-01-02 11:02:47 +09:00]] 版) ([[名無しさん]]) [5] >>4 確かに [[WinIE 6]] では [CODE(CSS)@en[[[underline]]]] しか [CODE(DOMa)@en[[[currentStyle]]]] の [CODE(DOMa)@en[[[textDecoration]]]] からは返されない: ([[名無しさん]]) [6] >>5 [[スタイル・シート]]本体の方の [CODE(DOMa)@en[[[textDecoration]]]] からは全部返ってくるのに。もちろん [[Opera]] 9 ではどちらも返ってくるのに。 ([[名無しさん]]) [7] >>5 [[WinIE 6]] の [CODE(DOMa)@en[[[currentStyle]]]] の [CODE(DOMa)@en[[[textDecoration]]]] で返されるのは、 [CODE(CSS)@en[[[underline]]]]、[CODE(CSS)@en[[[overline]]]]、 [CODE(CSS)@en[[[line-through]]]]、[CODE(CSS)@en[[[none]]]] の順で最初に適用されるもののようです (どれもなければ [CODE(CSS)@en[[[none]]]])。 [CODE(CSS)@en[[[blink]]]] は [[CSSOM]] 上にあっても無視されるようです。 ([[名無しさん]]) [8] [[WinIE 6]] の [CODE(DOMa)@en[[[textDecorationUnderline]]]] などの個別の[[属性]]は [CODE(DOMa)@en[[[currentStyle]]]] の方には存在していないようです ([CODE(JS)@en[[[undefined]]]])。 * 実装 ** 下線のレンダリング [3] [CITE@ja[text-decoration周りのバグ:メモランダム]] ([CODE[2007-04-12 17:17:48 +09:00]] 版) ([[名無しさん]] [WEAK[2007-04-12 13:18:50 +00:00]]) ;; [405] [TIME[2009-03-20T04:58:52.00Z]] 現在 [CODE(HTTP)[[[404]]]] ですが、 [CITE@ja[はてなブックマーク - text-decoration周りのバグ:メモランダム]] ([TIME[2009-03-20 13:58:35 +09:00]] 版) によると >Firefox2でfirst-letter疑似要素にtext-decoration:underlineを指定すると下線の位置がおかしい。IE7でfirst-letter疑似要素にtext-decoration:noneを指定すると下線が消える。 ** 端末におけるレンダリング [14] [CITE@en[GNU `gettext' utilities]] ([TIME[2009-03-20 11:59:11 +09:00]] 版) >This property is supported, limited to the values [CODE(CSS)@en[[[none]]]] and [CODE(CSS)@en[[[underline]]]]. ;; [CODE@en[[[msgcat]]]] [[命令]]。 ** XFA における実装 [2] [[XFA]] 2.4 948頁 > This attribute is defined as: [PRE(CSS code)[ text-decoration:decorationStyle [ line-through ] ]PRE] or [PRE(CSS code)[ text-decoration: line-through [ decorationStyle ] ]PRE] > The following table describes the decorationStyle values. > ,decorationStyle ,underline ,Single continuous underline ,word ,Single underline that breaks at word boundaries ,double ,Double continuous underline ,double word ,Double underline that breaks at word boundaries > Note that double word has whitespace between the words, not a hyphen. * 例 [1] [PRE(CSS example code)[ text-decoration: [[underline]] [[-moz-anchor-decoration]]; ]PRE] [406] [CITE@en[CSS Text Decoration Module Level 3]] ( ([TIME[2012-11-13 21:54:51 +09:00]] 版)) [407] [CITE@en[CSS Text Decoration Module Level 3]] ( ([TIME[2013-01-03 03:59:46 +09:00]] 版)) [408] [CITE@en-US[» CSS Level 3 Text Decoration on WebKit and Blink – status Bruno Abinader's Blog]] ( ([TIME[2013-05-19 10:31:46 +09:00]] 版)) [409] [CITE@en[CSS Text Decoration Module Level 3]] ( ([TIME[2013-08-02 01:28:27 +09:00]] 版))