ナビゲーションメニューなどlistをfloatさせたものをセンタリングさせたい

ナビゲーションとかで、リストでマークアップしたものをフロートで横一列に並べて、なおかつセンタリングしたいということ、あります。単に、テキストのみのリンクメニューだったりして、とくに領域を確保させたり、画像を使ったりする必要がなければ、そもそもフロートを使わなくて、いいです。liに対して、display:inlineを指定してやればOKです。ulにtext-algin:centerとかつけてやれば、それでセンタリングできます。でも、画像使ったバナーを並べたいとか、背景色をつけたリンクメニューにしたいからdisplay:inlineを指定できない、といった場合も多いです。そうすると、そのulをセンタリングするのって、大変です。なにせ、margin:autoを使いたくても、widthが指定されていないと、margin:autoは反応してくれません。

ナビゲーションをセンタリング

ナビゲーションをセンタリング

てな場合に使えるのが、この方法です。

HTML


<div id="wrapper">
<ul id="linklist">
<li><img src="btn01.gif" width="116" height="46" alt="" /></li>
<li><img src="btn02.gif" width="116" height="46" alt="" /></li>
<li><img src="btn03.gif" width="116" height="46" alt="" /></li>
</ul>

</div>

CSS


*{
	margin:0;
	padding:0;
}

ul#linklist {
	float:left;
	position:relative;
	left:50%;
	list-style-type:none;
}
#linklist li{
	float:left;
	position:relative;
	left:-50%;
}

この呪文の意味を考えてみました。

右へ移動

右へ移動

1.position:relateveにすると、親要素のその分だけ移動するので(たとえば親要素の1pxとか)、ulがleft:50%というと、ulの親要素の50%(たとえばdivなど)の幅分だけ、右に動きます。

中心へそろう

中心へそろう

2.liは親要素であるulの-50%分、左へ動くので、つまり、ulの幅の50%分、右へ動くことになります。

つまり、1.でulはA(親要素)の50%の位置、つまり中心の位置に、ulの左端がそろい、2.でulの中心の位置が、1.のときのulの左端(つまりAの中心)に移るので、Aの中心にB(ul)の中心がそろうことになるのです。

どうでしょうか、見習いのわりには、論理的に説明できたと思うのですがぁ。

完成例

完成例

論理的ですな、とちょっとだけバルカン人ぽくなった見習いでした。長寿と繁栄を!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


コメントフィード

トラックバックURL: https://pc.beginners-luck.net/pcwp/2011/11/02/centering-float.html/trackback