Blog

※ブログ移転しました。 → hamashun.me

スターハックに端を発するアレコレ

kuruman.orgのKurumaさんからCSSはHTMLだけのものじゃない (kuruman.org > Kuruman Memo)というツッコミを頂きました。 ありがとうございます!
非常に勉強になった反面、新たな疑問も生じたのでエントリ。

ここでのポイントは、Kurumaさんの記事タイトル通り、CSSはHTMLだけのものじゃないという事。

結論を述べるとスターハックはCSS文法上全く問題がないハックであり、単にUAのバグをつついただけのハックである。この記事の筆者が言うような議論の必要などない。

確かに、だからこそスターハックはCSSのバリデータを通過するんですね。

CSSは構造化文書にスタイルを設定するための言語です。従ってCSSをhtml要素はルート要素なので、あらゆる要素の子要素となりえませんなどという、つまらないHTMLのローカルルールに則って作成する必要は全くありません。

REC-CSS2 邦訳の冒頭にCSSは構造化文書(HTMLとかXMLとかSGMLとか)にスタイルを設定するための文書ですよ、という意味合いの事が書いてあります。
つまり、CSSはHTMLやXHTML専用ではなくて、色んな構造化文書に使えますよ。 という事ですね。

ここでちょっと話がズレるんですが、ツッコミを受けている記事、そろそろCSSハックの良し悪しについて考えてみる(書式編)では、この段階でまず、言葉が足りませんでした。
HTML/XHTMLに対して適用するCSSハックという(つまり、HTML/XHTML+CSSで仕事をしている、或いは慣れている、それが普通であると感じている人間の)立場、考え方で記事を書いていたんですね。 自覚が無いままに。
Webに公開している以上、色んな人(例えばXML+CSSで仕事をしている人とか)が自分の記事を目にする機会がある訳で、そういう人からは、あの書き方は違和感だらけだったのかもしれません。
今後は、そういった点にも気をつけながらBlogを書いていきたいと思います。

さて、話を戻します。
仕様書により、HTML側の理屈でCSSの良し悪しを考える事自体が間違いであるという事が解りました。 あーなるほど!
今、自分でこの一文を書いていて理解できました。 そういう事だったのか!

その理屈は理解できて納得できたんですが、一つ気になる事ができました。
それはつまらないHTMLのローカルルールに則って作成する必要は全くありません。という部分。

あ、ここから先は仕様書から外れたレイヤでの内容になってしまいますので、Kurumaさんが仕様書の中だけでご意見をおっしゃっている場合は、全く意味の無い内容になります。

さて、気になったのは、HTML/XHTMLに適用するCSSであっても、問題無いと言い切ってしまっていいのか? という事です。
CSS単体で見た時や紙の上の話ではなく、実際の業務で使う際などの、HTML/XHTML+CSSというセットで考える場合ですね。

サンプルコードを元に、CSSとHTMLを読み込んだIE6のやりとりをセリフで書いてみます。

div p {
 margin: 10px;
 color: red;
}

<div><p>hogehoge</p></div>

IE6くん:「divの子孫のpのスタイルよろ」
CSSさん:「はーい。 marginを10pxとcolorをredね」
IE6くん:「おk把握」

・・・・・・こんな感じ?
や、ブラウザの処理の流れとか疎いので、全く自信無いですが。
もしかしたら一行目はいらないのかも。 まあ言いたいことに変わりはありませんのでとりあえずヨシ。

で、スターハックを使っていた場合はどうなるのかなあと。

* html div p {
 margin: 10px;
 color: red;
}

<div><p>hogehoge</p></div>

IE6くん:「divの子孫のpのスタイルよろ」
CSSさん:「えーと、*の子孫のhtmlの子孫のdivの子孫のpならあるけど・・・・・・これかな?」
IE6くん:「いいんじゃね。 それで」

・・・・・・こんな感じ? FxさんやOperaマンだと、「それは違うよ」となるから適用しない、みたいな。
セリフ化とか嫌いな人もいるのかな。 ああもう先に謝っておきます。 ごめんなさいごめんなさい。

で、まあ、CSS側のルールさえ良ければOKとは必ずしも言えない事もあるのでは、と思った次第です。
構造化文書に対してCSSがあるのなら、適用する構造化文書側のルールも考慮するのが、行儀の良いCSSなのではと。

まあ、どこまで突き詰めるのかという話かもしれません。 人それぞれ、みたいな。

追記:2007 02 10
今、言及先を見直したら、補足が追加されていました。
その部分に関しましても、より一層理解を深める事ができました。 ありがとうございます。

TracBack

Reference Entry:  スターハックに端を発するアレコレ:

Kuruman Memo » Re: スターハックに端を発するアレコレ
HTML/XHTMLに適用するCSSであると定義するためには名前空間の定義が必要。
TracBack Time:  2007年02月11日 16:38

Contribution Form

Blog Search
Search
Recent Entry
Category
Monthly Archive