XML 文書に対するスタイルシートは、 XSL (FO + XSLT) によって実現されるべきですが、ここでは CSS だけを考えます。
contents
セレクタの要素名、属性名などを小文字にする事以外は今までと変わらない。ただし、 style 内でのコメント・アウトは、完全に無視され得、全く働かないかもしれない。
コメントアウトをどうしても用いなければならないような場合は、外部スタイルシートを用いなければならない。
外部スタイルシートの場合も HTML 4 に従うが、その導入方法に変化がある。XML 文書にスタイルシートを適用するための xml-stylesheet 処理命令 (Processing Instruction, PI) が、それに代わる。
link 要素と、それに対応する xml-stylesheet 処理命令
<link rel="stylesheet" href="atomic.css" type="text/css" /> <?xml-stylesheet href="atomic.css" type="text/css"?>
HTML として解釈される場合に備えて、 link 要素も併せて記述しておく。空要素である link 要素の末尾が /> となっていることに注意しよう。
xml-stylesheet 処理命令は、 XML 文書のプロローグ部分にしか記述できない。 DTD 宣言の直後が良いだろう。
<?xml version="1.0" encoding="ISO-2022-JP"?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<?xml-stylesheet href="atomic.css" type="text/css"?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<title>XHTMLとは何だろうか</title>
<meta http-equiv="Content-type"
content='text/html; charset="ISO-2022-JP"' />
<link rel="stylesheet" href="atomic.css" type="text/css" />
</head>
<body>
<p>Hello World!</p>
</body>
</html>
復習すると、まず XML 宣言から始まり、次に、 XML 文書型宣言が続く。それに続くのが、 xml-stylesheet 処理命令。これに、 html 要素の開始タグが続き、ここで 名前空間が指定されている。
xml-stylesheet 処理命令 (PI) では、 XSL (Extensible StyleSheet Language) を指定すべきでしょうが、ここでは CSS を用います。 XML 文書として解釈された時に、 HTML 文書と同様の表示を求めれば、 XSL Transformations (XSLT) を利用する必要が有ります。
HTML 4 では、複数の外部スタイルシートを一つの文書に関連付けられる用になっていたが、 XHTML 1.0 でも全く同様である。
そのため、まずは HTML の復習から始めよう。
HMTL 4 で指定できるスタイルシートには、複数の固定スタイルシート (persistent style sheets) と、複数の代替スタイルシート (alternate style sheets) が有る。代替スタイルシートのうちで一つを優先スタイルシート (preferred style sheet) に指定できる。
著者による優先スタイルシートと、代替スタイルシートを、閲覧者は選択出来ることになっている;
固定スタイルシート;
<link rel="stylesheet" href="atomic.css" type="text/css" />
優先スタイルシート;
<link rel="stylesheet"
title="cool" href="cool.css" type="text/css" />
代替スタイルシート;
<link rel="alternate stylesheet"
title="cool" href="acoustic.css" type="text/css" />
HTML 4 での外部スタイルシートの link 要素の例だが、 XHTML の為にタグの末尾が /> にした。
rel 属性の値が stylesheet で、 title 属性は指定しない。rel 属性の値が stylesheet で、 title 属性を指定する。rel 属性の値が alternate stylesheet で、 title 属性を指定する。閲覧者が、外部スタイルシートを選ばなければ、 UA は「固定スタイルシートと優先スタイルシート」を同時に適用する。複数のスタイルシート間で矛盾が起こった時は、 CSS のカスケード順位で解決される。
上の例ではスタイルシートの名前が cool のみで、且つ代替スタイルシートは優先スタイルシートを含めて二つだけだったが、複数の代替スタイルシートを一つの名前でグループ化し、且つそういったグループを複数指定する事が出来る。
複数の alternate style sheets の例;
<link rel="alternate stylesheet"
title="compact" href="small-base.css" type="text/css" />
<link rel="alternate stylesheet"
title="compact" href="small-extras.css" type="text/css" />
<link rel="alternate stylesheet"
title="big print" href="bigprint.css" type="text/css" />
<link rel="stylesheet" href="common.css" type="text/css" />
閲覧者が、スタイルとして、 "compact" を選択すると、 UA は最初の二つのスタイルシートと、最後の固定スタイルシートの三つを適用するよう求められている。
また、出力メディアに応じて、スタイルシートを変更する事も可能だ。
<link rel="stylesheet"
media="aural" href="corporate-aural.css" type="text/css" />
<link rel="stylesheet"
media="screen" href="corporate-screen.css" type="text/css" />
<link rel="stylesheet"
media="print" href="corporate-print.css" type="text/css" />
<link rel="stylesheet" href="techreport.css" type="text/css" />
上から順番に、音声、スクリーン、印刷出力に対応する。最後の出力メディアが指定されていないものは、全ての出力メディアに適用される。
XHTML では、 XML 文書用の xml-stylesheet 処理命令と、 HTML 用の link 要素を併用する。
XML での xml-stylesheet 処理命令では、代替スタイルシートの指定に、 alternate 擬似属性を用いる。 HTML での rel="alternate stylesheet" は、 XML での alternate="yes" が対応する。
<link rel="alternate stylesheet"
title="compact" href="small-block.css" type="text/css" />
<?xml-stylesheet alternate="yes"
title="compact" href="small-block.css" type="text/css"?>
<link rel="alternate stylesheet"
title="compact" href="small-inline.css" type="text/css" />
<?xml-stylesheet alternate="yes"
title="compact" href="small-inline.css" type="text/css"?>
<link rel="alternate stylesheet"
title="medium" href="medium.css" type="text/css" />
<?xml-stylesheet alternate="yes"
title="medium" href="medium.css" type="text/css"?>
<link rel="stylesheet" href="atomic.css" type="text/css" />
<?xml-stylesheet href="atomic.css" type="text/css"?>
xml-stylesheet 宣言において、 media 擬似属性や、charset 擬似属性の働きも、 link 要素の場合に従う。例外は、先に紹介した alternate 擬似属性の場合に限る。