CSSの実習(3) - 余白の指定。

お詫び(平成23年11月12日)
本コンテンツでサンプルとしている HTML 文書に以下のマークアップ漏れがありました。

平成23年11月10日以降に本コンテンツをご利用の方は、訂正した HTML 文書に差し替えてご利用ください。

ご迷惑をお掛け致しました事を深くお詫び申し上げます。

前回の実習(2) - フォント・テキストの指定で、文字のスタイルを一通り指定する事が出来るようになりました。

今度は、余白を指定してみましょう。

余白関連のプロパティは余白関連の主なプロパティに纏めておきましたので、そちらも適宜参照してください。

余白の指定で出来る事。

CSSを用いる事で、適切に各要素に余白を与える事が出来ます。

そうする事で、見易いレイアウトを実現する事が可能になります。

CSS での余白には二つの種類があります。

一口に余白と書いておりますが、CSS に於いては余白とされるものには二つの種類があります。

  1. まず、要素には枠線(ボーダ)を与える事が出来ます(枠線については次回解説します)。
  2. その枠線の内側(枠線が無い場合も幅零の枠線が引かれているものと考えます)の余白、すなわち内側の余白をパディングと呼びます。
  3. 一方、枠線の外側に与える余白をマージンと呼びます。

このように、余白には

  • 内側の余白(パディング)
  • 外側の余白(マージン)

の二種があると言う事になります。

そして、この二つの余白について、

  • パディングには、当該要素の背景が適用され(従って背景が透明でなければ透明にならない)、
  • マージンは常に無色透明となる

と言う違いがあります。

つまり、枠線があろうとなかろうと、この二つの余白は全くの別物と言えるのです。

余白を取る場合には、この違いを考慮してどちらにするかを決める必要があります。

今回やりたい事。

余白について、以下のように考えます。

  1. 先ず、ページ全体に余白を与えて読み易くします。
  2. 続いて、見出しには上下に大きめの余白を与えます。
    • 但し、大見出しは一番上にあるので上には見出しを与えません。
  3. 次に、段落やリストなどの本文ブロックにも上に余白を与えて区切りを明確にします。

    また、これらのブロックは段落などよりも左に余白を取って見出しとの区別を容易にします。

    尚、リストは通常の段落より更に左の余白を取って右に寄せます。

  4. 更に本文とフッタを区切る横罫線も上に大きめの余白を与えて見易くします。

    尚、下のフッタには一行程度のクレジットしかないので、それほど大きく開ける必要は無いでしょう。

この考えに基づき、各要素への余白は以下のようにする事にしましょう。

ページ全体の余白
ページ全体にも、
  • 上下に二文字、左右に一文字の余白

を与えます。

<h>要素(見出し)
見出しについては、見易くするため
  • <h1>要素(第一等級見出し)は下のみ一文字分
  • <h2>要素(第二等級見出し)は上に三文字分、下に一文字分

の余白を与えます。

その他のブロックレヴェル要素
ブロックレヴェル要素とは、CSS 及び従来の HTML 4/XHTML 1 にある概念で、見出しや段落類などの纏まったテキスト類が集まったブロックを指します。
  • HTML 5 ではブロックレヴェル要素の概念は廃止される事になっておりますが、CSS に於いては今後も厳然と存在し続けるであろう重要な概念です。

    詳しくはブロックレヴェル要素とインライン要素を御覧ください。

今回の場合、以下のものが対象となります。

<p>要素(段落)
  • 上に一文字分の余白
  • 左に二文字分の余白
<figure>要素(挿絵や図面などのブロック)
  • 上に一文字分の余白
  • 左に二文字分の余白
<ul>要素(順不同リスト)
  • 上に一文字分の余白
  • 左に四文字分の余白
  • 通常の段落が左二文字分余白を取っているので、リストも同様に左の余白が必要です。また、リストは通常の段落より字下げされる事が多く、ここでは更に二文字分の左余白を加える事としました。
<hr>要素(段落間の区切り)
  • 上に三文字分の余白
  • 下に一文字分の余白
<address>要素(文書作成者への連絡情報)
  • 上下左右とも余白は取らない
基本となる余白の設定
尚、特に指定の無い限り自動的に適用される基本となるスタイルとしては、
  • 上下左右の余白は全て零とする

事とします。

ここでは、実習としてやりたい事を挙げておりますが、もし読者の方がここで挙げているスタイルではなく、別のスタイルにしてみたいと思うのであれば、それを実際にやってみるのが何よりの実習です。

是非挑戦してみてください

実際のスタイル定義。

さて、これから実際に前回までのスタイル定義ファイル style.css にスタイルを追記していきましょう。

まずは、基本となるスタイルを。

初めに決めたように、基本となるスタイルでは余白幅を零とします。

CSS の仕様では余白幅のデフォルト値はマージン, パディングとも、上下左右ともそれぞれとなっております。

ですが、実際のウェブブラウザでは見易くするため、敢えて仕様と異なった値を与えている場合があります。

CSS を用いないウェブ文書であれば適切に見られるので良いのですが、CSS でスタイルを定義する場合はブラウザの仕様から外れたデフォルトスタイルは邪魔でしかありません。

そこで、スタイル定義ファイル style.css 内の全称セレクタに対するプロパティ定義に、以下のように追記する事でプロパティ値を変更します。

* {
    background-color: transparent;
    color: #000;
    margin: 0;
    padding: 0;
    background-color: #fff;
    color: #000;
    font-family: "MS Pゴシック", sans-serif;
    font-size: 100%;
    font-style: normal;
    text-decoration: none;
    font-weight: normal;
    text-align: left;
    line-height: 1.5em;
    text-indent: 0;
    }

ここで、

  1. margin プロパティは上下左右の外側の余白(マージン)の幅の指定
  2. padding プロパティは上下左右の内側の余白(パディング)の幅の指定

となっております。

ページ全体の余白を。

基本となるスタイルを指定したら、各要素についてもスタイルを指定して行きますが、今回は初めに決めた通り、ページ全体の余白についても考える必要があります。

ページ全体は<html>要素ですので、こちらに余白を与える事とします。

ここでは、初めに決めた通り、

  1. <html>要素に上下に二文字、左右に一文字の余白を与える

事にしましょう。

但し、前者の<html>要素の余白を零にと言うのは、全称セレクタに対するスタイル定義で定めたデフォルトのスタイルですので、わざわざ書く必要はありません。

そうすると、以下のようなスタイル定義が加筆される事になります。

html {
    background-color: #fff;
    padding: 2em 1em;
    }

ここでは、<html>要素にパディングを与えております。

<html>要素にマージンではなくパディングを与えた理由。

<html>要素にマージンではなくパディングとしたのは、<html>要素に与えた背景がこの余白にも適用されるようにしたかったからです。

CSS での余白には二つの種類がありますで解説した通り、

  • パディングには当該要素の背景が適用さる
  • マージンには背景が適用されず常に透明になる

と言う違いがあり、<html>要素の背景(白無地)を適用させたかったためパディングとしているのです。

ここをマージンとしてしまうと、それに依って生じた余白は<html>要素に与えた背景でなくなってしまいます。

<html>要素より上位の要素は存在しないので、このマージン部分の背景を CSS で定めたくても定めようがなく、結果この部分の背景はどうなるか全く分からなくなってしまいます。


ところで、文書本文となる要素は、<html>要素の直下にある<body>要素です。

と言う事は、<body>要素に<html>要素とは別に背景を指定すれば、背景を外側と内側で異なったものに出来ると言う事になります。

ここでは、基本を学んで頂くため、そこまでは触れておりませんが、興味のある方は

をご用意致しましたので、ご覧下さい。

<h>要素(見出し)へのスタイル定義。

ページ全体のスタイルを指定したら、今度は、<h>要素(見出し)について指定しましょう。

初めに指定した通り、<h○>要素へのスタイルとして

  • <h1>要素(第一等級見出し)は下のみ一文字分
  • <h2>要素(第二等級見出し)は上に三文字分、下に一文字分

の余白を与えたいと思います。

そこで、スタイル定義ファイル style.css 内の<h1>要素及び<h2>要素の要素セレクタに対するプロパティ定義に、以下のように追記する事で新たなプロパティを指定します。

h1 {
    margin-bottom: 1em;
    background-color: #ff0;
    color: #090;
    font-style: italic;
    font-weight: bold;
    font-size: 200%;
    line-height: 1.2em;
    text-align: center;
    }

h2 {
    margin: 3em 0 1em;
    background-color: #fff;
    color: #090;
    font-size: 120%;
    line-height: 1.2em;
    }

ここで、<h1>要素には下だけ新たにマージンを与えたいため、margin-bottom プロパティで下余白の幅を指定しております。

一方、<h2>要素には、三つの値を持つmargin プロパティで上・左右・下のマージン幅を一括して与えております。

その他の段落類(ブロックレヴェル要素)へのスタイル定義。

初めに決めた他のブロックレヴェル要素へのスタイルとしては、

<p>要素(段落)
  • 上に一文字分の余白
  • 左に二文字分の余白
<ul>要素(順不同リスト)
  • 上に一文字分の余白
  • 左に四文字分の余白
  • 通常の段落が左二文字分余白を取っているので、リストも同様に左の余白が必要です。また、リストは通常の段落より字下げされる事が多く、ここでは更に二文字分の左余白を加える事としました。
<figure>要素(挿絵や図面などのブロック)
  • 上に一文字分の余白
  • 左に二文字分の余白
<hr>要素(段落間の区切り)
  • 上に三文字分の余白
  • 下に一文字分の余白
<address>要素(文書作成者への連絡情報)
  • 上下左右とも余白は取らない

と言う事にしましょう。

前回までで、スタイル定義ファイル style.css には

  • <ul>要素(順不同リスト)
  • <figure>要素(挿絵や図面などのブロック)
  • <hr>要素(段落間の区切り)
  • 及び<address>要素(文書作成者への連絡情報)

要素セレクタに対するプロパティ定義は記述しておりません。

このうち、<address>要素については基本となるスタイル通りのため特に新たなプロパティを与える必要は無いので、差し当たって<p>要素に対するプロパティ定義に続けて、<ul>要素と<hr>要素に対するスタイル定義を追加しましょう。

p {
    margin: 1em 0 0 2em;
    text-indent: 1em;
    }

ul {
    margin: 1em 0 0 4em;
    }

figure {
    margin: 1em 0 0 2em;
    }

hr {
    margin: 3em 0 1em;
    }

ここまででのスタイル定義ファイルの纏め。

以上のスタイルを纏めると、スタイル定義ファイル style.css は以下のようになっているでしょう。

@charset "shift_jis";

* {
    background-color: transparent;
    color: #000;
    margin: 0;
    padding: 0;
    background-color: #fff;
    color: #000;
    font-family: "MS Pゴシック", sans-serif;
    font-size: 100%;
    font-style: normal;
    text-decoration: none;
    font-weight: normal;
    text-align: left;
    line-height: 1.5em;
    text-indent: 0;
    }

html {
    background-color: #fff;
    padding: 2em 1em;
    }

h1 {
    margin-bottom: 1em;
    background-color: #ff0;
    color: #090;
    font-style: italic;
    font-weight: bold;
    font-size: 200%;
    line-height: 1.2em;
    text-align: center;
    }

h2 {
    margin: 3em 0 1em;
    background-color: #fff;
    color: #090;
    font-size: 120%;
    line-height: 1.2em;
    }

p {
    margin: 1em 0 0 2em;
    text-indent: 1em;
    }

ul {
    margin: 1em 0 0 4em;
    }

figure {
    margin: 1em 0 0 2em;
    }

hr {
    margin: 3em 0 1em;
    }

a:link {
    color: #090;
    text-decoration: underline;
    }

a:visited {
    color: #000;
    text-decoration: underline;
    }

dfn {
    color: #090;
    }

em {
    color: #f00;
    }

このスタイル定義ファイルを適用したHTML文書を表示させると以下のようになります。

前回までのスタイル定義の場合
ブラウザのデフォルトで余白は入っておりますが、文書全体に余白は入っていないようです。
今回のスタイルを適用した場合
各要素に適切に余白が入っただけでなく、文書全体にも余白が入って見易くなりました。

更に見栄えが変わりましたね。