CSSに於ける基本的なCSSの小技として、内容をスクロール出来るブロックレヴェル要素の作り方をご紹介します。
サイト表紙に置かれる更新案内などに利用すると良いでしょう。
まず、内容をスクロール出来るブロックレヴェル要素を実現させるための具体的なサンプルとして好ましくないマークアップを行っているHTMLを挙げましょう。
結構多くのサイトで見かけるのですが、サイトの更新案内を<textarea>要素としてマークアップしているものがあります。
例えば以下のようなものです。
<textarea rows="4" cols="32">平成19年 9月 6日△△を更新しました。平成19年 9月 1日××のコーナに□□を追加しました。平成19年 8月25日××のコーナに◇◇を追加しました。平成19年 8月17日新コンテンツ・△△を追加しました。(以下略)</textarea>
確かに、ファイヤーフォックスやインターネットエクスプローラなどのグラフィカルなウェブブラウザでは、<textarea>要素の内容は領域がcols属性及びrows属性で定められ、それを超えた内容の場合にはスクロールするように出来ております。
ですが、それはあくまでも多くのウェブブラウザがそのように実装しているだけに過ぎないのです。
そもそも、<textarea>要素はテキスト入力欄(しかも置換インライン要素)であり、内容をスクロール出来るブロックレヴェル要素ではありません。
表示効果を期待するのであれば、希望の表示効果が出る要素としてマークアップせず、その内容に相応しい要素としてマークアップし、スタイルシート言語を用いるのが順当です。
ここでは、その方法を考えて見ましょう。
まず、件の更新案内を好ましいマークアップに直しましょう。
この例で言えば、更新日と更新内容を組とした定義リスト(<dl>要素)としてマークアップするのが順当でしょう。
更に言えば、<textarea>要素と違って<dl>要素ではアンカーが自由に降ろせますので、更新されたコンテンツに素早くアクセス出来るようにしておくと便利になるでしょう。
そこで、以下のようにマークアップし直しましょう。
<dl id="history"><dt>平成19年 9月 6日</dt><dd><a href="triangle.html">△△</a>を更新しました。</dd><dt>平成19年 9月 1日</dt><dd><a href="cross.html">××</a>のコーナに<a href="square.html">□□</a>を追加しました。</dd><dt>平成19年 8月25日</dt><dd><a href="cross.html">××</a>のコーナに<a href="diamond.html">◇◇</a>を追加しました。</dd><dt>平成19年 8月17日</dt><dd>新コンテンツ・<a href="triangle.html">△△</a>を追加しました。</dd>(以下略)</dl>
適切なマークアップが出来たなら、今度はこれに対して内容がスクロール出来る適切なスタイルをCSSで記述します。
dl#history {width: 16em;height: 4.8em;margin: 1em 0 0;padding: 0.5em;font-size: 100%;line-height: 1.2em;border: #0bb solid 1px;overflow: auto;}dl#history dt {margin: 0;padding: 0;}dl#history dd {margin: 0;padding: 0 0 0 1em;}
ここで重要なのは初めの dl#history セレクタで指定される要素のスタイル定義です。
先ず、widthプロパティとheightプロパティで表示領域の横幅と高さを指定します。
高さについては、一行の高さ(line-heightプロパティ)も絡んできますので、line-heightプロパティで一行の高さを指定しておくと正確なデザインが出来ます。
line-height: 1.2em;プロパティで1.2文字分としておりますので、要素の高さを4.8文字分とする事で四行入るようにしております。続いて、overflow: auto;プロパティを指定します。
このプロパティは内容が入り切らない場合にスクロール出来るようにします。
overflow: scroll;プロパティもありますが、こちらは多くのブラウザでは内容が入り切る場合でも縦横双方にスクロールバーを表示させるようです。また、オペラ6.xでは入り切らない内容がクリップされて読めなくなります。以上の指定の上で、余白, パディング及び枠線などを適宜設定する事で読み易くします(ここでは枠線を青緑色にしております)。
以上のスタイルを当てたうえで、ファイヤーフォックスで見てみると以下のようになります。
オペラ 6.xでは要素内容のスクロールがサポートされていないため、以下のような表示になります。
もっとも、現在ではオペラはヴァージョンが既に9.xにまで達しており、実際オペラ 6.xを利用しなければならない環境もほとんど無いので、読めれば良いと割り切っても問題は無いでしょう。
最後にこの記事をまとめておきましょう。
ブロックレヴェル要素の内容をスクロール可能にするには、以下のようにします。
overflow: auto;プロパティを指定して内容が入り切らない場合にスクロールが可能になるようにする