Hop step XHTML―ホップ ステップ XHTML

Section 23:リンクモジュール(2)

 本節では,スタイルシートのリンクについて解説する。

link 要素とスタイルシート

 外部に用意されたスタイルシート(のファイル)を読み込むのに link 要素を用いることができるのは,Let's begin XHTML の Section 16 で解説した。復習しておくと,CSS のスタイルシートを読み込む場合,これは,次のように書くものであった。

<link rel="stylesheet" type="text/css" href="URI" />

 ここで,charset 属性によって,読み込むスタイルシートの文字エンコーディングを明示できる。ただし,CSS の場合,読み込んだファイルに @charset ルール(CSS2 以降でサポート;Hop step CSS の“5.6 CSS の記述と管理”を参照されたい)がある場合は,そちらが優先される。

<link rel="stylesheet" type="text/css" href="hsxh.css" charset="Shift_JIS" />

 また,複数の link 要素で,複数のスタイルシートを読み込むことができる。このとき,CSS においては,同じ条件で複数の宣言が適用されうるとき,カスケーディングという仕組みに従って,あとに読み込んだほうのスタイルシート中の記述が優先される。

メディアとスタイルシート

 media 属性を使用することで,メディアに応じて適用させるスタイルシートを変えることができる。

 たとえば,共通のスタイルシート“common.css”があり,ブラウザ表示用に“browser.css”,印刷用に“printer.css”を用意する場合,次のように記述する。

<link rel="stylesheet" type="text/css" href="common.css" />
<link rel="stylesheet" type="text/css" href="browser.css" media="screen" />
<link rel="stylesheet" type="text/css" href="printer.css" media="print" />

 また,CSS では,メディアに応じた記述を,@media ルールおよびメディアを指定した @import ルール(いずれも CSS2 以降でサポート)でも行える。

 これに関しては,Hop step CSS の“5.5 メディアへの対応”も参照されたい。

スタイルシートの選択・切り替え

 link 要素でスタイルシートを読み込ませる場合,title 属性は通常の意味とは異なり,スタイルシートの選択と切り替えに使用される

 切り替え不可能な(メディアが合致していればつねに適用される)スタイルシートには,title 属性を記述しない。今までの書き方は,この記法である。

 一方,title 属性を伴うスタイルシートの読み込みは,選択・切り替えの対象になる。このとき,

  • rel="stylesheet" である場合,“おすすめの(既定の)”スタイルシート
  • rel="alternate stylesheet" である場合,“選択可能な”スタイルシート

を表す。

 たとえば,既定の状態で“Color”という名前で“color.css”とし,“Monochrome”という名前で“monochro.css”と,“Hi-Contrast”という名前で“hi-cont.css”を選択可能にする場合は,

<link rel="stylesheet" type="text/css" title="Color" href="color.css" />
<link rel="alternete stylesheet" type="text/css" title="Monochrome" href="monochro.css" />
<link rel="alternate stylesheet" type="text/css" title="Hi-Contrast" href="hi-cont.css" />

と記述する。これに,選択に関わらず適用される“common.css”を加えると(これは title 属性を書かない),

<link ref="stylesheet" type="text/css" href="common.css" />
<link rel="stylesheet" type="text/css" title="Color" href="color.css" />
<link rel="alternete stylesheet" type="text/css" title="Monochrome" href="monochro.css" />
<link rel="alternate stylesheet" type="text/css" title="Hi-Contrast" href="hi-cont.css" />

Netscpe 6 および Opera 8 の,スタイルシート切り替えインタフェース。
図 23.1 [D]

のようになる。この記述によって,Netscpe 6 以降および Opera 8 以降で,図 23.1 のように切り替えのインタフェースが提供される(Opera 7 でも実装されているが,不完全である)。

 なお,これは,media 属性と組み合わせても使用できる。メディアに応じて,または閲覧者の嗜好に応じて,適用させるスタイルシートを変えることができる。

XML とスタイルシート

 ここでは,XML におけるスタイルシートについて触れておく。

 XHTML 1.1 は,一般にメディアタイプ“application/xhtml+xml”で扱われるが,この場合,スタイルシートの読み込みを,xml-stylesheet プロセッシングインストラクション(PI)でも記述することがすすめられる。

 ここで,PI とは,次のような書式を持つものである。

<?...?>

これはタグとは呼ばない。xml-stylesheet PI は,次のような書式である。これは,XHTML の本体(html 要素)より前にしか出現できない(ただし,XML 宣言より前に出現してはならない)。

<?xml-stylesheet type="メディアタイプ" href="URI"?>

 たとえば,次の link 要素による CSS の読み込みは,直後の xml-stylesheet PI と等価である。

<link rel="stylesheet" type="text/css" href="mystyle.css" />
<?xml-stylesheet type="text/css" href="mystyle.css"?>

 xml-stylesheet PI には,次のような擬似属性を与えることができる。

xml-stylesheet PI の(必須でない)擬似属性
擬似属性名属性値備考
charset文字エンコーディングhref 擬似属性で示されたスタイルシートの文字エンコーディング
title文字列選択可能にする場合の,スタイルシートにつける名前
mediaメディアそのスタイルシートがどんなメディア向けかを表すキーワード
alternateキーワード選択可能なスタイルシートとするかを指定する;値は“yes”または“no”で,既定値は“no

 charsettitle および media 擬似属性は,link 要素で読み込むときのそれぞれ同名の属性に対応する。それで,alternate 擬似属性が“yes”のときは,link 要素で読み込むときに“rel="alternate stylesheet"”と指定するのと等価である(“no”のときは,“rel="stylesheet"”と等価)。

 前項の最後に掲げた例と同等の xml-stylesheet PI を,この PI を書く位置を示すために XHTML ファイルの先頭から書くことにすると,次のようになる。

<?xml version="1.0" encodeing="Shift_JIS"?>
<?xml-stylesheet type="text/css" href="common.css"?>
<?xml-stylesheet type="text/css" title="Color" href="color.css"?>
<?xml-stylesheet type="text/css" title="Monochrome" href="monochro.css" alternate="yes"?>
<?xml-stylesheet type="text/css" title="Hi-Contrast" href="hi-cont.css" alternate="yes"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" dir="ltr">

...以下略...