目次
このセクションは規範的ではありません。
このチュートリアルでは、シンプルなスタイルシートの設計がいかに簡単かを示します。このチュートリアルでは、HTMLの基本的な知識([HTML4]参照)と、デスクトップ出版の基本用語を多少知っている必要があります。
まず、小さなHTML文書から始めます:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <HTML> <HEAD> <TITLE>Bachのホームページ</TITLE> </HEAD> <BODY> <H1>Bachのホームページ</H1> <P>Johann Sebastian Bachは多作な作曲家でした。 </BODY> </HTML>
H1要素のテキスト色を赤に設定するには、次のCSS規則を書きます:
h1 { color: red }
CSSの規則は主に2つの部分から成り立ちます:セレクター('h1')と宣言('color: red')。HTMLでは要素名は大文字と小文字を区別しないので、'h1'でも'H1'でも動作します。宣言は2つの部分に分かれます:プロパティ名('color')とプロパティ値('red')。上記の例はHTML文書のレンダリングに必要なプロパティのうち1つだけを指定していますが、それ単体でもスタイルシートとして成立します。他のスタイルシートと組み合わせて(CSSの重要な特徴のひとつはスタイルシートの組み合わせです)、この規則が文書の最終的な表示を決定します。
HTML 4仕様では、HTML文書に対してスタイルシート規則を指定する方法が定義されています:HTML文書内に記述する方法と、外部スタイルシートを利用する方法です。スタイルシートを文書内に記述するには、STYLE要素を使用します:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <HTML> <HEAD> <TITLE>Bachのホームページ</TITLE> <STYLE type="text/css"> h1 { color: red } </STYLE> </HEAD> <BODY> <H1>Bachのホームページ</H1> <P>Johann Sebastian Bachは多作な作曲家でした。 </BODY> </HTML>
最大限の柔軟性を確保するため、著者は外部スタイルシートの指定を推奨します。外部スタイルシートは、HTML文書を修正することなく変更でき、複数の文書間で共有することも可能です。外部スタイルシートへのリンクにはLINK要素を使います:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <HTML> <HEAD> <TITLE>Bachのホームページ</TITLE> <LINK rel="stylesheet" href="bach.css" type="text/css"> </HEAD> <BODY> <H1>Bachのホームページ</H1> <P>Johann Sebastian Bachは多作な作曲家でした。 </BODY> </HTML>
LINK要素では以下を指定します:
スタイルシートと構造化されたマークアップの密接な関係を示すため、このチュートリアルでは引き続きSTYLE要素を使用します。さらに色指定を追加してみましょう:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <HTML> <HEAD> <TITLE>Bachのホームページ</TITLE> <STYLE type="text/css"> body { color: black; background: white } h1 { color: red; background: white } </STYLE> </HEAD> <BODY> <H1>Bachのホームページ</H1> <P>Johann Sebastian Bachは多作な作曲家でした。 </BODY> </HTML>
スタイルシートには現在4つの規則があります:最初の2つはBODY要素の色と背景色を設定しています(テキスト色と背景色は一緒に設定するのが良いです)、後の2つはH1要素の色と背景色を設定しています。P要素には色が指定されていないので、親要素であるBODYから色を継承します。H1要素もBODYの子要素ですが、2つ目の規則が継承値を上書きします。CSSではこのように異なる値同士の競合がよく発生し、本仕様ではその解決方法について説明しています。
CSS 2.2には'color'などを含めて90以上のプロパティがあります。他にもいくつか見てみましょう:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <HTML> <HEAD> <TITLE>Bachのホームページ</TITLE> <STYLE type="text/css"> body { font-family: "Gill Sans", sans-serif; font-size: 12pt; margin: 3em; } </STYLE> </HEAD> <BODY> <H1>Bachのホームページ</H1> <P>Johann Sebastian Bachは多作な作曲家でした。 </BODY> </HTML>
最初に注目するポイントは、複数の宣言が中括弧({...})内でブロック化され、セミコロンで区切られていることです。最後の宣言の後にもセミコロンを付けることができます。
BODY要素の最初の宣言はフォントファミリーを「Gill Sans」に設定します。そのフォントが利用できない場合、ユーザーエージェント(よく「ブラウザー」と呼ばれます)は'sans-serif'という5種類の汎用フォントファミリーのひとつを使用します。BODYの子要素は'font-family'プロパティの値を継承します。
2つ目の宣言はBODY要素のフォントサイズを12ポイントに設定します。「ポイント」単位は印刷ベースのタイポグラフィでフォントサイズやその他の長さに一般的に用いられます。これは環境に依存しない絶対単位の一例です。
3つ目の宣言は周囲に合わせて拡大・縮小する相対単位を使っています。「em」単位は要素のフォントサイズを基準にします。この場合、BODY要素の余白はフォントサイズの3倍の幅になります。
このセクションは規範的ではありません。
CSSは、eXtensible Markup Language [XML11]のアプリケーションなど、どんな構造化文書形式にも利用できます。実際、XMLはHTML以上にスタイルシートに依存します。なぜなら、著者が独自の要素を作成でき、ユーザーエージェントがそれをどのように表示すべきか分からない場合があるからです。
以下は簡単なXML断片です:
<ARTICLE> <HEADLINE>フリードリヒ大王がBachに会う</HEADLINE> <AUTHOR>Johann Nikolaus Forkel</AUTHOR> <PARA> ある晩、彼が <INSTRUMENT>フルート</INSTRUMENT>の準備をして 楽士たちが集まったとき、士官が到着した 見知らぬ者たちの名簿を持ってきた。 </PARA> </ARTICLE>
この断片を文書風に表示するためには、まずどの要素がインラインレベル(改行を起こさない)で、どの要素がブロックレベル(改行を起こす)か宣言する必要があります。
INSTRUMENT { display: inline } ARTICLE, HEADLINE, AUTHOR, PARA { display: block }
最初の規則はINSTRUMENTをインラインに、2つ目の規則はカンマ区切りのセレクターリストで他の要素をすべてブロックレベルに宣言しています。XMLでは要素名は大文字小文字を区別するため、小文字(例:'instrument')で書かれたセレクターと大文字(例:'INSTRUMENT')は異なるものとなります。
スタイルシートをXML文書にリンクする方法のひとつは、処理命令を使うことです:
<?xml-stylesheet type="text/css" href="bach.css"?> <ARTICLE> <HEADLINE>フリードリヒ大王がBachに会う</HEADLINE> <AUTHOR>Johann Nikolaus Forkel</AUTHOR> <PARA> ある晩、彼が <INSTRUMENT>フルート</INSTRUMENT>の準備をして 楽士たちが集まったとき、士官が到着した 見知らぬ者たちの名簿を持ってきた。 </PARA> </ARTICLE>
視覚的なユーザーエージェントは上記の例を次のように整形できます:
「フルート」という単語が段落内に残っていることに注目してください。これはインライン要素INSTRUMENTの内容だからです。
しかし、まだ期待通りの書式にはなっていません。例えば、見出しのフォントサイズは他のテキストより大きくすべきですし、著者名はイタリックで表示したいかもしれません:
INSTRUMENT { display: inline } ARTICLE, HEADLINE, AUTHOR, PARA { display: block } HEADLINE { font-size: 1.3em } AUTHOR { font-style: italic } ARTICLE, HEADLINE, AUTHOR, PARA { margin: 0.5em }
視覚的なユーザーエージェントは上記の例を次のように整形できます:
さらに規則を追加すれば、文書の表示をより詳しく指定できます。
このセクション(その下位セクションを含まない)は規範的ではありません。
このセクションでは、CSS対応ユーザーエージェントの動作モデルの一例を示します。これは概念的なモデルにすぎず、実装は異なる場合があります。
このモデルでは、ユーザーエージェントはソースを以下の手順で処理します:
値の計算の一部は、対象メディアタイプに適した整形アルゴリズムに依存します。例えば、対象メディアが画面の場合、ユーザーエージェントはビジュアル整形モデルを適用します。
CSSユーザーエージェントはこの段階で文書ツリーを変更しません。特に、スタイルシートによって生成されたコンテンツは文書言語処理系(再解析など)にフィードバックされません。
すべてのメディアにおいて、キャンバスとは「整形構造が描画される空間」を指します。キャンバスは各次元で無限ですが、実際の描画は通常、ユーザーエージェントが対象メディアに応じて確立する有限領域内で行われます。例えば、画面にレンダリングするユーザーエージェントは最小幅を設定し、ビューポートの寸法に基づいて初期幅を選びます。ページへのレンダリングでは通常、幅と高さの制約があります。聴覚ユーザーエージェントは音空間で制限を課しますが、時間には制限を課しません。
CSS 2.2のセレクターとプロパティは、スタイルシートが文書やユーザーエージェントの以下の部分を参照できるようにします:
このセクションは規範的ではありません。
CSS 2.2(およびそれ以前のCSS2やCSS1)は、設計原則のセットに基づいています:
前方・後方互換性。CSS 2.2ユーザーエージェントはCSS1スタイルシートを理解できます。CSS1ユーザーエージェントはCSS 2.2スタイルシートを読み、理解できない部分は無視できます。また、CSS未対応のユーザーエージェントもスタイル強化済み文書を表示できます。もちろん、CSSによるスタイル強化部分はレンダリングされませんが、すべての内容は表示されます。
構造化文書との補完性。スタイルシートは構造化文書(例:HTMLやXMLアプリケーション等)を補完し、マークアップされたテキストにスタイル情報を提供します。スタイルシートを変更してもマークアップへの影響はほとんどありません。
ベンダー・プラットフォーム・デバイスの非依存性。スタイルシートにより、文書はベンダー・プラットフォーム・デバイス非依存を維持できます。スタイルシート自体もベンダー・プラットフォーム非依存ですが、CSS 2.2では特定のデバイスグループ(例:プリンター)向けにスタイルシートをターゲットできます。
保守性。文書からスタイルシートを参照することで、ウェブマスターはサイト管理を簡素化し、サイト全体で一貫した外観を保てます。例えば、組織の背景色が変わった場合、変更が必要なのは1ファイルのみです。
簡潔性。CSSは人間が読み書きしやすいシンプルなスタイル言語です。CSSプロパティは可能な限り互いに独立しており、一般にある効果を達成する方法は1つです。
ネットワーク性能。CSSはコンテンツの表示方法をコンパクトに記述できます。画像や音声ファイルなど、レンダリング効果を得るために著者がよく使うものと比べて、スタイルシートはコンテンツサイズを縮小することが多いです。また、開く必要のあるネットワーク接続数も減るため、ネットワーク性能が向上します。
柔軟性。CSSは複数の方法でコンテンツに適用できます。重要な特徴は、デフォルト(ユーザーエージェント)スタイルシート、ユーザースタイルシート、リンクされたスタイルシート、文書のhead内、文書本体を構成する要素の属性内など、様々な場所で指定されたスタイル情報をカスケードできることです。
豊富さ。著者が豊富なレンダリング効果を使えることで、Webという表現媒体の豊かさが増します。デザイナーは従来のDTPやスライドショーアプリケーションでよく見られる機能を長年求めてきました。要求されたレンダリング効果の一部はデバイス非依存性と衝突しますが、CSS 2.2はデザイナーの要望実現に大きく近づいています。
代替言語バインディング。本仕様で説明しているCSSプロパティ群は視覚・聴覚の両表現に一貫した整形モデルを提供します。この整形モデルはCSS言語を通じて利用できますが、他言語へのバインディングも可能です。例えば、JavaScriptプログラムが特定要素の'color'プロパティ値を動的に変更することもできます。
アクセシビリティ。CSSのいくつかの機能は障害のあるユーザーにとってWebをより利用しやすくします:
注. CSSとHTMLを使ってアクセシブルな文書を設計する詳細は[WCAG20]を参照してください。