はじめてのスタイルシート2

基本的なHTML タグだけで、とりあえず何ページか作ってみるだけなら、それほど難しくありません。デザイン的な要素を加えるにはスタイルシートを使います。

ナビゲーション・ブロックのサンプル

CSSによって実際にどのように表現が変わるのか、以前ここのナビゲーション・バーで使っていたCSSをサンプル向けに書き直したものを紹介します。 説明は最小限ですから、実際のコードをみて、これからCSSがどんな働きをしているのかを感じ取ってください。

ナビゲーションによく使われるHTML マークアップは、このように各ページへのリンクを単純にリスト項目として並べたものです。

<ul>
<li><strong>Info</strong></li>
<li><a href="../info/index.html">Index</a></li>
<li><a href="../info/readme.html">ページの構成</a></li>
<li><a href="../info/history.html">更新履歴</a></li>
<li><a href="../info/domain.html">ドメイン取得</a></li>
<li><a href="../info/css_design1.html">Web製作</a></li>
</ul>

HTMLを初めて見た方へ
ul(unordered list)は箇条書きリストを表し、<ul>で始まり</ul>で終わります。 その中に含まれるliはリストの項目を示し、これも<li>と</li>がペアになって使われているのがわかります。<li>と</li>に挟まれてページのアドレスとタイトルが記入されているようだ、とか、aはページの移動(リンク)を示すようだ...くらいは想像できませんか?。 href="〜"はaの属性で移動先を属性値として持っています。 このように、HTMLの基本は非常に単純で、すべてこのような「入れ子構造」です。尚、liは他の多くのHTMLタグと違って単独では使えず、ulなど(他のリスト形式もある)に内包されていないと使えません。

このHTMLコードをブラウザに表示させると、以下のように箇条書きとして表示されます。

このままでも「ナビゲーション」として成立しますが、さらにスタイルシートで指定を加えることで、たとえばこのような表示にも変えることができます。

単なる箇条書きと、この「ナビゲーションバー」では、見た目は全く違いますがHTMLコード自体は、ほぼ同じです。このスタイルシートの適用方法は少しやりすぎの感がありますが、CSSの効果を示す例として見てください。

id属性、class属性の追加

ただし、このナビゲーションバーを表示させるには、HTML にCSSを適用しやすくするため、HTMLタグと属性の追加をしています。 まず、これらのナビゲーション用のリスト全体をdivタグで囲み、navbarというidを割り付けます。さらに特定の箇所の表示を変えるために少しclass属性を追加しています。ここではclass="tp"は「テーマ」、class="current"は「現在表示中」のページの示すために使いました。

HTMLパートサンプル1
<div id="navbar">
<ul>
<li class="tp"><strong>Info</strong></li>
<li><a href="../info/index.html">Index</a></li>
<li><a href="../info/readme.html">ページの構成</a></li>
<li><a href="../info/history.html">更新履歴</a></li>
<li><a href="../info/domain.html">ドメイン取得</a></li>
<li class="current"><a href="../info/css_design1.html">Web製作</a></li>
</ul>
</div>

この段階で、このHTMLをブラウザに読み込んだとしても、単純なリストとして表示されるだけです。 ナビゲーションバー風の表示にするには、さらにid="navbar"class="current"などの属性を与えたHTMLタグで囲まれた部分をどう表示させるか、これをCSSを使って書きます。

CSSがはじめての方には、わかりにくいと思いますが、ベースとなるHTMLタグに意味を持たせるため赤い文字の部分(HTMLタグと属性) を追加し、その表現方法をスタイルシートに定義することで、ページのデザインを変えようとしている、ということがわかるでしょうか?。 文字の色や配置などの情報をHTML に直接記述することを避け、その表現はスタイルシートにまかせるわけです。

idとかclassという言葉を使いましたが、これは特定のHTMLタグの識別に使われるものです。 classは「要素の分類に使われる識別子」です。同一ページ内に同じclass名がいくつあってもかまいません。 それに対しidは「固有の識別子」として使われるため『1つのページ中に同じid名が複数あってはいけない』ことになっています。また、スタイルシートにより表現が重複する指定がある場合はclassより固有の識別子であるidによる指定が優先されます。

....?何のことかわからないかもしれませんが、これでわからなくても普通です。idは多用しすぎると、その優先関係からclass指定の反映がされにくくなることがあります。使い分けがよくわからいないうちは「基本的にclass指定だけ」にしておいたほうが混乱しないでしょう。また、ここではnavbarcurrentなどのキーワードを使いましたが、これも自分で定義する部分です。navとかnaviあるいはgo-an-naiなど、制限はありますが任意のキーワードです。 ただしキーワードは、「文字の色や形、配置」などを表すものより、「意味を表す」ようなキーワードが望ましいとされています。

CSSサンプル

このナビゲーションバーに使ったスタイルシートを以下に示します。説明を/* */内に入れてありますから、じっくり見てください。尚、このCSSをそのままコピー、あるいは改造してあなたのページで使っていただいてもかまいません。

CSSパート
  <style type="text/css">
<!--
/*  #navbarのCSSサンプル  */

/* ナビゲーションバーの表示指定 */
#navbar{
  width:auto; /* ←このような記号で囲まれているこの部分はすべて注釈→ */
  height:20px;
  background-color:#AFAFAF; /* 背景色 */
  border-color:#FFFFFF #565656 #6E6E6E #D5D5D5; /* 枠の色、順番は「上、右、下、左」 */
  border-width:1px 1px 2px; /* 枠の太さ、指定が3つの時の順番は「上、左右、下」 */
  border-style:solid; /* 枠の種類、solidは単色 */
  font-size:9pt;
  color:#CCC; /* 文字色、この色指定は「#CCCCCC」と同じ意味 */
  white-space:nowrap;
  }

/* 番号なしリスト UL の表示指定 */
#navbar ul{
  margin:0 0 0 10px; /* 0の場合の単位は省略可 、指定が4つの時の順番は同様に「上、右、下、左」 */
  padding:2px 0 0; /* 指定が3つなら「上、左右、下」、もし2つなら「上下、左右」*/
  list-style:none; /* リストマークを非表示に */
  font-size:100%;
  }

/* リスト項目 LI の表示指定 */
#navbar li{
  float:left; /* 左にフロートさせて1行に納める */
  width:90px; /* フロートの幅を指定 */
  margin:0; /* マージン指定 値が1つなので「上下左右のマージンが0」*/
  padding:0; /* パディング指定 */
  border-top:solid 1px #333; /* 枠の種類、太さ、色をこのように一括で指定しても良い */
  border-right:solid 1px #999;
  border-left:solid 1px #444444;
  border-bottom:solid 1px #666;
  background-color:#666; /* リスト項目背景色 */
  background-image:none; /* 背景画像なし */
  line-height:15px; /* 行間隔 */
  text-align: center; /* 文字中揃え */
  text-indent:0;
  color:#FFF;
  }

 /* tp 背景を透明に */
#navbar li.tp{
  background-color: transparent;
  border-width: 0px ;
  padding:0 5px 0 15px;
  text-align: right; /* 文字右揃え */
  }

  /* strong 文字を強調 */
#navbar strong{font-weight:bold;}  /* 改行しないでこのようにも書ける */

 /* リンクされている文字の色指定 */
#navbar a{
  padding:0 12px;
  background-color: transparent;
  font-weight:bold;
  text-decoration:none;  /* 下線表示などの装飾なし */
  }
#navbar a:link{color:#FFF;}  /* リンク部分:表示前 */
#navbar a:visited{color:#FFF;}  /* リンク部分:表示済み */
#navbar a:hover{color:#88FFFF;}  /* リンク部分:オンマウス */
#navbar a:active{color:#333;}  /* リンク部分:オンクリック */

 /* current 表示中のページの文字、背景、ボーダーの色を変更 */
#navbar li.current{
  background-color: #668888;
  border-right-color: #888888;
  color:#FFF; 
  }
#navbar li.current a:link, /* カンマで区切って、次と同じ指定に */
#navbar li.current a:visited{ color:#ECFFFF;}  /* リスト中のリンク部分の指定 */
#navbar li.current a:hover{ color:#B0BFBF;}
-->
  </style>

指定を並べているだけですが、リストが長過ぎて読む気がしませんか?。ざっと読み方を説明すると
頭に「#」がつくとID属性、「.」がつくとクラス属性で「{」の左側は「セレクタ」と呼ばれます。
セレクタが#navbar ulであればid="navbar"の属性を持つHTMLタグに内包されるul{から}までの指定を適用する、となります。
セレクタが#navbar li.tpの場合も同様にid="navbar"の属性を持つHTMLタグに内包されるliに適用するのですが、さらにli.tpとなっているため、この場合class="tp"属性を持つliのみに適用するという意味です。

li.tpの読み方で注意が必要なのは、その間にスペースがないことです。もしli .tpとスペースが入っている場合は、liに内包されるclass="tp"属性を持つ別のHTMLタグに対して適用する、となります。

このナビゲーションは少々複雑なCSSになってしまいましたが、色とかサイズなどの表現方法を指定するだけなら、ほんの数行ですから簡単です。 また、marginとpaddingの違いはなにとか、疑問点を調べ始めると、なんとなくわかるようになるかもしれません。
この『CSSパートサンプル』をそのままコピーして適当なhtmlファイルの<head>と</head>の中に貼り、『HTMLパートサンプル』を<base>以下に貼ってブラウザに読み込ませれば、だいたいこのページのように表示されるはずです。お試しください。ただしIE6,Firefox,Safariなど新しいブラウザでは問題ないと思いますが、Win IE5.xでは、表示が乱れるかもしれません。

class="navbar"の場合

ここではナビゲーションはバーを固有の識別子を使って<div id="navbar">としましたが、要素はナビゲーションに分類されるだけと考えるとclass="navbar"のほうが自然かもしれません。そこで<div class="navbar">に置き換えたのが以下のHTMLサンプル、表示されたナビゲーションバーは同じ見た目です。

HTMLパートサンプル2
<div class="navbar">
<ul>
<li class="tp"><strong>Info</strong></li>
<li><a href="../info/index.html">Index</a></li>
<li><a href="../info/readme.html">ページの構成</a></li>
<li><a href="../info/history.html">更新履歴</a></li>
<li><a href="../info/domain.html">ドメイン取得</a></li>
<li class="current"><a href="../info/css_design1.html">Web製作</a></li>
</ul>
</div>

ただし、この場合スタイルシートもclass="navbar"で表示できるように書き換える必要があります。このclass="navbar"で使っているスタイルシートは先に使用したCSSパートの「#navbar」を「.navbar」に置換しただけなので掲載は省略します。必要であればこのページのソースの先頭にありますからどうぞ。

最後に、 CSSデザイン関連の書籍の紹介

HTMLの役割から、CSSの使われ方まで一気に加速して書いていますから、そもそも無理なことをやっているわけで、なんのことかわからないかもしれませんね....まあ、HTMLとCSSの関係を雰囲気だけでも理解していただければ良いのではないかと思います。

スタイルシート・サンプルブックの紹介

CSSに関心を持たれた方は、2004年に私がスタイルシートを書き直した時に、書店で時間をかけて選んだ一冊を紹介します。雑誌の特集はこの本の一部を紹介したような感じですから、この本だけでも十分です。CSSは、文法は単純なんですが「どのように適用するのか、それがどう反映されるのか」がわかりにくいので、豊富なサンプルを使って書かれているこの本は非常に参考になりました。さらに、紹介されているCSSサンプル、CSSを適用するために使うhtmlコードとも、特殊な書き方とかではなく、本質的でクリーンなコードですから、その点からもお勧めできます。是非読んでみてください。

  • スタイルシート・サンプルブック
  • 著者:大藤幹
  • 発行:ソシム、1900円

スタイルシートは便利なのですが、各社のブラウザのサポートレベルに差があるためブラウザごとに確認が必要(特にIE6)であったりして悩みますが、BlogのカスタマイズにはCSSが必須ですから、ある程度覚えておくと便利です。 当方でもスタイルシートを前提にページを作成していますが、まだ私もスタートラインに立ったばかりというレベルです。 私に難しい質問を向けても...わからないかもしれません、いっしょにあれこれ試していきましょう。


zspc:大藤幹氏のウェブサイト

  • 履歴
  • ページ分割 2008/07/26