<<space >>  Home>>Works>>ホームページの作り方>>簡単なWebサイトの作成2
4.簡単なWebサイトの作成2
4.1.文字の装飾  <em> <strong> <big> <small>
 <em>・・・</em>(emphasis)や <strong>・・・</strong>は、囲んだ文章を強調するためのインライン要素であり、 <big>・・・</big><small>・・・</small>は、 囲んだ文章を、その要素の前後に対して相対的に大きさを変えるためのインライン要素である。 これらが実際ブラウザでどう表示されるかは、ブラウザにもよる。


<p>ラタトゥーユとは、トマトで煮こむ、<em>南フランスの伝統的な野菜料理</em>です。</p>
<p>ラタトゥーユとは、トマトで煮こむ、<strong>南フランスの伝統的な野菜料理</strong>です。</p>
<p>ラタトゥーユとは、<big>トマトで煮こむ、<big>南フランスの伝統的な野菜料理</big>です。</big></p>
<p>ラタトゥーユとは、<small>トマトで煮こむ、<small>南フランスの伝統的な野菜料理</small>です</small>。</p>

ブラウザで読み込むと…

ラタトゥーユとは、トマトで煮こむ、南フランスの伝統的な野菜料理です。

ラタトゥーユとは、トマトで煮こむ、南フランスの伝統的な野菜料理です。

ラタトゥーユとは、トマトで煮こむ、南フランスの伝統的な野菜料理です。

ラタトゥーユとは、トマトで煮こむ、南フランスの伝統的な野菜料理です




4.2.スタイルシートの概要
 論理構造情報だけを記述する HTML に対し、 画面や印刷出力にどのように表現するかという文書の見栄えを指定するのがスタイルシートであった。 このように 2つを分けるメリットは 1章4節 で既に述べたが、 実際は、スタイルシートは HTML の一部であると考えていてもそれほど問題はない。 ただ、「スタイルシートで指定する部分はあくまで見栄えに関する部分であって、 それはブラウザや使う人によっては同じように認識されない事もあるので、 スタイルシートに依存しすぎたWebサイトはあまり好ましくない。」くらいの認識はしておいたほうがいい。
 さて、論理構造情報を与える HTML のタグの紹介がだいたい終わったところで、ここでスタイルシートについての説明をしておく。
  1. スタイルを設定したいタグに直接記述する方法。 タグの名前の指定の後に、style 属性としてスタイルを記述する。 Webページ内の要素単位に、細かく見栄えを設定するのに利用する。 詳細は 4章3節
  2. head要素内に style要素を記述する方法。 <style>・・・</style> の間に、そのページでよく使われるスタイルをあらかじめ定義しておいたりする。 Webページ単位の見栄えを設定するのに利用する。 詳細は 4章5節
  3. 外部スタイルファイルを定義し、参照する方法。 外部スタイルファイルを用意し、その中でよく使われるスタイルを定義しておき、 必要に応じて HTMLファイルに読み込ませる。 複数のHTMLファイルで同一のスタイルファイルを読み込むことで、Webサイト全体に統一した見栄えを設定するのに利用する。 詳細は 4章6節

 このように、Webサイト全体のデザインを外部ファイルで設定し、 ページごとのデザインの設定はページの冒頭の head要素内、もしくは各要素ごとで行うのが、 スタイルシートの基本的な扱い方となる。 なお、上にいく設定ほど(細かい設定ほど)、その優先度が高くなり、 例えば、ページ全体で、明朝体フォントを使うよう設定してあっても、 特定の一文にゴシックフォントを使うようにタグの style 属性で指定する事ができる。


4.3.スタイルシート ( タグに直接記述する方法 )
 タグの中に style属性があったら、それは「その要素の見栄えを指定する」ことを意味する。 3章6節 で紹介した a要素を例にしてみてみる。


<a href="index.html" style="text-decoration : underline ;">index</a>


ブラウザで読み込むと…


 上例の場合、 href属性は移動先(読み込み先)を指定するためのもので、その属性値には URLを記述している。 それと同様、 styke属性は a要素内の見栄えを指定するためのもので、その属性値には『何を(に)』『どうするか』を記述している。 『何を』『どうするか』は、「 " 『何を』 : 『どうするか』 ; " 」という形で記述され、 上の例の場合は『文書の装飾( text-decoration )に』『下線をつける( underline )』と指定している。
 3章では、タグによっては、特に詳しい説明をせずに style属性を紹介をしたので、 ここでふり返ってみたいと思う。

  • 3章4節 で紹介した p要素の style=" text-indent : 1em ; " は、 『字下げを( text-indent )』『 1em だけ実行 』と指定している ( em については 4章7節 を参照)。
  • 3章6節 で紹介した hr要素の style=" width : 50% ; text-align : left ; " は、 『幅( width )』を『 属する要素の幅の 50% にする(50%) 』と指定し、さらに 『文章の並びを( text-align )』『 左寄りにする(left) 』と指定している。
  • 3章8節 で紹介した img要素の style=" float : left ; " は、 『この画像が文章中に浮かぶ位置を( float )』『 左に固定する(left) 』と指定している。

 2つ目の例のように、 style属性の属性値(『何を(に)』『どうするか』)は、セミコロン( ; )で区切ることの中で、 一度に何個でも設定することが可能である。また、 『何を(に)』にあたる部分を属性、『どうするか』にあたる部分をと呼ぶ。
 style属性は、ほとんどのタグに使用が可能で、基本的にどんな要素でも、その要素内の見栄えを指定することができる。 よく使われる style属性の属性値を、今まで紹介してきたタグとあわせていくつか紹介する。

<h2 style=" background-color : yellow ">ラタトゥーユの作り方</h2> 
<ul style=" list-style-type : square ; font-size : 20px ; ">    <li style=" color : red ; ">輪切りにしたナス 3本</li>    <li style=" font-style : oblique ; ">乱切りした緑ピーマン 1個</li>    <li style=" font-weight : bold ; ">乱切りした赤黄パプリカ 各1個</li>  </ul> <p style=" border : 1px solid red ; line-height : 200% ; "> 
ラタトゥーユとは、トマトで煮こむ、南フランスの伝統的な野菜料理です。 日本でもポピュラーな料理なので、どこでも見かけることができると思いますが、 簡単で栄養も満点なので家庭料理としても使える一品です。</p>

ブラウザで読み込むと…

ラタトゥーユの作り方

  • 輪切りにしたナス 3本
  • 乱切りした緑ピーマン 1個
  • 乱切りした赤黄パプリカ 各1個

ラタトゥーユとは、トマトで煮こむ、南フランスの伝統的な野菜料理です。 日本でもポピュラーな料理なので、どこでも見かけることができると思いますが、 簡単で栄養も満点なので家庭料理としても使える一品です。




  1. h2 要素の『背景の色を( background-color )』『黄色にする( yellow ) 』と指定している。
  2. ul 要素によって作られる箇条書きの『先頭の記号の形を( list-style-type )』『 四角にする( square ) 』 と指定し、 ul要素内の全ての『文字の大きさを( font-size )』『 20pxにする( 20px ) 』。
  3. 1つ目の li 要素内の『文字の色を( color )』『 赤にする( red ) 』と指定している。
  4. 2つ目の li 要素内の『文字の文体を( font-style )』『 斜体にする( oblique ) 』と指定している。
  5. 3つ目の li 要素内の『文字の太さを( font-weight )』『 太くする( bold ) 』と指定している。
  6. p要素の『縁を( border )』『 1pxの赤い実線にする( 1px solid red ) 』と指定し、 『文章のラインの高さを( line-height )』『 文字の高さの2倍にする( 200% ) 』と指定している。

 

4.4.汎用要素 〜 区分(division)<div> とスパン <span> 〜
 <div>・・・</div><span>・・・</span>は、 それ自体は何も表示効果をもたらさないタグであるが、 スタイルシートと組み合わせて使うことで任意の範囲にスタイルを設定できる。 <span> がインライン要素であるのに対して、<div> は前後に改行が入るブロック要素である。 <div> は <p> とよく似ているが、 <p> と違って、段落の意味を持たせるわけではなく、標準では前後に空白がとられることもない。

<div style=" background-color : yellow ; "> ラタトゥーユとは、
トマトで煮こむ、南フランスの伝統的な野菜料理です。
日本でもポピュラーな料理なので、どこでも見かけることができると思いますが、
簡単で栄養も満点なので家庭料理としても使える一品です。</div>
<br>

<span style=" background-color : yellow ; "> ラタトゥーユとは、
トマトで煮こむ、南フランスの伝統的な野菜料理です。
日本でもポピュラーな料理なので、どこでも見かけることができると思いますが、
簡単で栄養も満点なので家庭料理としても使える一品です。</span>
<br><br>

<p>上の二つのブラウザで読み込んだときの出力結果は異なる。
<div style=" text-align : center ; font-size : 25px ; ">なぜなら</div>
div要素は<span style=" border : 1px solid red ; ">ブロック要素</span>なので、
指定した範囲を前後から<span style=" text-decoration : underline ; ">独立したブロック</span> 
としてみなすからである。</p>

ブラウザで読み込むと…

 ラタトゥーユとは、トマトで煮こむ、南フランスの伝統的な野菜料理です。 日本でもポピュラーな料理なので、どこでも見かけることができると思いますが、 簡単で栄養も満点なので家庭料理としても使える一品です。

 ラタトゥーユとは、トマトで煮こむ、南フランスの伝統的な野菜料理です。 日本でもポピュラーな料理なので、どこでも見かけることができると思いますが、 簡単で栄養も満点なので家庭料理としても使える一品です。

上の二つのブラウザで読み込んだときの出力結果は異なる。

なぜなら
div要素はブロック要素なので、 指定した範囲を前後から独立したブロック としてみなすからである。






4.5.スタイルシート ( head要素内に style要素を記述する方法 )
 4章3節では、スタイルシートをタグにスタイル属性として直接記述することで、 要素ごとに見栄えを指定する方法を紹介した。ただ、 文字の大小や色を細かく変化させうrことで文章に迫力をもたせるテキスト系サイトのような例外を除いては、 要素ごとに見栄えを変化させすぎると、かえって見にくくなってしまう事も多い。 よって、ページ内のデザインに統一感を持たせようとすると、同じスタイルを設定することが多くなる。
 そのような時、HTML文書の本文である body 要素の前に書かれるhead 要素内に style 要素を加え、 <style type="text/css">・・・</style> の間に、そのページでよく使われるスタイルをあらかじめ設定しておくとよい。 例えば、このページでは重要な用語や強調したい文章に、


<span style=" color : #ca4028 ; font-weight: bold ; ">・・・</span>


を多用している( あいうえお←これ )。 使うたびにタグに記述してもよいが、次のようにあらかじめ設定しておけばよい。


<html lang="ja-JP">
<head>
 ・
 ・
 ・
<style type="text/css">
<!--

.mark{ color : #ca4028 ; font-weight : bold ; }

//-->
</style>
</head>

<body>
 ・
 ・


 .mark{ color : #ca4028 ; font-weight : bold ; }では、 『クラス mark は、 color 属性の値を #ca4028 、 font-weight 属性の値を bold と指定する時に使うものである』 と定義しており、くだいて言えば 『このページでは、色が #ca4028(黒っぽい赤)で太い文字を使いたい時は、 mark というクラス名を、使いたい要素のタグに書いてくれれば、要素内の文字をそのような見栄えにするよ。』という意味である。 これさえはじめに定義しておけば、<div> ・ <span> ・ <p> といったタグに、 「色が #ca4028で太い文字にする、クラス mark に属していますよ。」という意味で、


<span class=" mark "> ・・・ </span>


と書けば、style="color:#ca4028 ; font-weight:bold;" と指定した時と同じ効果を得ることができる。
 クラスを利用すると、複雑な見栄えを繰り返し使う場合も記述が楽になったり、 「強調」「重要語」「見出し」といったような意味でグループ化しておくことで文書が読みやすくなったり、 また、任意のクラスにおける表現の仕方を変更したい時に定義部分だけを変えるだけで済んだりするといったメリットがある。

 ところで、クラスの定義( .mark{ color:#ca4028 ; font-weight:bold ;} )の時、クラス名 mark の前のピリオド( . )は必要であるが、 この記述は、タグの種類に依存しないクラス名を指定する時に使われる。よって、mark は、span だけでなく、div やその他のタグにも利用できる。
 一方ピリオドの前に任意のタグ名を書けば、そのタグに依存するクラス名を指定することができる。つまり

 
 span.mark{ color : red ; font-weight : bold ; }        
 div.mark{ color : black ; font-weight : bold ; }


としておけば、span要素で使う時と div要素で使う時とでは、 同じクラス名 mark を指定しても色が異なる太字となる。


※補足1:複数のタグに指定することができるクラスに対し、 特定の要素ひとつに指定する方法に ID がある。 ある重要な要素の見栄えをあらかじめ設定しておいたりするのに使われ、 以下のように定義・指定する。


#copyright{ font-size : 10px ; white-space : nowrap ; }

<span ID="copyright">Copyright(c) 2003 Mr.HAMACCO All Rights Reserved.</span>


※補足2:特定のタグ名によるページ内の全ての要素に対し、同じ styke属性を与えることができる。


      img{border: 2px solid black}
div small{font-size: 10pt;}


 1番目は、このページの全ての画像( img 要素)に 2px の黒縁をつけることを指定している。  2番目は、div 要素の中にある small要素に含まれる文字を 10pt にすると指定している。


補足3:以上のように style 要素内では、クラス名・ID・タグ名のいずれかを先頭にもってきて、 それをかぎ括弧 { }の中でいろいろと見栄えの設定を行う。かぎ括弧の前の部分を、 「どの要素を設定するか選択する」という事からセレクタと呼ばれ、 かぎ括弧の中の 属性 : 値 ; は、 「その要素をどのような見栄えにするのか宣言する」という事から宣言と呼ばれる。


補足4:セレクタに a:〜を記述することで、 a要素のリンクに関する定義済みクラスを指定することができる。 【文書3-6b】のように、 何も指定していないページの a要素内のテキスト(つまりリンクがはられた文字)は、 「過去に読み込んだことがなければ青、あるなら紫」といったような標準設定がされているが、ブラウザによって異なる。 背景が青や紫のWebサイトでは、この設定では見にくい。そこで、


a:link{color:black ;text-decoration:none;}
a:visited{color:black ;text-decoration:none;}
a:hover{color:white ;text-decoration:none;}


たとえばこのように設定しなおすと、過去に読み込んだことがあっても( link )なくても( visited )黒文字だが、 マウスがふれたときだけ白文字になるようになる。 もちろん、背景が青や紫でないページにも使用できるので、サイトのデザインにあわせて設定すればよい。


補足5:上に示した head 内の記述例で、style要素をコメントアウトしている( <!-- と //--> でくくっている)のは、 スタイルシート未対応ブラウザを考慮してのことであり、このように記述することが推奨されている。




4.6.スタイルシート ( 外部スタイルファイルを定義し、参照する方法 )
 4章5節では、 head要素内であらかじめよく使うスタイルを定義しておく方法を紹介した。 ここではそれを、Webページ単位の設定から、ページの集合であるサイト全体の設定にする方法を紹介する。
 Webサイト構築の基本は、ひとつのサイトごとにテーマを決め、デザインや構造に統一感を持たせることである。 ページによって全く異なったデザインや構造をしていては、閲覧しにくくなってしまうからだ。 よって、1つのWebページ内でよく使われるスタイルの設定は、 他の全てのページでもよく使われることが多いのである。 そう考えると、複数のページに共通して使われるようなスタイルの定義を、 各ページの head要素内でおこなうの効率が悪い。 よって、別に外部スタイルファイル(拡張子は .css)を用意して、 その中でよく使われるスタイルを定義しておき、その定義されたスタイルが欲しいファイルが、 リンクによって参照するようにする方法があるのである。 この方法を利用すれば、外部ファイルのスタイルの定義を変更することで、 全体的な見栄えを一括して変えることも可能となるのである。

 例えばWebサイトの背景は、全てのページにおいて統一されていることが多い。 ちなみに背景を設定するには、body要素の style属性を、


<body style="background-color:#FFFFFF ; background-image:url("background.gif") ;
             background-repeat:no-repeat ; background-attachment:fixed ;">

というように設定するか、もしくは head要素の style要素内で、

     
body{background-color: #FFFFFF;
     background-image: url("background.gif");
     background-repeat: no-repeat;
     background-attachment: fixed;}

と定義すればよい。ちなみにこの設定結果が、このページの背景で、 URL が background.gif である画像を背景として用い、 繰り返さず( no-repeat )、bodu要素内の文章のスクロールと一緒に動かずに固定( fixed )するように設定してある。
 上の2つのうちの一方を、各ページに記述してもかまわないが、外部スタイルファイルを作成したほうがよい。 その方法は、メモ帳などで新規テキストファイルを作成し、 style要素内の定義(上の例の2つ目)をそのままコピーして、それを拡張子を .css に変えて保存するだけである。 body要素の属性以外にも、複数のページで参照しているようなスタイルの定義を全て書き出した、 このサイトで使われているスタイルファイルが、 【style.css】である。
 そして、そのスタイルファイルを参照したい(定義されているスタイルを使用したい)ページには、 head要素内の link要素を用いて


<link rel="stylesheet" type="text/css" href="スタイルファイル名.css">

と関係づければよい。 

4.7.スタイルシートにおける長さと色の設定
 まず長さの設定であるが、絶対値による指定として、 mm(ミリメートル)、 cm(センチメートル)、 in(インチ)、 pt(ポイント)、 pc( 12pt = 1pc )がある。 そして相対値による指定として、em(要素内の大文字の M の高さを1とする)、 ex(要素内の小文字の x の高さを1とする)、px(コンピュータ画面上の1ピクセル。画面サイズによって大きさが変わる)、 % (指定する要素の前後との相対的な大きさを割合で指定する)がある。

 次に色の設定であるが、以下の3つの方法がある。
  1. #RGNによる指定。R・G・B にそれぞれ 0〜255までの数値を16進数で指定することで、赤・緑・青の度合いを指定する。 黒(#000000)白(#FFFFFF)赤(#FF0000)水色(#00FFFF)。
  2. rgb(R,G,B) による指定。R・G・Bにそれぞれ、 0〜255までの数値か0〜100%の割合を指定する。
  3. 色名による指定。次の16色はW3Cで定義されている。
    red, lime, blue, black, gray, silver, white, maroon, green, navy, purple, olive, teal, yellow, fuchsia, aqua
 

4.8.要素間の空白 〜 padding と margin 〜
_
 ブラウザで読み込んだときに、要素の周りに余白を作りたい場合は、 style属性 で余白の長さを設定すればよい。 余白は次の2種類に分けられる。
  • 要素内のコンテンツ(タグで囲まれた部分。文字や要素、もしくはそれらの組み合わせ)から、 その要素の境界線( border )までの余白。その距離を padding 属性 で設定する。
  • 余白を作る対象の要素の境界線から、その要素を含んでいる上位レベルの要素、 もしくは隣り合った同レベルの要素か文字までの余白。その距離を margin 属性 で設定する。
padding 属性や margin 属性の値は、 4章7節 で紹介した数値を使って、 次のいずれかの方法で設定する。 なお、境界線の太さ( border-width )も同様に設定ができる。


padding: a       ;  a=四方
padding: a b     ;  a=上下  b=左右
padding: a b c   ;  a=上    b=左右  c=下
padding: a b c d ;  a=上    b=右    c=下  d=左


 padding と margin は言葉だけで理解しようとするとややこしいが、 図で一度理解してしまえばそれほど難しいものではない。 W3Cでも図を用いて説明がなされているが、 もう少し見やすい図をここに用意した。
paddingとmargin
【図1】

 赤で示した要素1と青で示した要素2はともにインライン要素で連続して並んでおり、 黄色で示した要素0内にその2つの要素が含まれている。 また、『E1』と書かれた赤い四角形と、『E2』と書かれた青い四角形は、 それぞれ要素1と要素2のコンテンツである。 コンテンツというのは、つまり、開始タグと終了タグで囲まれた部分のことで、 『ラタトゥーユとは、トマトで煮こむ、南フランスの伝統的な野菜料理です。』といった文章や、 画像(img 要素)や span要素といった他の要素、 もしくは『ポイントとなるのは、<span class="mark">オイルが冷たいうちからいためていくことです。</span>』 といったように文字と要素が組み合わさったものでもかまわない。
 ここでは簡単のため、『E1』『E2』という2文字を、それぞれのコンテンツとすれば、


span.e0{padding:6px 10px 6px 10px ; 
        border:4px solid black ; background-color:yellow ;}
span.e1{padding:17px 7px 17px 12px ; margin:5px 25px 5px 18px ;
        border:2px solid black ;  background-color:red ;}
span.e2{padding:9px 17px 7px 7px ; margin:7px 5px 10px 7px ;
        border:2px solid black ;  background-color:blue ;}

<span class="e0">
   <span class="e1">E1</span>
   <span class="e2">E2</span>
</span>

という文書によって、【図1】のような出力結果を得ることが、定義的にはできる。

 さて、ここで赤の要素1に注目して、 padding 属性と margin 属性によって設定れる余白がどこであるかを見て行く。 paddingとmargin
【図2】

 E1-PT・E1-PR・E1-PB・E1-PLは、それぞれ要素1の padding 属性 によって設定される、 上(top)・右(right)・下(bottom)・左(left)の余白であり、


padding:E1-PT E1-PR E1-PB E1-PL ;

でその長さが指定される。MT・MR・MB・MLも同様に margin 属性によって設定される余白である。
 【図2】を見て明らかなのは、padding 属性によって設定される余白は、 境界線(E1-border)の内側に対して、margin 属性によって設定される余白は外側となる。 また、background-color 属性によって、要素1は赤い背景色をもっているが、 この背景色が得られるのは padding 属性によって設定される余白のみで、 margin 属性によって設定される余白は透明であり、結果、 要素0の背景色である黄色となる。
つまり、background-color 属性によって背景色を設定せず( padding属性によって設定される余白も透明 )、 そしてborder属性で境界線はなしと設定すれば、padding 要素による余白と margin 要素による余白の境は分からなくなる。
 要素2には要素1と同様の説明ができるので省略し、次に要素1と要素2を含んでいる要素0に注目してみる。 paddingとmargin
【図3】

 E0-PT・E0-PR・E0-PB・E0-PLは、それぞれ要素0の padding 属性 によって設定される余白であるが、 注目すべきはどこを要素0のコンテンツとしてみなすかである。 当然、<span class="e0">・・・</span> に含まれる部分であるので、 要素1 <span class="e1">E1</span> と要素2<span class="e2">E2</span> を完全に含むことになる。 それは、要素1と要素2の padding 属性によって設定される余白も、margin 属性によって設定される余白も、すべて、 コンテンツとして含まれるのである。
 【図2】と【図3】を見て注意しなければならないのは、 任意の要素1の境界線( border )から、それを含む要素0の境界線までの余白は、 要素1の margin 属性による余白と要素0の padding属性による余白の和によって成り立つが、 その境は区別できない。また、任意の要素1の境界線から、それと隣り合う同レベルの要素2の境界線までの余白は、 W3Cの説明によれば、 要素1の margin 属性による余白と、要素2の margin 属性による余白のうち、大きなほうをとり上図のようになるとされている。 しかし実際は、【図4】のように要素1の margin 属性による余白と、要素2の margin 属性による余白の和として表示され、 『Microsoft Internet Explorer』や『Netscape Navigator』でもそのように表示される。


※補足:『Microsoft Internet Explorer 6.0 』は、この余白については、W3Cの定義にかなり忠実である。 しかし、5.0以前や『Netscape Navigator』はかなり定義とは異なった解釈をしており、 たとえば、【図3】で見た、要素0のコンテンツは、 【図5】という、 バグとしか言いようのないとらえ方をしてしまっている。 私のサイトのアクセス解析から見ると、現在のブラウザのシェアは、 『Microsoft Internet Explorer 6.0 』が5割以上をしめているが、 それ以外のブラウザでは表示バグの原因となるので、 padding属性とmargin属性を複雑に組み合わせることはさけたほうがよい。


【文書3-6a】にこのページで紹介したスタイルシートを使用し ( 【文書4-1a】 ) 、 ブラウザで読み込むと【文書4-1b】となる。


Copyright(c) 2003 Mr.HAMACCO All Rights Reserved. space