スタイルシートマニア

ホームページカスタマイズ Tips

ナビゲーションメニュー(実用編Ⅲ)

ナビゲーション画像を一枚にしてナビゲーションを作るのって難しくてできない!っという人のために、簡単に作るコツをお教えしましょう。
今回は今まで作っていきた以下の画像を使って簡単なものからやってみます。

この画像のポイントは同じ間隔の箱(長方形)で全項目を作っているところにあります。こうするとどうして簡単なのか?というと、一つ一つの項目に横幅を設定しなくても#menu08 li a に横幅を設定するだけで一括設定されることと、各項目の背景画像が簡単な足し算で設定できるのです。

この画像の項目ひとつにつき横幅100px立幅30pxで作ってあります。
つまり#menu08 li aの設定をwidth: 100px;height: 30px;に設定すれば、各項目の横幅と立幅の設定が完了します。
そして、とっても面倒な背景画像の設定ですが、横幅が100pxで固定されているので項目ひとつが増えるたびに、-100pxプラスしていけば簡単に設定ができるのです。
そしてそして、ロールオーバー時の設定ですが、off時の背景画像の設定が完了していればその設定のまま下に並んでいる画像位置を設定するだけで簡単にできます。この場合で言えば、立幅が30pxなので、縦位置を-30pxに設定すれば完了です。

#menu08 ul {
 width: 600px;
 margin-top: 2em;
}
#menu08 li {
 display: inline;
}
#menu08 li a {
 width: 100px;
 height: 30px;
 float: left;
 display:block;
 text-decoration: none;
 font-size: 0;
 text-indent: -9999px;
 outline: none;
}
#menu08 #home01 a {
 background: url(../img/navi08.gif) 0 0 no-repeat;
}
#menu08 #cms01 a {
 background: url(../img/navi08.gif) -100px 0 no-repeat;
}
#menu08 #source-branch01 a {
 background: url(../img/navi08.gif) -200px 0 no-repeat;
}
#menu08 #homepage-recommendation01 a {
 background: url(../img/navi08.gif) -300px 0 no-repeat;
}
#menu08 #source-marine01 a {
 background: url(../img/navi08.gif) -400px 0 no-repeat;
}
#menu08 #production-rate01 a {
 background: url(../img/navi08.gif) -500px 0 no-repeat;
}
#menu08 #home01 a:hover {
 background-position: 0 -30px;
}
#menu08 #cms01 a:hover {
 background-position: -100px -30px;
}
#menu08 #source-branch01 a:hover {
 background-position: -200px -30px;
}
#menu08 #homepage-recommendation01 a:hover {
 background-position: -300px -30px;
}
#menu08 #source-marine01 a:hover {
 background-position: -400px -30px;
}
#menu08 #production-rate01 a:hover {
 background-position: -500px -30px;
}

サンプル

ナビゲーションメニュー(実用編Ⅱ)

今までは、CSSベースでナビゲーションをデザインしていましたが、今回からは画像を使ってナビゲーションを作っていきます。CSSだけだと、どうしてもやれる事に制限が出てきてデザインが自由にできない状況でしたが、画像を使うことでフォントを自由に選択できたり、細かなデザインも可能になります。

今回のポイントは#menu07 li a のfont-size: 0;でテキストを小さくしてtext-indent: -9999px;で画面外に飛ばし、その後に各項目にIDを振り分けて画像をbackgroundで指定・位置を調整することにあります。ちなみにdisplay:block;にしないと画像は表示されないので注意してください。僕も時々忘れてて、「なんで写らないんだ!」っということが間々あります(最近は原因が分かっているのですぐ対処できますけど)

<div id="menu07">
<ul>
<li id="home"><a href="http://source-marine.net/css-mania">Home</a></li>
<li id="cms"><a href="http://source-marine.net/cms/"CMS</a></li>
<li id="source-branch"><a href="http://source-branch.net/">ソースブランチ</a></li>
<li id="homepage-recommendation"><a href="http://source-marine.net/homepage-recommendation/">HPのすすめ</a></li>
<li id="source-marine"><a href="http://source-marine.net/">ソースマリン</a></li>
<li id="production-rate"><a href="http://source-marine.net/production-rate/index.html">制作料金</a></li>
</ul>
</div>
#menu07 ul {
 width: 600px;
}
#menu07 li {

 display: inline;
}
#menu07 li a {
 width: 100px;
 height: 30px;
 float: left;
 display:block;
 text-decoration: none;
 font-size: 0;
 text-indent: -9999px;
 outline: none;
}
#menu07 #home a {
 background: url(../img/navi07.jpg) 0 0 no-repeat;
}
#menu07 #cms a {
 background: url(../img/navi07.jpg) -100px 0 no-repeat;
}
#menu07 #source-branch a {
 background: url(../img/navi07.jpg) -200px 0 no-repeat;
}
#menu07 #homepage-recommendation a {
 background: url(../img/navi07.jpg) -300px 0 no-repeat;
}
#menu07 #source-marine a {
 background: url(../img/navi07.jpg) -400px 0 no-repeat;
}
#menu07 #production-rate a {
 background: url(../img/navi07.jpg) -500px 0 no-repeat;
}
<a title="ナビゲーションメニュー(実用編Ⅱ)サンプル" href="http://source-marine.net/css-mania/sample081005 " target="_blank">サンプル</a>

ここで、画像を使うんなら、はなっから
<li><a href=”http://source-marine.net/css-mania/><img src=”home.gif” width=”100″ heigth=”30″ alt=”home” /></a></li>
にすればいいのではないか?っという疑問も当然出てくると思います。

まあ、これでも別にかまいませんし、間違いでもありません。ただ僕の見解としては、SEO的に若干不安なのでそれぞれの項目にIDを振り分けて設定しています。それというのも、以前の記事にも書いたように極力無駄なタグは省くというのが、SEOにおける「最適化」であり、またスタイルシートの「原点」だと僕は思っています。

<li><a href=”http://source-marine.net/css-mania/><img src=”home.jpg” width=”100″ heigth=”30″ alt=”ホーム” /></a></li>
<li id=”home”><a href=”http://source-marine.net/css-mania/>ホーム</a></li>

上の二つのタグを比べたら分かると思いますが、そこまで劇的に違わないにしろ僕のやり方の方がタグが短くなっていることがわかると思います。ここだけで言えば小さなことですが、これが積み重なると大きな違いになります。この違いが、同じくらいのステータスを持っている二つのホームページがひとつ上に出られるかどうか?っという要因のひとつになりえると僕は思います。

まあ、確かにメンテナンス性は少し落ちますし、これをやったからと言ってそんなに違わないとは思いますので、そこまで気を使わなくてもいいと思いますが、コーディングをやる人間としてはこれくらいのことはできなければいけないと思います。

画像を一枚にして位置を調整することに関しては次回、解説します。

ナビゲーションメニュー(実用編Ⅰ)

さて、今まではCSSだけでナビゲーションを作ってきましたが、CSSだけではやれることに何かと制限が多いので画像を取り入れたナビゲーションを作ってみます。

今回は前回使ったCSSナビゲーションに背景の画像を入れて見栄えをもうちょっと凝った感じに変えてみましょう。
今回のポイントは#menu06 li a のbackground: に url(../img/navi-bg01)で画像を指定して、 repeat-x;で画像を横にリピートさせているところにあります。

#menu06 ul {
 width: 600px;
 margin-top: 2em;
 border-left: 1px solid #999;
}
#menu06 li {
 display: inline;
}
#menu06 li a {
 background: url(../img/navi-bg01.jpg) repeat-x;
 width: 75px;
 height: auto;
 padding: 3px 10px;
 float: left;
 border-top: 1px solid #999;
 border-right: 1px solid #999;
 border-bottom: 1px solid #999;
 display:block;
 text-decoration: none;
 font-size: 0.8em;
 font-weight: bold;
 color: #fff;
}

サンプル

これでかなりできることに幅が出てきたんじゃないかと思います。

ナビゲーションメニュー(応用編Ⅱ)

今回は、li aの横幅を固定したタイプのナビゲーションを作ってみようと思います。

このタイプは、1つのli aに入りきる文字数を見計らいながら設定しなければいけません。今まで使ってきた文字列は入りきれなかったので、文字列を若干変えてfont-size: 0.8em;で文字サイズを変更、元々の設定でletter-spacing: の幅を変更していたのでletter-spacing: 0;でリセットしてli aに収まるように設定しました。

<div id="menu05">
<ul>
<li><a href="http://source-marine.net/css-mania">Home</a></li>
<li><a href="http://source-marine.net/cms/">CMS</a></li>
<li><a href="http://source-marine.net/source-branch/">ソースブランチ</a></li>
<li><a href="http://source-marine.net/homepage-recommendation/">HPのすすめ</a></li>
<li><a href="http://source-marine.net/">ソースマリン</a></li>
<li><a href="http://source-marine.net/production-rate/index.html">制作料金</a></li>
</ul>
</div>
#menu05 ul {

 width: 600px;
 margin-top: 2em;
 border-left: 1px solid #ccc;
}
#menu05 li {
 display: inline;
}
#menu05 li a {
 background: #ddd;
 width: 75px;
 height: auto;
 padding: 2px 10px;
 float: left;
 border-top: 1px solid #ccc;
 border-right: 1px solid #ccc;
 border-bottom: 1px solid #ccc;
 display:block;
 text-decoration: none;
 font-size: 0.8em;
 letter-spacing: 0;
 color: #333;
}
#menu05 li a:hover {
 background: #fff;
 border-right: 1px solid #ccc;
}
<a title="ナビゲーションメニュー(応用編2サンプル)" href="http://source-marine.net/css-mania/sample080921 " target="_blank">サンプル</a>

ナビゲーションメニュー(応用編Ⅰ)

前回までは、縦に項目が伸びていく縦軸のナビゲーションでしたが、今回はちょっとればるアップして横に項目を並べていく横軸のナビゲーションを作成します。

今回のポイントは、#menu04 li のdisplay: をinline;にして#menu04 li aのfloat: left;にすることで項目を横に並べることにあります。
更に横幅には限界があるので1つの項目に対して「どれだけの横幅を取るか?」を考慮しなければいけません。これには、「各項目の横幅を同じサイズに設定するパターン」、「各項目の文字列に合わせて大きさをautoで一つ一つ設定するパターン」、「項目1つ1つに横幅を設定するパターン」などなどがあります。
今回は、「各項目の文字列に合わせて大きさをautoで一つ一つ設定するパターン」を作ってみます。横幅の関係でメニュー項目の文字列を若干変更しています。

#menu04 ul {
 width: 600px;
 border-left: 1px solid #ccc;
}
#menu04 li {
 display: inline;
}
#menu04 li a {
 background: #ddd;
 width: auto;
 height: auto;
 padding: 2px 10px;
 float: left;
 border-top: 1px solid #ccc;
 border-right: 1px solid #ccc;
 border-bottom: 1px solid #ccc;
 display:block;
 text-decoration: none;
 color: #333;
}
#menu04 li a:hover {
 background: #fff;
 border-right: 1px solid #ccc;
}

サンプル

以上で完成です。

ナビゲーションメニュー(基本Ⅲ)

今回はナビゲーションにボタンのような効果を付けてみます。

今回のポイントはborderプロパティでoff時にoutset、hover時にinsetを使う事でボタンのエンボス(出っ張り)のような表現を演出する事にあります。

<div id="menu03">
<ul>
<li><a href="http://source-marine.net/css-mania">ホーム</a></li>
<li><<a href="http://source-marine.net/cms/">コンテンツマネージメントシステム</a></li>
<li><a href="http://source-marine.net/source-branch/">>ソースブランチ</a></li>
<li><a href="http://source-marine.net/homepage-recommendation/">ホームページのすすめ</a></li>
<li><a href="http://source-marine.net/">ソースマリン</a></li>
<li><a href="http://source-marine.net/production-rate.html">制作料金</a></li>
</ul>
</div>
#menu03 ul {

 width: 210px;
}
#menu03 li a {
 background: #ddd;
 width: 200px;
 height: 25px;
 padding-top: 5px;
 padding-left: 10px;
 border: 2px outset #ccc;
 display:block;
 text-decoration: none;
 color: #333;
}
#menu03 li a:hover {
 background: #fff;
 border: 2px inset #ccc;
}

どうでしょう?ちょっと押してみたくなりませんか?(笑)

ナビゲーションメニュー(基本Ⅱ)

今回は先日作ったナビゲーションをちょっとアレンジしてみます。

基本的には先日作成したものと同じ仕様ですが、今回は見た目をシンプルにして、ロールオーバーした時のアクションに一工夫加えてみます。

<div id="menu02">
<ul>
<li><a href="http://source-marine.net/css-mania"">ホーム</a></li>
<li><a href="http://source-marine.net/cms/">コンテンツマネージメントシステム</a></li>
<li><a href="http://source-marine.net/source-branch/"">ソースブランチ</a></li>
<li><a href="http://source-marine.net/homepage-recommendation/">ホームページのすすめ</a></li>
<li><a href="http://source-marine.net/">ソースマリン</a></li>
<li><a href="http://source-marine.net/production-rate.html">制作料金</a></li>
</ul>
</div>

背景色を白で統一、boderを各項目の下線だけにします。そして、ロールオーバーのアクションでtext-align: right;を使ってテキストを右寄せにして、border-right: 10px solid #600;で付箋のような演出を加えるとちょっとクール!かも?最後に、padding-right: 5px;で文字位置を調整して完成です。

#menu02 ul {
 width: 210px;
}
#menu02 li a {
 background: #fff;
 width: 210px;
 height: 25px;
 padding-top: 5px;
 border-bottom: 1px solid #666;
 display:block;
 text-decoration: none;
 color: #333;
}
#menu02 li a:hover {
 background: #fff;
 width: 195px;
 padding-right: 5px;
 text-align: right;
 border-right: 10px solid #600;
}

ナビゲーションメニュー(基本Ⅰ)

ナビゲーションメニューはホームページ制作において必要不可欠なパーツと言えます。

※大前提として、マージンその他もろもろの設定はbass.cssでリセットしているものとします。詳しくは、CSS初期設定のリセットをご覧下さい。

まずは、基本的な作り方でホームページの左や右に配置する縦に並べるナビゲーションを作ってみます。
一般的にナビゲーションのマークアップにはul要素とli要素を使ってマークアップします。

<div id="menu01">
<ul>
<li><a href="http://source-marine.net/css-mania">ホーム</a></li>
<li><a href="http://source-marine.net/cms/">コンテンツマネージメントシステム</a></li>
<li><a href="http://source-marine.net/source-branch">ソースブランチ</a></li>
<li><a href="http://source-marine.net/homepage-recommendation/">ホームページのすすめ</a></li>
<li><a href="http://source-marine.net/">ソースマリン</a></li>
<li><a href="http://source-marine.net/production-rate/index.html">制作料金</a></li>
</ul>
</div>

まず、#menu01 ulで<div id=”menu01″>の中のul要素に対して横幅を210pxに設定します。横幅は全メニューの文字列が収まる大きさに揃えます。次に、ボーダーの設定ですが、今回はそれぞれのメニューをぴったりくっつけた形のナビゲーションにしますので、ul要素にもボーダーのスタイルを入れていきます。これがもし、一つ一つのメニュー項目に、ある程度の間隔があるタイプのナビゲーションであれば、li a にborder: 1px solid #ccc;とういうような記述だけでOKなのですが、今回はulに上、右、左にボーダーを入れて、li a で各項目に下のボーダーを入れていきます。

#menu01 ul {
	width: 210px;
	border-width: 1px 1px 0 1px;
	border-style: solid;
	border-color: #ccc;
}

今回のデザインにリストマーカーは邪魔なのでlist-style: none;で消しておきます。

#menu01 li {
	list-style: none;
}

次に、リストのリンク要素に対してスタイルを設定します。

まず、backgroundで背景色を指定、横幅を200pxでpadding-leftを10pxで文字位置を調整して合計210px、縦幅を25pxでpadding-topを5pxにして文字の位置を調整して合計30pxに設定します。次に、display:block;でlistをブロック要素にかえて、先ほど書いた下のボーダーを入れます。後は、お好みでtext-decoration入れたり、文字色を変えたり、背景色を変えたりして調整してください。

#menu01 li a {
	background: #ddd;
	width: 200px;
	height: 25px;
	padding-top: 5px;
	padding-left: 10px;
	border-bottom: 1px solid #ccc;
	display:block;
	text-decoration: none;
	color: #333;
}

これだけでも十分ですが、ロールオーバーしたときのアクションが欲しいので#menu01 li a:hoverで設定します。

#menu01 li a:hover {
	background: #fff;
}

 

以上で完成です。