ナビゲーションメニューなど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)の中心がそろうことになるのです。
どうでしょうか、見習いのわりには、論理的に説明できたと思うのですがぁ。
論理的ですな、とちょっとだけバルカン人ぽくなった見習いでした。長寿と繁栄を!
2011年11月2日12:46 AM| カテゴリー: HTMLとCSSのコード,スクリーンショット,見習い奮闘記| コメント (0)
コメントフィード
トラックバックURL: https://pc.beginners-luck.net/pcwp/2011/11/02/centering-float.html/trackback