- ベストアンサー
CSSによるタブメニューの構築について
- 可変幅のタブ形式メニューをスマートなHTMLで実現する方法について質問します。
- 以下のHTMLでタブメニューを作成したいと思っています。使用する画像は左端・右端・テキスト部の背景となっており、タブの高さは29pxです。タブ内に何文字でも入力できる可変幅にしたいので、画像を分けることにしました。また、ul自体の配置位置を直接指定したいです。
- GeckoとIEの両方に対応した描画エンジンを使用し、hackを避けたいと思っています。HTMLの改変は構わないですが、直接imgタグは使いたくないです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#tab及び#tab内のリストをfloatさせてます 後にくるboxにclearを付けるのを忘れずに 動作確認 IE win IE6 Gecko win firefox ■CSS #tab { position:absolute; top:100px; left:200px; background:url(tab_background.png) repeat-x; height:29px; list-style:none; padding:0; float:left; } #tab li { margin:0; padding:0; float:left; line-height:29px; background:url(tab_corner_left.png) top left no-repeat; } #tab li a{ display:block; padding:0 10px; background:url(tab_corner_right.png) top right no-repeat; } ■HTML <!-- 可変を再現するためにリンク文字列を伸ばしてます // --> <ul id="tab"> <li><a href="#">TabName1</a></li> <li><a href="#">TabName22</a></li> <li><a href="#">TabName333</a></li> <li><a href="#">TabName4444</a></li> </ul>
その他の回答 (1)
- suzuki-_-
- ベストアンサー率77% (152/195)
>(一つ気になる点があったのですが、ulへのfloat:left;にはどんな意味があるのでしょうか) widthを指定しないblock要素の場合、必然的にwidthは可能な限り上階層の幅に収まろうとします その際、#tabの背景指定の background:url(tab_background.png) repeat-x; でx方向にリピートしているので上階層の幅が広い場合無駄に背景が描画されてしまうのです 今回はposition:absolute;を使用することによって、一種の浮遊配置となり、#tab内のコンテンツ内容によってwidthが決まるので背景はコンテンツ分だけリピートされます そしてfloatの設定なのですが、こちらも上記同様の効果が得られるのです 今回floatの設定を入れた理由は、今後positionの設定がrelativeもしくは排除された際に背景を無駄にリピートさせない為に、ちょっとしたおまじないのつもりでつけました 今後もずっとposition:absolute;でやっていくのなら、消してしまっても構いません ■背景リピートの変化を確認する方法 position:absolute;を消してから float:left; を入れる、入れないで挙動を確認してみて下さい
お礼
成る程、そういう事でしたか。 大変参考になりました。ありがとうございます。
お礼
成る程、私はliにfloatではなくdisplay: inline;で横並びを実現していた為、上手く行かなかった様ですね…。 floatやline-heightの使い方が大変参考になりました。 ありがとうございました。 (一つ気になる点があったのですが、ulへのfloat:left;にはどんな意味があるのでしょうか)