1. Introduction to CSS with HTML

本章の目次

1.1. スタイルシートの仕事

1.1.1. 見栄えをコントロールしたい!

「どうしてHTML文書の見栄えは自由に調整できないのだろう?」

WWWの基本文書であるHTML文書を作成したことのある方ならば,誰もが一度はこんな不満を抱いたことがあると思います。その不満は,スタイルシートを用いることで解消されるのです。「なぜHTMLでは見栄えを調整できないのか」といえば,その答は「それはHTMLの仕事ではないから」です。すなわち,スタイル調整はスタイルシートの仕事だからです。

WWWといえども文書作品の公開ですから,その作品の見栄えをきちんとコントロールしたいと考えるのはごく当然です。詳しい解説は後回しにして,まずはスタイルシートの機能を大まかに紹介しましょう。

1.1.2. スタイルシートでできること

HTML用のスタイルシートとしてW3Cが推奨しているのが「カスケーディング・スタイルシート(CSS)」です。レベル1のCSS(CSS1)だけでも,文書中の任意の部分に関して,以下のプロパティ(property)ごとにスタイルを調整できます。

フォント系
フォントファミリー,サイズ,太さ,斜体,スモールキャピタル,行幅
色と背景効果系
前景色(文字色),背景色,背景画像の調整
テキスト属性系
単語間隔,文字間隔,下線など,垂直位置(上付き下付き),水平位置そろえ(右そろえ,左そろえ),大文字小文字,行頭インデント
ボックス系
マージン・パディング,ボーダー(枠線)
表示位置調整
表示の横幅,縦幅,フロートと回り込み,回り込みの解除
特殊な表示調整系
表示形式,空白の取り扱い,リストマークの調整

CSS2では,これらに加えて,「表示位置の絶対的な指定」「自動生成文字(引用符や通し番号)」「印刷への対処」「TABLE」「ユーザインタフェース(カーソルやシステムカラーへの参照)」「音声再生」に関する指定が可能になっています。

1.1.3. HTML文書とスタイルシートファイルの連携

スタイルシートは,基本的にはテキストファイルとして作成・保存されます。シートを使いたい場合は,HTML文書のなかに「このシートを使う」という指定を(LINK要素として)書き込めば良いのです。

WWWブラウザは,読み込んだHTML文書にスタイルシートファイルが指定されていると,自動的にそのシートを読み込みます。そして,スタイルシートの指定に従って表示を調整するのです。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD>
<TITLE>HTML4.0(W3C Recommendation 18-Dec-1997)解説</TITLE>
<LINK REL="STYLESHEET" TYPE="text/css" HREF="normal.css">
<LINK REL="STYLESHEET" TITLE="fancy"
    TYPE="text/css" HREF="fancy.css">
<LINK REL="ALTERNATE STYLESHEET" TITLE="compact"
    TYPE="text/css" HREF="small.css">
<LINK REL="ALTERNATE STYLESHEET" TITLE="compact"
    TYPE="text/css" HREF="mini.css">
</HEAD>

1.1.4. 簡単なスタイルシート例

1) 見出しを調整

Netscape NavigatorやInternet Explorerの標準的な見栄え設定では,見出しのレベルが下がるにつれて(H1〜H6要素),フォントサイズは順に小さくなります(図1-1)。

図1-1 WWWブラウザ標準の「見出し」
<H1>1.ももたろうを考える</H1>
        <H2>1.1.出発まで</H2>
                <H3>1.1.1.はじまりはじまり</H3>
                <H3>1.1.2.桃太郎の誕生</H3>
【図1-1】――見出しレベルの大小をフォントサイズの大小で表現しています。

それを,図1-2のように変更してみましょう。このように,ほんの数行のスタイルシートでも,見栄えを大胆に変更できるのです。

図1-2 スタイルシートで調整した「見出し」
H1 { font-size: xx-large;} /* H1をずば抜けて大きく */
H2, H3 { font-size: large;} /* H2とH3は同じ大きさに */
H2 { border-bottom: 1pt solid;} /* H2の下にボーダーラインを */
H3 { margin-left: 3em;} /* H3は左に余白を */
/* 「em」は「一文字分」のサイズ */
【図1-2】――各見出しレベルの違いがより分かりやすくなっています。

2) 本文を調整

Netscape NavigatorやInternet Explorerの標準的な見栄え設定では,段落(P要素)の開始/終了は1行分の余白で表現され,行間はぴっちり詰まっています。また,強調部分(STRONG要素)は太字で表現されます。(図1-3)。

図1-3 WWWブラウザ標準の「段落」
<H3>1.1.1.はじまりはじまり</H3>
<P>桃太郎のお話は,おとぎ話に良くあるように,
「むかしむかし,あるところに」で始まります。
おじいさんは山へ柴刈りに,おばあさんは川へ洗濯に行きます。</P>
<P>ところで,最近の人は「柴」をご存知でしょうか。
柴とは無関係の生活をしているため,<STRONG>「芝刈り」</STRONG>だと
誤解している人もいるかもしれません。</P>
【図1-3】――行間が詰まっていて,少し読みにくいかもしれません。

それを,図1-4のように変更してみましょう。このように,ちょっとした指定でも,文章の印象を大きく変えられるのです。

図1-4 スタイルシートで調整した「段落」
P{
    text-indent: 1em; /* 行頭に1文字分の字下げ */
    line-height: 1.5em; /* 行幅は1.5文字分 */
    margin-bottom: 0em; /* 次の段落との余白は取らない */
}
STRONG{ /* 白黒反転 */
    color: white;
    background: black;
}
【図1-4】――行間が広げられて読みやすくなりました。STRONG要素もより目立っています。

1.1.5. どこまでやれるのか

これまで見てきたとおり,ほんの数行のスタイルシートを記述するだけでかなりの効果が得られます。また,用意されているプロパティに関してはほぼ自在に見栄えを調整できるといって良く,各種プロパティを複雑に絡み合わせれば,販売されている書籍に対抗できるほどのスタイル調整が可能です。また,WWWでは色や画像を気軽に指定できますので,印刷出版するなら費用が心配になるような表現を手軽に楽しむことだってできてしまいます(図1-5)。

図1-5 スタイルシート適用例
【図1-5】――スタイルシートによって,色や画像などを使った豊富な表現が可能になります。

ただし,用意されていないプロパティに関しては調整できません。CSS1の仕様では,以下に挙げるような特殊な表示効果は実現できません。

スタイルシートは必ずしも万能ではありません。例えば,スタイルシートで絵は書けません。スタイルシートを活用するには,まずCSS1で何ができるのか・何ができないのかを知り,その上でCSS1を生かすスタイル調整を考えるべきでしょう。

1.2. HTMLにまつわる誤解と混乱の歴史

スタイルシートの活用を考える前に,ちょっと歴史的な経緯を確認したいと思います。

1.2.1. 誤解?

まず,これまで「見出しレベルの違いは,文字サイズの違いに相当する」と説明されたことはないでしょうか。また,「HTMLの段落P要素は,一行分の改行(余白)として表示される」という話はどうでしょう。「引用ブロックであるBLOCKQUOTE要素は,本文よりも大きなマージンをとって表示される」というのも聞いたことがないでしょうか。

既にお分かりのとおり,これらの表示はスタイルシートによって全く異なるものに変更できます。では,いったいこの説明は何を示しているのでしょう? 実は,特定のWWWブラウザにおける標準の表示を説明しているに過ぎません。

HTMLの仕様そのものは,各要素の意味合いや役割――見出しであるとか,強調語句であるとか――を決めているだけで,その表示に関しては原則として何も決めていません。なぜなら,表示はスタイルシートの範疇であり,HTMLの範疇ではないからです。

では,HTMLの範疇とはいったい何なのでしょう。

1.2.2. HTMLの仕事の範疇

1) SGMLの考え方

スタイル指定に関して,次の問いに答えるよう考えてみてください。

普通は,後者に対して「Yes」でしょう。すなわち,スタイル指定よりも先に,まずは文書の構成をあきらかにしておくものだと考えられます。

文書のテキストデータのうち「どこが見出しでどこが本文なのか」を明示するための仕組みとして,SGML(Standard Generalized Markup Language)があげられます。SGMLでは,見出しならば

<見出し>スタイルシートを使おう!</見出し>

と,文章に「タグ」と呼ばれる記号をつける(マークアップする)のです。

このように文書が書かれていれば,あとはスタイルシートで「見出しはフォントサイズ20ポイントで,太字,ゴシックね」などと指定するだけで見栄えを調整できます。なかなか賢い仕組みだと思いませんか?

2) HTML⊂SGML

SGMLの仕組みでは,次の二つの過程によって文書を記述します。

文書型定義とは,「これから文書で指定するのは,“見出し”と“本文”と“強調語句”だよ」といったことを明示するものです。すなわち,文書の様式そのものに相当します。

しかし,毎回毎回文書の様式を定義していては大変です。そこで,文書型定義は使いまわしが効くようになっています。

実は,HTML(HyperText Markup Language)の正体は,この(1)の過程を省略したSGMLなのです。HTMLにおける文書型定義は既に定義済みで,われわれはそれにしたがって文書を記述するのです。

したがって,HTMLの仕事の範疇は文書の構成を明示することであり,HTMLは各文書の見栄えに関して原則として何も規定していません。その見栄えに関してはスタイルシートに一任されているのです。

コラム:初めからSGMLだったのか?

最初のHTMLおよびWWWの仕組みはCERNで考え出されました。そのときには,HTMLは厳密なSGMLアプリケーションではなく,もう少しルーズな(?)ものでした。ルーズであるがゆえに,逆に文書記述のルールにあいまいな部分がありました。

しかし,その後の混乱期を経てW3Cが設立され,W3Cの努力によってHTML2.0以降は明確なSGMLアプリケーションになりました。

実際にはWWWブラウザ開発会社などが独自拡張したHTMLも存在するのですが,“標準”のHTMLといえば,W3Cが推奨するもの(W3C Recommendation)を指しています。

1.2.3. 誤解と混乱の歴史

1) スタイルシートの不在

ところで,WWWが誕生したのは1990年,WWWブラウザMOSAICにより爆発的に普及し始めたのは1993年,CSS1が発表されたのは1996年です。つまり,HTML文書のスタイル指定は6年間(あるいは3年間)放置されていました(実際には考慮されていたのですが,標準化には至りませんでした)。一般的な感覚からみれば,この期間はそれほど長くはないと言えます。しかし,驚異的な成長を見せたWWWの発達過程と並べてみれば,“大変長い時間が経った”と感じざるを得ません。

コラム:MOSAIC

1998年にもなると,既にMOSAICをご存知ないひともいるかもしれません。MOSAICは世界で最初にインライン画像表示を実現したWWWブラウザで,瞬く間に各種OSに移植され,1993年には事実上の標準WWWブラウザとなりました。その開発者マーク・アンドレセン(Marc Andreessen)らはNCSAの一員でしたが,MOSAICの著作権についてNCSAともめた結果,NCSAを飛び出し会社を設立しました。それが現在のNetscape社です。

2) 予期せぬデファクト・スタンダード

CSS1が発表される前も,多くのWWW利用者がHTML文書の見栄えを調整したいと考えていました。しかし,始めに市場の大部分を占めたMOSAICは,HTML要素に対するスタイル変更法を提供しませんでした。そのMOSIACがおこなうHTML文書の表示は,「見出しレベルの違いは文字サイズの違いで表現する」「段落の開始/終了は一行分の余白で表現する」「強調文字は太字で表現する」「引用ブロックは本文よりも大きなマージンを取る」といったものでした。その後任であるNetscape社のNetscape Navigator,Microsoft社のInternet Explorerも,MOSAICが規定したHTML文書の見栄え設計を受け継ぎ,やはりスタイルを固定的なものとして扱ってきました。

この時期に多くの人がWWWを利用するようになり,当然多くの人がHTML文書を記述しました。この段階ではまだスタイルシート仕様が確立されておらず,また「HTML文書の表示スタイルは,本来自在に変更できるものだ」と言及する人が少なかった(いなかった?)ため,いつしか,「MOSIACがそのように表示した」に過ぎなかった表示結果が,あたかもHTMLが定義する見栄え設定であるかのように理解されました。しかし,それは誤解なのです。

この誤解が大きな混乱を生みました。すなわち,「HTMLは文書の見栄えを指定するものであり,残念ながらその表現力は低い」というイメージが流布し始めたのです。

3) 見栄えを直接指定する独自要素の導入

その誤解に拍車をかけたのが,Netscape社などWWWブラウザ開発会社が独自に採用した要素(タグ)です。各社は自分のWWWブラウザが他社のものより高機能であることを示すために(?),特殊効果を実現する要素を独自に導入しました。たとえば,FONT要素を用いれば,文書中の好きな文字のサイズや色を変更できます。BLINK要素を用いれば,文字列を点滅させられます。MARQUEE要素を用いれば,電光掲示板のように流れていく文字を簡単に表示できます。

独自要素を導入すること自体は,WWWをより楽しいものにするという意味で,悪いことではありません。しかし,これらの要素の多くは,文書構成ではなく「表示の仕方」を指定するものでした。このような独自要素が注目されるにつれ,「HTMLとは文書の表示結果をタグで指定するものだ」というイメージがより強まってしまいました。

いまや,「文字のサイズを変更するには,H1〜H6タグを用います」「表示に大きなマージンをとるには,BLOCKQUOTEタグを用います」と書いてある市販の本を探すことすら難しくありません。これでは,HTMLの本来の考え方が完全にどこかへ吹っ飛んでしまっています。

コラム:まとめ

「見出し」を例に,HTMLそのものに関する誤解と混乱の歴史をまとめます。

本来の「見出し」の表現:
HTML――「見出し」を見出しタグで囲って明示
スタイルシート――「見出し」を大きな文字に指定
表示結果――「見出し」は大きな文字で表示される
誤解と混乱の歴史:
  • スタイルシートが確立していなかった。
  • 利用者は,何よりも文書の見栄えに興味があった。
  • したがって,用意された見栄えのなかから好みの見栄えを探し,利用するしかなかった。
  • 本来の「見出し」などの意味を考えずに,HTMLのタグを見栄えの指定道具として考えるようになった。
誤解と混乱の結果:
「大きな文字にしたいときには,見出しタグを用いる」

こうなると,HTMLが文書構成を示すものだとはなかなか理解できません。しかも,BLINKやMARQUEEなど一部の独自拡張要素は文書構成とは何の関係もありません。こうして,HTML本来の仕事は忘れ去られ,誤解と混乱ばかりが蔓延するようになったのです。

1.2.4. 怪しいテクニック

そのような誤解の中で,マークアップを流用して見栄えを調整する「テクニック」が数多く生み出されました。もっとも,誤解ではなく,スタイル表現を支配したいと苦心した結果なのかも知れません。しかし,どちらにせよそれらがHTMLマークアップを混乱させているのです。

以下に,代表的な“テクニック”とその問題点を紹介します。

特定のソフトウェアの表示結果に依存(マークアップの無意味化)

この“テクニック”に従っていると,HTMLマークアップの本来の目的である「見出しの明示」などが全うできません。「見出しとして指定されているのが見出しだ」という単純なはずのルールが守られていないのならば,文書の読み手はどのようにして見出しを探せばよいのでしょう?

また,このように書かれたHTML文書では,スタイルシートで見栄えを調整しようにも,文書構成が書かれていないために調整しようがありません。本末転倒とはこのことでではないでしょうか?

拡張マークアップの多用(一般性の崩壊)

これらの要素を利用すれば,そのWWWブラウザを利用している人たちには美しい効果として解釈されるでしょう。しかし,それ以外のWWWブラウザを利用している人はどうなるのでしょう? この方法では,一部の人にしか効果をアピールできません。

全てを画像として表現

一般に,影付き文字や会社のロゴマークのような特殊な装飾つきの文字は,テキストではなく画像としてHTML文書に入れ込みます。これが極端にこうじたのか,文章全体を画像にして公開しているケースに遭遇することがあります。つまり,独自のDTPソフトウェアなどを用いて整形した結果のスクリーンショットでHTML文書を構成するのです。

たしかに,これならばソフトウェアに依存せずに,表示を完全に支配できます。しかし,次のような欠点があります。

全てをTABLEとして表現

TABLEの本来の意味は「表」ですが,表のコマ(CELL)の位置を「文字の位置」として利用し,細かなレイアウトを実現した文書も存在します。中でも,上下左右のマージンや,語句同士の位置関係を調整する効果を狙ったものが多く見られます。

この“テクニック”の最大の難点は,「指定が難しい」ことです。複雑なレイアウトを実現しようとすればするほど,HTML文書のソースは複雑になります。すると,専用ソフトウェア(高機能のWYSIWYGのHTMLエディタなど)を用いなければ思ったとおりの効果を得るのは難しいといえます。

もうひとつ難点があるとすれば,処理に必要な時間です。複雑なレイアウトのTABLEを調整するには,当然それなりの処理時間が必要です。結果として文書の表示にかかる時間が増大するでしょう。これはコンピュータの処理速度に依存する問題ですが,読者をイライラさせる可能性が高いことは間違いありません。

1.3. 混乱から抜け出すために

1.3.1. 意識の転換

「どうしてマージンをとるためにBLOCKQUOTE(引用ブロック)なんていう名前の要素を使うのだろう。どうしてちょっと余白を取りたいだけなのに,テーブルだのセルだのを考えなければならないのだろう。HTMLって難しい。これじゃあ,“気軽にWWWで文書公開”なんて無理だなあ。」

こう考えてしまうのはもっともです。しかし,それは「本来HTMLにはできないこと」を無理やりHTMLで行おうとしていたのがまずかったのです。

HTMLでスタイルを調整しようとするのを止めましょう。HTML文書を本来の文書構成を明示するためのものに戻しましょう。そして,スタイルシートを使いましょう。

1.3.2. スタイルシートを使う利点

1.2.4.で紹介した怪しいテクニックを用いる場合とは異なり,スタイルシートを用いた見栄え調整には以下のような利点があります。このことを逆に捉えれば,HTMLで見栄えを指定することがいかに「無理のある仕事」であったのかを実感できると思います。

1) シートの記述しやすさ

テキストファイル
CSS1仕様のスタイルシートはテキストファイルとして記述されるため,スタイルシート作成のために特別なソフトウェアを用意する必要はありません。
直感的なキーワード指定
簡単なキーワードを記述するだけで,文字サイズや色・マージン・インデント・行幅などを自在に設定できます。マージンならば[margin: 3cm],フォントサイズならば[font-size: 13pt]など,直感的な英単語を利用するため学習も容易です。また,画面サイズなどに合わせた相対指定も可能です。
指定効果の汎用性の確保
指定の効果は仕様書に明示されているため,どのソフトウェアに対しても同様の効果を期待できます。
データサイズの軽量化
“継承(inheritance)”という仕組みを上手に活用すれば,少しの指定でも全体のスタイルを調整できます。

2) HTML文書との相性の良さ

HTML文書とスタイル指定の分離
HTML文書から独立した仕組みでスタイルを指定するため,HTML文書がすっきりとわかりやすいものになります。
スタイルシートの再利用
ひとつのスタイルシートを複数のHTML文書から利用することが可能です。また,スタイルシートの中に別の既存のスタイルシートを取り入れる(import)ことも可能です。
非対応ソフトウェアへの考慮
スタイル指定がHTML文書から分離しているため,対応していないWWWブラウザは,「スタイルシートとHTML文書」を受け取ったとしても,単にHTML文書だけを処理できます。したがって,スタイルシートを用いた場合でも,非対応ソフトウェアを用いている人にも支障なく文書内容を伝達できます。
読者の都合にあわせたスタイル調整
カスケーディングという仕組みによって,読者独自のスタイルシートを持ち込み,表示を調整することも可能です。そもそも,読者はスタイルシート機能をオフにすることもできます。このように,スタイルシートを用いたHTML文書は,読み手の都合にあわせて柔軟に変化させられます。
スタイルシートの選択肢の提供
HTML文書そのものを書き直さなくても,別のスタイルシートに付け替えるだけで,見栄えを大きく変更できます。また,一つのHTML文書にあらかじめ複数のシートを指定しておき,読者に好みのシートを選択してもらうようなプレゼンテーションも可能です(図1-6,1-7,1-8)。
図1-6 スタイルシートを用いなかった例
【図1-6】――見出しは大きいフォントで,段落は前後に一行分の余白を取ることで表現されます。
図1-7 スタイルシートを適用した例1
【図1-7】――見出しを右寄せにしたり,枠線をつけて目立たせたりしています。
図1-8 スタイルシートを適用した例2
【図1-8】――段落の始まりを一字下げることによって表現しています。

1.4. 本書の薦める学習手順

1.4.1. 本書の構成と学習手順

本書はCSSを用いたHTML文書のスタイル調整を解説するものです。単にCSSの仕様を紹介するにとどまらず,スタイル指定の考え方にまで言及します。

しかし,スタイルシートを活用するには,HTML文書が文書構成を示すものとして書かれている必要があります。端的に言えば,HTML文書から見栄え指定を剥奪し,見栄えをスタイルシートに押し込む準備をしなければいけません。そうすることによって,HTML文書はより単純で明快なものになります。そのためには,まずHTML本来の仕様を理解し,必要に応じて誤解を解かなければなりません。そこで,本書は以下のような構成となりました。

2章:tutorial of HTML as SGML
2章では,HTML文書の本来の役割――文書の構成を明示すること――に関して,いったんSGMLに立ち返って解説します。
3章:some more HTML
3章では,もう少しだけHTMLに関する取り決めを説明します。
4章:CSS syntax in detail
4章では,CSSによるスタイルシート記述の文法的な側面を解説します。
5章:CSS properties for visual media in detail
5章では,CSSが規定する個々のプロパティのうち,中心的に用いられるvisualメディア用のプロパティを解説します。
6章:road to mastering CSS
6章では,実際にスタイルシートを構築する上で重要になる概念や,無理の無いシートにするための「考え方」を紹介します。
7章:new feature in CSS2
7章では,新たにCSS2で導入された「印刷」「TABLE」「音声再生」などのためのプロパティを解説します。

なお,この章の並びは筆者の考える望ましい学習ルートに過ぎず,絶対ではありません。興味に応じて,お好きな章から読み始めても構いません。ただし,後の章は前の章の知識を前提にしていますので,分からない単語や概念が現れましたら,必要に応じて前の章をお読みください。

1.4.2. 巻末資料について

巻末に,HTML4.0とCSS1のクイックリファレンスを資料として収録しました。HTML4.0やCSS1の全てのキーワードを暗記する必要はありません。クイックリファレンスを机の脇に置き,活用してくださることを願います。

他にも,1998年3月段階での各種WWWブラウザのスタイルシートサポート状況を収録しましたので,ぜひご利用ください。

1.4.3. 動作確認について

本書は,特定の実装結果(ソフトウェアの動作結果)ではなく,仕様をもとにHTMLやCSSを解説します。しかし,現実的には仕様と実装に食い違いがあるものです。すなわち,仕様にはあるが機能しない概念,仕様とは異なった結果になるスタイル指定例などが存在します。

そこで,本書では代表的なWWWブラウザであるNetscape Navigator4.0とInternet Explorer4.0における実装と仕様との食い違いを必要に応じて報告します。ただし,筆者の都合で,Microsoft Windows95におけるテストしか行えませんでした。マッキントッシュや各種UNIXをお使いの方,あるいは他のWWWブラウザを用いている方はあらかじめその旨をご了承くださるようお願い申し上げます。

また,WWWブラウザの厳密なバージョンを書けば,Netscape Navigator4.02,Internet Explorer4.00です。執筆段階での最新バージョンはNetscape Nagivator4.04,Internet Explorer4.01ですが,これらはマイナーチェンジ(であるはず)なので,大きな違いはないものとさせていただきます。

1.4.4. WWWによるサポートと例ソース公開について

本書の6章で紹介するスタイル例は,全てWWWで入手可能です。 http://www.gihyo.co.jp/book/1998/168111/download/css/を参照してください。他にも,正誤表などをできる限りすばやく公開していく予定です。