wiki:pne-xhtmlcss/tips-note
 ここの情報は古いです。ご理解頂いた上でお取り扱いください。

TOC

HTMLとスタイル指定の関係

文字の大きさや色、背景色、ボックスの幅やレイアウトなどの指定は、カスケーディングスタイルシート(CSS)という言語を記述することで行います。 この節では、どのような方針でマークアップを見直したかについて説明します。

HTMLという語について

HTMLとXHTMLは、言語として文法規則が異なるといった違いはありますが、スタイル指定の観点からは特に気にする違いはありません。 ここでは、HTMLとXHTMLを総括する広い意味でのHTMLとして"HTML"という語を用います。

HTMLとスタイル指定

<h1>OpenPNEとは?</h1>
<p><img src="http://www.openpne.jp/images/top.png" alt="OpenPNE" />
SNSエンジン『OpenPNE』は、株式会社手嶋屋が中心となって...</p>

<h2>OpenPNEプロジェクトの体制</h2>
<p>OpenPNEは<a href="http://www.tejimaya.com">手嶋屋</a>の社内実験プロジェクトとして...</p>

<h2>OpenPNEプロジェクトの目的</h2>
<p><strong>「あらゆる組織にSNSを提供する」</strong></p>
<p>OpenPNE開発チームは、この目的のための最短最速の手段を選択し、プロジェクトの推進を行います。</p>

HTMLでは、このように内容がテキストで書かれています。画像も <img ~ /> といったように記述されています。 次のようにスタイルを記述することで、ブラウザで実際に表示した際の見栄えを決めることができます。

h1 {
	background-color: #0000FF;    /* 背景色を青に */
	color: #FFFFFF;               /* 文字色を白に */
	font-size: 200%;              /* 文字サイズを2倍に */
}
h2 {
	background-color: #0000FF;    /* 背景色を青に */
	color: #FFFFFF;               /* 文字色を白に */
}
img {
	float: left;                  /* 左に浮かせる */
}
strong {
	font-weight: bold;            /* 文字を太字に */
}

実際のものとは少し違いますが、このようにスタイル指定をすることでOpenPNEとは?のような見栄えが実現できます。

外部スタイルシートの利点

スタイル指定をするだけであれば、前述の例は次のように書くこともできます。

<h2 style="background-color: #0000FF; color: #FFFFFF;">OpenPNEプロジェクトの体制</h2>
<p>OpenPNEは<a href="http://www.tejimaya.com">手嶋屋</a>の社内実験プロジェクトとして...</p>

<h2 style="background-color: #0000FF; color: #FFFFFF;">OpenPNEプロジェクトの目的</h2>
<p><strong>「あらゆる組織にSNSを提供する」</strong></p>
<p>OpenPNE開発チームは、この目的のための最短最速の手段を選択し、プロジェクトの推進を行います。</p>

h2要素に注目すると、このように書いても理想とする同じ見栄えにすることができます。

しかし、これではh2要素に対するスタイル宣言をh2タグ全てに書かなければなりません。 また、そうしてしまうと文字色を変更したいといった場合に全てを書き直さなければなりません。

複数のページ(HTML)で同じスタイル指定をしたい場合も同様の問題が生じます。 スタイル宣言を外部スタイルシートに記述し、複数のページで共有することでこの問題を解消することができます。

クラスセレクタによる個別指定

外部スタイルシートを用いると1つの記述で同じスタイル指定を複数の要素に適用することができました。 しかし、これでは逆に一部だけ違ったスタイル指定をすることができません。

<h2>OpenPNEプロジェクトの体制</h2>
<p>OpenPNEは<a href="http://www.tejimaya.com">手嶋屋</a>の社内実験プロジェクトとして...</p>

<h2>OpenPNEプロジェクトの目的</h2>
<p><strong>「あらゆる組織にSNSを提供する」</strong></p>
<p>OpenPNE開発チームは、この目的のための最短最速の手段を選択し、プロジェクトの推進を行います。</p>

h2要素の「背景色を青、文字色を白」にして『OpenPNEプロジェクトの目的』だけ「背景色を赤」にしたいといった場合、HTMLが次のように記述されているとうまく指定することができます。

<h2 class="system">OpenPNEプロジェクトの体制</h2>
<p>OpenPNEは<a href="http://www.tejimaya.com">手嶋屋</a>の社内実験プロジェクトとして...</p>

<h2 class="purpose">OpenPNEプロジェクトの目的</h2>
<p><strong>「あらゆる組織にSNSを提供する」</strong></p>
<p>OpenPNE開発チームは、この目的のための最短最速の手段を選択し、プロジェクトの推進を行います。</p>

このようにclass属性が記述されているHTMLに対して、

h2 { /* h2要素に対して */
	background-color: #0000FF;
	color: #FFFFFF;
}
h2.purpose { /* class属性値が"purpose"であるh2要素に対して */
	background-color: #FF0000;
}

のようにスタイル宣言を記述すると、h2要素の文字色を白に、背景色は『OpenPNEプロジェクトの目的』を赤に、その他のh2要素を青にすることができます。

ブロックにクラスを与える

<h2 class="system">OpenPNEプロジェクトの体制</h2>
<p>OpenPNEは<a href="http://www.tejimaya.com">手嶋屋</a>の社内実験プロジェクトとして...</p>

<h2 class="purpose">OpenPNEプロジェクトの目的</h2>
<p><strong>「あらゆる組織にSNSを提供する」</strong></p>
<p>OpenPNE開発チームは、この目的のための最短最速の手段を選択し、プロジェクトの推進を行います。</p>

このように記述されていればよいと書きましたが、『OpenPNEプロジェクトの目的』の内容である、

<p><strong>「あらゆる組織にSNSを提供する」</strong></p>
<p>OpenPNE開発チームは、この目的のための最短最速の手段を選択し、プロジェクトの推進を行います。</p>

この部分も個別指定したいと思うと、p要素にもclass属性を記述しておくべきです。 しかし、各p要素に記述するのは非効率です。 このような場合、次のようにHTMLを記述することが効率的だと考えられます。

<div class="system">
    <h2>OpenPNEプロジェクトの体制</h2>
    <p>OpenPNEは<a href="http://www.tejimaya.com">手嶋屋</a>の社内実験プロジェクトとして...</p>
</div>

<div class="purpose">
    <h2>OpenPNEプロジェクトの目的</h2>
    <p><strong>「あらゆる組織にSNSを提供する」</strong></p>
    <p>OpenPNE開発チームは、この目的のための最短最速の手段を選択し、プロジェクトの推進を行います。</p>
</div>

OpenPNE2.12ではこのような考えに基づいて、パーツ単位でclass属性を記述しています。

OpenPNE2.12のパーツ

この節では、実際にどのようにパーツが分類されているのかについてを説明します。 また、分類の仕方に対するスタイル指定の方法を説明します。

パーツの分類

ログイン後のページは、h_homeを例に挙げると、

  • 検索部分
  • インフォメーション欄
  • メイン写真表示部
  • マイフレンドリスト
  • コミュニティリスト
  • 最新情報
  • マイフレンドからの紹介文

といった部品が集まってできています。 この部品をパーツと考えて分類していますが、ここで挙げた7個のパーツを全て異なるパーツとして分類しているわけではありません。

OpenPNE2.12でのパーツ分類は、構成(見栄え)が似ているパーツを同じものだと考えて、クラスを与えています。

検索部分 17.searchFormLine
インフォメーション欄 12.homeInfoBox
メイン写真表示部 11.homePhotoBox
マイフレンドリスト 36.homeNineTable
コミュニティリスト 36.homeNineTable
最新情報 38.homeMainTable
マイフレンドからの紹介文 26.friendIntroList

スタイルを適用する対象を絞り込む

h_homeでパーツが区別されていない『マイフレンドリスト』と『コミュニティリスト』はクラスセレクタで別々のスタイル指定を行うことはできません。

#Body .homePhotoBox  { background-color: #FF0000; }
#Body .homeNineTable { background-color: #0000FF; }

このようにカスタムCSSにスタイル記述を行うと、このパーツが現れるページ(h_home, f_home, c_home)の「メイン写真表示部の背景色を赤」、「9面の表の背景色を青」にすることができます。 ("#Body"を記述している理由は、セレクタの優先度(詳細度、個別性)を既存のスタイルより高くするためです。)

同一ページ内の同じパーツは区別ができませんが、異なるページで同じパーツのスタイルを別々に指定することはできます。 各ページのbody要素には、h_homeであれば、

<body id="pc_page_h_home">

のようにid属性が与えられています。 これを利用すると、

#pc_page_h_home .homePhotoBox { background-color: #FF0000; }
#pc_page_f_home .homePhotoBox { background-color: #00FF00; }
#pc_page_c_home .homePhotoBox { background-color: #FFFF00; }

のように記述することができ、メイン写真表示部の背景色を、h_homeは赤、f_homeは緑、c_homeは黄と指定することができます。

Last modified 9 years ago Last modified on Jun 19, 2008, 8:34:45 PM