クールにページ分割 for Movable Type - スタイルシート

24 Dec 2007
MOVABLE TYPE TIPS - クールにページ分割 for Movable Type - スタイルシート

前回まで、PageButeを利用してのMovable Typeのページ分割化を進めてきた。基本コーディングから始まり、スタイルシートを適応させてデザインするための応用コーディングまで完了。良し準備は整った! いよいよスタイルシートを適応させて、見栄えをよくしていこうと思う。

クールを目標に!

これよりページ分割のナビゲーション部分にスタイルシートを適応させ見栄えをよくしていくが、下記を目標にスタイルシートを適応させていくことにする。

  • 横レイアウト
  • 各ボタンに背景画像
  • ロールオーバー

とまぁ、書き出してみると意外とシンプルだったりするのだが、PageButeの吐き出すコードを素直にこれをやろうとすると意外と難しかった。そのために前エントリーで、少々ひねってコーディングしたのだ。

ナビゲーション部分

<ul id="page-list">
<MTIfPageBefore>
<li id="previous-page"><$MTPageBefore delim="前に戻る"$></li>
</MTIfPageBefore>

<li><span><$MTPageLists delim='</span></li><li><span>'$></span></li>

<MTIfPageNext>
<li id="next-page"><$MTPageNext delim="次に進む"$></li>
</MTIfPageNext>
</ul>

スタイルシート

ul#page-list li {
   _display: inline;
   }

ul#page-list li span {
   width: 25px;
   height: 25px;
   background-image: url(images/page_list/active_background.png);
   color: #fff;
   text-align: center;
   font: 90%/25px Georgia, "Times New Roman", Times, serif;
   margin-right: 5px;
   display: block;
   float: left;
   }

ul#page-list li span a {
   width: 25px;
   height: 25px;
   background-image: url(images/page_list/background.png);
   display: block;
   color: #1a1a19;
   text-align: center;
   font: 90%/25px Georgia, "Times New Roman", Times, serif;
   }

ul#page-list li#previous-page a {
   text-indent: -9999px;
   background-image: url(images/page_list/left.png);
   width: 25px;
   height: 25px;
   display: block;
   float: left;
   margin-right: 5px;
   }

ul#page-list li#next-page a {
   display: block;
   text-indent: -9999px;
   background-image: url(images/page_list/right.png);
   width: 25px;
   height: 25px;
   float: left;
   }

ul#page-list li a:hover {
   background-position: 0 -25px;
   color: #fff;
   }

ボタンサイズと背景画像の設定

ロールオーバー前後 表示区域

始めに各ボタンのサイズ、画像配置から始めるのがスマートでお勧めしたい。SCREAMOでは25px四方のボタンサイズにして、"ul#page-list li span"には、「今はここのページ番号に居る!」とわかる画像、"ul#page-list li#next-previous a", "ul#page-list li#next-page a"には、前、または次のページへの画像、中ページボタン"ul#page-list li span a "に、それぞれ作成した画像をbackground-imageで設定し見栄えを確保する。リンクが張られているボタンに限り、ロールオーバー効果を加えるため、25 x 50 ピクセルサイズの画像を用意。この詳細は後述するので、とりあえず右の画像のように、ロールオーバー前後の画像をくっつけたボタンを作成して、背景画像に設定するべし。

画像サイズを決定したら、各ボタンに対応するelementにスタイルシートでサイズ指定していく。今回プロパティを設定する部分は、左右(前後)のページ移動ボタンだ。"ul#page-list li span", "ul#page-list li span a", "ul#page-list li#previous-page a", "ul#page-list li#next-page a" に以下のプロパティ設定する。

width: 25px;
height: 25px;

中ページに限り、リンクが設定されていないボタンも存在するので、"ul#page-list li span"もしっかり設定しておく。ここは結構重要。大事部分だ。

横レイアウトの設定

このままでは、ボタンが縦にずらっと出てきてしまうので、リストを横レイアウトに変更する。そのためには、適切に各elementにDisplay、floatのプロパティを設定しないといけない。設定するelementは、サイズ設定した"ul#page-list li span", "ul#page-list li span a", "ul#page-list li#previous-page a", "ul#page-list li#next-page a"の4つで、以下の2つのプロパティを設定する。

display: block;
float: left;

しかしながら、上記の方法で横レイアウトにできるのは、Firefox、Safariなどのスタイルシートをしっかり解釈できるブラウザに限られてしまい、利用者がが圧倒的に多いInternet Explorer 6には対応できない。そこでハックを利用して、強引に適応させる。

ul#page-list li {
   _display: inline;
   }

Internet Explorer 5〜6にしか解釈できないアンダースコアハックというもので、_をプロパティ名の直前に入れてやると、なんとモダンブラウザは読み飛ばし、IE5〜6にのみプロパティを設定できる比較的有名なハックだ。コードが汚くなってしまうのが難点だが、ポイントポイントで利用するととっても便利なので覚えておくと便利です。ちなみに奇跡的にIE7ではこのハックを利用することなく横レイアウトにすることができる。マジ奇跡です。

微調節

これでスタイルシートのコーディングはほぼ終了した。あとはボタンの右マージンを設定したり、フォントサイズを変更したり、自分好みに微調整するべし。なおサンプルでは、右に5pxのマージンを持たせ、文字は中央揃い、90%のサイズに行間25px、カラーは#1a1a19、セリフ系のフォントを指定しており、右(前後)のページ移動ボタンには画像のみで文字はいらないので、インデントで表示区域外に飛ばすという荒技を使っている。ちょっとわかりにくいかもしれないが、サンプルコードを凝視して確認してください。

スタイルシートだけでロールオーバー

この技は書き出すと一つのエントリーになってしまうために、ざっくり説明するにとどめておく。とりあえず、サンプルコードの一部を再度ご確認あれ。

ul#page-list li a:hover {
   background-position: 0 -25px;
   color: #fff;
   }

簡単に言うと、ロールオーバーした時に、背景画像をbackground-positionで25px下にずらすわけだ。ロールオーバー前後をくっつけた画像を作成したのもその訳である。また、ロールオーバーしたときに文字が見にくくなってしまうので、#color: #fff;"とした。

メニュー ロールオーバー

メインメニューも同様の作り

様々な可能性

以上で、PageButeを利用したページ分割の最終工程、デザインするためのスタイルシートを解説してみた。かなりごちゃごちゃしたソースを強引に解説していったため、敷居が高いように思ってしまうかもしれないが、実はまったく複雑なことはしていない。スタイルシートの基礎部分ができていれば、意味は理解できるはずだ。

PageButeは、シンプルなソースを吐き出すために、複雑なことを簡単に実現するのは難しく見える。でもこのようにスタイルシートを駆使すればレイアウトも比較的自由自在にできるし、背景画像やそのロールオーバーも可能と、可能性は無限大と言っても過言ではない。今回解説したのは、スタイルシートを適応させた一例で、好みにカスタマイズすれば、さらなる境地も開けることだろう。

Comments (5)

初めまして。いつも参考にさせていただいています。
ページ分割のスタイルシートも参考にさせていただきましたが、

_display: inline

の部分に「_」がありますよね。
一部のパソコンでは、アンダーバーがあるとUL属性のインライン表示が
無効(崩れる)になってしまいます。

返信

Aikoさん、コメントありがとうございます。
アンダーバーですが、IE5〜6用につけているものです。
ul#page-list li のリストタグのみをIE5〜6のみ、インラインにしてCSS解釈のバグを吸収しているのですが、もしliに他のプロパティを付加している場合、それ相応の対応をしないと崩れてしまうかもしれません。

紹介するのが、ちょっと複雑にしすぎたかなぁと反省しています。もう少しシンプルなスタイルシートで実現できる方法を今度記事にしますね。

返信

お返事有難うございます≦(._.)≧。

実は、ご紹介いただいたスタイルシートを少し触らせて頂いて
いますので、それも原因なのか?と思ったのですが、普段使っ
ているパソコン(Windowsxp ブラウザ=Sleipnir)では問題な
かったのですが、別のパソコンの同じブラウザで確認したとこ
ろ、ULが改行してツリー状態になっていたんです。

ちなみにIE7でもその現象は確認されました。
うかつにも13日のアップデートでIE7にしてから気がつき
ましたので、そのパソコンでIE6の時どうだったかは確認して
いません。

ブラウザによって解釈が違ったり表示が違うことは昔から多かっ
たですが、同じブラウザで違ってしまったもので、コメントさせ
て頂きました。

でも、ご紹介して頂いたスタイルシート。これが無ければかなり
苦労していたと思いますので大変感謝しています。

今後ともクールでスマートなカスタマイズのご紹介、楽しみにさ
せて頂きます(^^)。

返信

う、なんかIE7に対応してなさそうな気がしてきました・・・。
実はこのサイトのページ分割を基に書いたスタイルシートなので、素のままテストしていないんです。
ちょっと気になりますので、チェックしますね。
ありがとうございます!

返信

お忙しいところ度々申し訳ありません。

情報としてすっかり抜け落ちていましたが、こちらのサイトでは
IE7でも表示崩れは起していません。肝心な事を書き忘れて申
し訳ありませんでした。

ただ、全く同じソース(スタイルシート)を使っても、どうして
も、そのパソコンだけ表示がおかしくなりました。
スタイルシートが適用されない場合、綺麗に改行するのですが、
中途半端にツリー状に少しずつズレて改行される感じです。

アンダーバーを削除すると問題ないのですが、このアンダバー、
普通の記述では「display: inline」となっていて有りませんよね?。

いつも使っているパソコンでも崩れませんので、もしかすると私の
パソコン特有?の問題かも…とちょっと不安にもなってきました。
余計なご面倒をお掛けしてしまったようで本当に申し訳ありません。

股何か思い当たることがありましたらご報告させていただきます。

返信

Trackbacks

Trackback URL: http://www.screamo.jp/cms/mt-tb.cgi/125