* style 要素・link 要素 media 属性 (HTML, XHTML 1)
[1] [[HTML]] の [CODE(HTMLe)[[[style]]]] 要素および
[CODE(HTMLe)[[[link]]]] 要素 ([CODE(HTMLa)[[[rel]]]]
が [CODE(HTML)[[[stylesheet]]]]) の [DFN[[CODE(HTMLa)[media]] 属性]]は、
スタイル情報が対象としている[[媒体]]を指定します。
これを使って著者は UA がどの媒体でどのスタイル・シートを読込んで適用するべきかを制御できます。
[5]
[CODE(HTMLe)[style]] 要素の [CODE(HTMLa)[media]] 属性は、
その要素の内容であるスタイル・シートについて想定する媒体を記述します。
[[スタイル・シート]]への [CODE(HTMLe)[[[link]]]] では、
[CODE(HTMLa)[media]] 属性には想定する[[媒体]]を記述します。
UA は関係ない媒体用は無視して資源を節約できます。 [SUP[ [HTML 4] ]]
[4] 仕様書:
- [[HTML 4]]
-- 12.3.2 Links and external style sheets
-- [CODE(HTMLa)[media]]
-- 14.2.4 Media types
-- 14.4.1 Media-dependent cascades
- [[XHTML m12n]]
-- [CSECTION[4.3. Attribute Types]]
[[#comment]]
** 属性値
[15] この属性の値は [CODE(SGML)[%[[MediaDesc]]]]
([[媒体記述子]]の読点分離の並び) です。
[16] この属性は省略可能です。 HTML 4 [[DTD]] の既定値はありません
([CODE(SGML)[[[IMPLIED]]]])。 HTML 4 仕様書本文での既定値は
'''[CODE(HTML)[[[screen]]]]'''' です。
多くの UA や著者が既定値は [CODE(HTML)[[[all]]]] だと思っていますが、
そうではないのです。ですから、常に [CODE(HTMLa)[media]]
属性を明示しておいた方が安全です。
[[#comment]]
** 他との関係
[17] [CODE(HTMLe)[link]] 要素の場合、たとえば [CODE(HTMLa)[rel]]
が [CODE(HTMLa)[[[alternate]]]] であっても [CODE(HTMLa)[media]]
属性は有用そうに思えますが、 HTML 4 の規定による限りでは
[CODE(HTMLa)[media]] 属性はスタイル・シートを対象としたものなので、
そのような意味では使えません。
([CODE(HTMLe)[[[a]]]] 要素型で [CODE(HTMLa)[media]]
属性が定義されていないことからも、 [CODE(HTMLa)[media]]
属性がスタイル・シート専用のものであることがうかがえます。)
[DEL[
[2] [CODE(HTMLa)[[[media]]]] 属性が [CODE(HTML)[[CODE(HTMLa)[[[rel]]]]=[[stylesheet]]]]
以外の [CODE(HTMLe)[link]] 要素に対して有効なのかはっきりしません。
この属性は既定値が HTML 4 では [CODE(HTML)[[[screen]]]] なんですけど、
有効だとすると明示しない限り [CODE(HTML)[screen]] 限定の話になってしまいます。
(なお、 [[XHTML 2.0]] では既定値は [CODE(CSS)[[[all]]]] に改められます。)
[3] >>2 [CODE(HTMLe)[[[a]]]] 要素には [CODE(HTMLa)[media]] 属性は無いので、
[CODE(HTML)[stylesheet]] 専用かもしれません。でも、
[CODE(HTML)[[CODE(HTMLa)[rel]]=[[alternate]]]] とかで使うのにあると便利じゃないですか?
]DEL]
[26] [[リンク方]] [CODE(HTML)[[[alternate]]]] の定義
[SRC[XHTML m12n 4.3]] 的には一般のリンクにも
[CODE(HTMLa)[media]] 属性が適用できるように思えます。
[20] [RUBYB[段階付け] [Cascade]]は異なる媒体に適用されるスタイル・シートを含むこともできます。
UA は現在の媒体に適用されないスタイル・シートを除外することに責任があります。
[SRC[HTML 4, 14.4.1]]
[24]
HTML 4 DTD の注釈 (参考) には印刷版へのリンクで
[CODE(HTML)[rel="alternate" media="print"]]
という例が載っています。また、
DTD の注釈 (参考) の説明には
[Q[for rendering of these media]]
とだけ書いてあります。 DTD
の著者 (Dan?) 的には一般のリンク先の情報として
[CODE(HTMLa)[media]] 属性を使えるつもりだったような感じがします。
([[名無しさん]] [sage])
[[#comment]]
** 歴史
[12] [CODE(HTMLa)[media]] 属性は ''HTML DTD with support for Style Sheets''
(HTML 3.2 + Style Sheet)
で定義されています (仕様書類初出?)。
値は[[列挙型]] [CODE(SGML)[(print | screen | projection | braille | aural | all)]]
で既定値は [CODE(HTML)[all]] でした。
[14] ''HTML DTD with support for Style Sheets''
で [CODE(HTMLa)[media]] 属性は [CODE(SGML)[[[CDATA]]]] に改められ、
読点区切りで複数の値が使えるようになりました。
[25]
>>12,>>14 はいずれも [CODE(HTMLe)[style]]
要素の [CODE(HTMLa)[media]] 属性です。
([[名無しさん]] [sage])
[[#comment]]
** 実装
[23] [[UP.Browser]]/6.2 ([[EZWeb]]) には、 [CODE(HTMLa)[media]]
属性に読点区切りで複数の値が指定されている時に最初のものしか見ないというバグがあります。
また、既定値は [CODE(HTML)[all]] と解釈していると思われます。
[SRC[2ch CSS バグ辞典スレ 4 ]]
[[#comment]]
** 例
[18]
[PRE(HTML)[
]PRE]
[WEAK[(HTML 4 仕様書より)]]
この例では、発表会で投影するときには見出しを青字にし、
印刷版では中央に寄せます。
[19]
[PRE(HTML)[
]PRE]
[WEAK[(HTML 4 仕様書より)]]
この例では、音声 UA で再生する時にリンクの前後で効果音を鳴らします。
[21] [CODE(HTMLe)[link]] と [CODE(HTMLe)[style]] の混用例 [SRC[HTML 4, 14.4.1]]
[PRE(HTML)[
]PRE]
この例では、最初の3種類の外部スタイル・シートが媒体ごとに1つずつ適用され、
4つ目の [SAMP(URI)[techreport.css]] がすべての媒体に適用されます (>>22)。
更に画面と印刷では [CODE(HTMLe)[style]] も適用されます。
[22] HTML 4 仕様書 14.4.1 にはそう書いてありますが、
これは [CODE(HTMLa)[media]] 属性定義 (>>16) と矛盾します。
[27]
'''はてなアンテナの例''':
[PRE(HTML example code)[
]PRE]
([[名無しさん]] [WEAK[2006-05-21 10:40:20 +00:00]])
[[#comment]]
** メモ
[28]
[CITE[Adaptation with Style]]
([[名無しさん]] [WEAK[2006-10-18 22:21:51 +00:00]])
[[#comment]]
* メモ
[29]
[CITE[A blog? with Σαιτω - media=tv]] ([TIME[2007-02-19 21:45:07 +09:00]] 版)
([[名無しさん]] [WEAK[2007-02-19 15:23:18 +00:00]])