
* 構文

** 値

[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]] 版) <http://www.thescripts.com/forum/thread89231.html>
([[名無しさん]])

[5]
>>4 確かに [[WinIE 6]] では [CODE(CSS)@en[[[underline]]]] しか [CODE(DOMa)@en[[[currentStyle]]]] の
[CODE(DOMa)@en[[[textDecoration]]]] からは返されない:
<http://suika.fam.cx/gate/2007/cssom/viewer?c=p%20%7B%0D%0A%20%20text-decoration%3A%20overline%20underline%3B%0D%0A%7D%0D%0A;h=%3Cp%20onclick%3D%22%0D%0A%20%20w%20(this.currentStyle.textDecoration)%3B%0D%0A%22%3EClick%20this%20paragraph%20to%20show%20the%20computed%20(%3F)%20value%20of%20the%20'%3Ccode%3Etext-decoration%3C%2Fcode%3E'%20property.%0D%0A;p=n;x=style-element>

([[名無しさん]])

[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]] 版) <http://mynotes.jp/blog/2007/04/text_decoration_bug>
([[名無しさん]] [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]] 版) <http://b.hatena.ne.jp/entry/http://mynotes.jp/blog/2007/04/text_decoration_bug>
によると
>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]] 版) <http://www.gnu.org/software/gettext/manual/gettext.html#Style-rules>

>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]] 版))
<http://www.w3.org/TR/2012/WD-css-text-decor-3-20121113/>

[407] [CITE@en[CSS Text Decoration Module Level 3]]
( ([TIME[2013-01-03 03:59:46 +09:00]] 版))
<http://www.w3.org/TR/2013/WD-css-text-decor-3-20130103/>

[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]] 版))
<http://www.abinader.com.br/2013/05/15/css-level-3-text-decoration-on-webkit-and-blink-status/>

[409] [CITE@en[CSS Text Decoration Module Level 3]]
( ([TIME[2013-08-02 01:28:27 +09:00]] 版))
<http://www.w3.org/TR/2013/CR-css-text-decor-3-20130801/>

[16] [CITE@en[1122897 – text-decoration is propagated to absolutely positioned and floated descendants in quirks mode]]
([TIME[2015-01-21 11:55:52 +09:00]] 版)
<https://bugzilla.mozilla.org/show_bug.cgi?id=1122897>

[17] [CITE@en['''['''css-text-decor-4''']''' Floor thickness at 1 device pixel]]
([[fantasai]]著, [TIME[2016-12-26 16:07:24 +09:00]])
<https://github.com/w3c/csswg-drafts/commit/82bf345b88eb90881bdf7c4f5a3d190638a9ee25>

[18] [CITE@en[CSS Text Decoration Module Level 4]]
([TIME[2018-03-13 04:00:27 +09:00]])
<https://www.w3.org/TR/2018/WD-css-text-decor-4-20180313/>

[19] [CITE@en['''['''css-text-decor-3''']''' Add U+2053 SWUNG DASH to list of Po exceptions, pe…]]
([[fantasai]]著, [TIME[2018-05-21 03:42:15 +09:00]])
<https://github.com/w3c/csswg-drafts/commit/830f5e53ef35b94f50a6ba38e8485096e5a992be>