NEW ENTRY
CSS HappyLifeの平澤さんが新しいサイト「CSS HappyLife ZERO」をオープンされたのですが、そのメニュー部分がとても素敵だったので、参考に同じようなものを作ってみました。
ちなみに全くソースコードは拝見していませんので、同じようには作られてはいないと思います。
前回の記事「アクセシビリティの高いCSSロールオーバーメニュー」を参考にすれば、比較的簡単に作れそうです。
サンプル
動作確認
Firefox3.5.7、Google Chrome 3.0、Safari 4.0.4 for Windows XPです。IE6はhoverに対応していませんので、強調する効果は得られませんが、不具合なく表示する事はできます。Opera 10.10は正常に動作しません。なぜでしょう。「ul#menu li a」に「display:inline-block;」を追加するとちゃんと動作しました。
(X)HTMLコード
<ul id="menu">
<li class="menu1"><a href="#" class="current"><img src="images/menu1.gif" alt="menu1" /></a></li>
<li class="menu2"><a href="#"><img src="images/menu2.gif" alt="menu2" /></a></li>
<li class="menu3"><a href="#"><img src="images/menu3.gif" alt="menu3" /></a></li>
<li class="menu4"><a href="#"><img src="images/menu4.gif" alt="menu4" /></a></li>
<li class="menu5"><a href="#"><img src="images/menu5.gif" alt="menu5" /></a></li>
</ul>
CSSコード
img {
border:0;
}
ul#menu {
float:left;
margin:0;
padding:0;
}
ul#menu:hover {
background: url(images/bg_menu_hover.gif) no-repeat;
}
ul#menu li {
float:left;
margin:0;
padding:0;
list-style:none;
}
ul#menu li a {
display:block;
display:inline-block;
width:100px;
height:30px;
}
ul#menu li a:hover,
ul#menu li a.current {
background-image:url(images/bg_menu_on.gif);
}
ul#menu li.menu1 a:hover,
ul#menu li.menu1 a.current {
background-position:0 0;
}
ul#menu li.menu2 a:hover,
ul#menu li.menu2 a.current {
background-position:-100px 0;
}
ul#menu li.menu3 a:hover,
ul#menu li.menu3 a.current {
background-position:-200px 0;
}
ul#menu li.menu4 a:hover,
ul#menu li.menu4 a.current {
background-position:-300px 0;
}
ul#menu li.menu5 a:hover,
ul#menu li.menu5 a.current {
background-position:-400px 0;
}
ul#menu li img {
position:relative;
z-index:-1;
}
考え方としては、リスト(ul)の背景に目立たない用のリスト画像を指定し、特定のメニューにカーソルがあったときはそのメニューだけオンマウス用の画像に切り替え、他のメニューはリストの一番下に回りこませてることにより目立たない用のリスト画像が表示されるというわけです。
また、現在表示しているページのメニューも目立たせたい場合は、a要素にcurrentというクラス名をつけて、CSSのほうで個別にスタイルを指定するとよいと思います。
INDEX
CSSの基本
- CSSを記述する際フォーマットルールを作る
- プロパティの指定順序を固定する
- DOCTYPEスイッチの3つのモードについて
- 各ブラウザの独自プロパティの実装状況
- CSS3対応のCSSセレクタ一覧
- コーディングガイドラインを作成する
- ショートハンドプロパティを使いこなす
- id名やclass名に命名規則をつける
- YUI Reset CSSを使ってデフォルトスタイルシートをリセットする
- id名、class名は意味のある名前をつける
- 各ブラウザのCSSの実装状況
- Firefoxのデフォルトスタイルシートの見方
- ボックスモデルを理解する
- セレクタを理解する
- UIのデフォルトスタイルシートの初期化方法
- スタイル適用の優先順位を理解する
CSSの小技
- カーソルを合わせたメニューを強調する
- 基本的な縦型リストの作り方
- アクセシビリティの高いCSSロールオーバーメニュー
- IE6でもposition:fixedと同じ動作をさせる(改訂版)
- 横並びにした画像にテキストが回りこまないようにする方法
- 余白のあるメニューの特定の余白を消す方法
- first-childあるいはlast-childを使用しないでリストの罫線を消す方法
- IE6でもposition:fixedと同じ動作をさせる
- CSSでドロップダウンメニュー
- IE6でも子セレクタを使う
- ちらつきのないCSSロールオーバーメニューを作る
- floatしたボックスの親要素の内容物を表示する方法
- floatしたボックスの回り込みを解除する方法
- floatで並べたリストを中央揃えする
- 横罫線hrに画像を使用してブラウザの差異を無くす
- 画像を利用して高さの違うボックスの下辺を揃える
- 2段カラムの作り方(float編)
- 垂直marginは相殺(折りたたみ)することを考えてボックスに余白をつける
- CSSのみでロールオーバー効果のメニューを作る
- 引用部分ということがわかりやすいデザインにする
- 定義リストを横並びにする
- 基準となる文字サイズを最初に決めておく
- リンクをブロック構造にする
- テキストが含まれる要素にはline-heightを指定する
- 擬似フレームを作る
- テンプレートの背景画像は固定化する
- 外部リンクか内部リンクかを視覚的にわかるようにする
- リンクをクリックしたときに表示される破線をCSSを使って消す
- リスト(liタグ)で作ったメニューを横並びにする
- リストマークを好きな画像にする
- 行間を空けてテキストを読みやすくする
- 文字サイズの異なるテキストをかぶらないようにする
- テンプレートを左右中央寄せにする
- ドロップキャップでテキストを目立たせる
- FirefoxでもOperaでもスクロールバーを出す
- Firefoxで常にスクロールバーを出す
- テンプレートをセンタリング(中央寄せ)
- ※(注釈)をつける際はぶら下げインデントを使う
- 字下げをして可読性を上げる
ヘルプ
- IEでimgにpaddingが効かない
- CSSファイル内で日本語が文字化けする
- formタグの上や下に隙間(空白)が空いてしまう
- imgタグで指定した画像の下にわずかな隙間(空白)が空いてしまう
- letter-spacingを使用したら改行がうまくいかなくなった

