Jintrick.netagenda2004年03月アーカイブ → 2004年03月21日

とことん標準に拘ったCSS切り替えスクリプト(その3)

とことん標準に拘ったCSS切り替えスクリプト(その2) (agenda)の続き。これまでW3C DOMに準拠しているかどうかという観点で見てきましたが、今回はHTMLの仕様書で定義されている外部スタイルシートの「意味」を壊さないよう工夫すべし、という話です。

固定、優先、代替スタイルシートの特長を殺さないこと

固定スタイルシート

固定スタイルシート(永続スタイルシートとも呼ばれる)は、title属性が無く、rel属性が"stylesheet"なlink要素でリンクされた外部スタイルシートです。例:

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

固定スタイルシートは、その時有効になっている他のスタイルシートと共に必ず有効になっていなければなりません。HTML文書制作者はそのような振る舞いを期待して、title属性の無いlink要素でスタイルシートにリンクしている筈です。その存在意義から考えて、基本的に固定スタイルシートの切り替えを許可すべきではありません

具体的には、全てのスタイルシートを無効にするときに限り、固定スタイルシートを無効にすることを許可し、全てのスタイルシートが無効になっている状態から任意のスタイルシートを有効にした際に、固定スタイルシートを有効にすることを強制します。それ以外のケースでは変更を許可しないようにします(常に有効)。

優先スタイルシート

優先スタイルシートは、title属性でスタイル名を付けられ、rel属性が"stylesheet"なlink要素でリンクされたた外部スタイルシートです。例:

<link rel="stylesheet" type="text/css" title="foo" href="f1.css" />
<link rel="stylesheet" type="text/css" title="foo" href="f2.css" />

優先スタイルシートの有効/無効は、同じスタイル名を持つ他のスタイルシートと連動していなければなりません。この例でいえば、fooというスタイル名を持つf1.cssを有効(無効)にしたなら、同じくfooというスタイル名を持つf2.cssも同時に有効(無効)にしなければなりません。

代替スタイルシート

CSS切り替えスクリプト制作者にとっては、優先スタイルシートと代替スタイルシートを区別する意味は殆どありません。rel属性の値がalternate stylesheetになっているだけです。切り替えに関しては優先スタイルシートと同様にスタイル名単位で扱います。

ただ、デフォルトの状態に戻す際に「お節介をするか否か」によっては優先と代替の区別は重要なのですが、この件に関しては別の機会に。

似非代替スタイルシート

title属性がなく、rel属性が"altenate stylesheet"になっているlink要素でリンクされたスタイルシート、そのような似非代替スタイルシートについては、検知した際にエラーでも投げてしまいましょう。わらい。

style要素は?

style要素として埋め込まれたスタイルシート(特にtitle属性がある場合)は、固定と優先、どちらに属するのでしょうか。

これは不明としか言えないのですが、スタイル名を付けてグループ化して良いという記述が仕様書にはないので、title属性があろうとなかろうと、これを優先スタイルシートして扱うのは勝手な意味の付加になってしまいます。従って個人的には、style要素のスタイルシートは固定スタイルシートとして扱って良いと思います。(別に「も」で始まって「ら」で終わるブラウザを非難しているわけではありません。「とことん」拘るわけですから。)

参考文献


webmaster@jintrick.net
公開: 2004年03月21日
カテゴリ: CSS ,DOM ,Javascript