• ベストアンサー

<li>タグを使って横並びメニューボタンを作成する際ベストな手法とは?

CSSで、横並びのメニューボタンを作成しています。 (文字も画像にしています。) imgタグで並べるのではなく、liタグを使って、テキストは表示しないようにしたいと思い、下記のようなソースで記述しました。 /*htmlソース*/ <li class="tmenu01"><a href="sample">はじめに</a></li> /*cssソース*/ li.tmenu01 { display:block; width:126px; height:31px; background:url(image/menu01.gif) no-repeat; text-indent:-9999px; float: left; } しかし、text-indent:-9999px;とfloat: left;をいっしょに使用すると、背景画像・文字とも表示されなくなってしまいます。 いろいろネットを調べてみたのですが、文字を飛ばす+横並びのバージョンの解決方法が見つからず、方法がわかりません。 いい方法がありましたら、どなたか教えてください…m(_ _)m

質問者が選んだベストアンサー

  • ベストアンサー
  • CHI-512
  • ベストアンサー率69% (63/91)
回答No.3

こんにちは。 ▼HTML <ul id="list01"> <li class="li01"><a href="a.html"><span>あいうえお</span></a></li> <li class="li02"><a href="b.html"><span>かきくけこ</span></a></li> <li class="li03"><a href="c.html"><span>さしすせそ</span></a></li> </ul> ▼CSS #list01 { padding-left: 0px; margin-left: 0px; list-style: none; } #list01 li { float: left; /* フロートで横に並べる */ margin-right: 20px; /* メニュー間の余白(一括指定の場合) */ } #list01 span { display: none; /* テキスト非表示 */ } #list01 li a { display: block; /* リンク領域を確保する */ height: 20px; /* メニュー画像の高さ */ } .li01 { background: url(images/menu01.gif) no-repeat left top; /* 画像を指定 */ width: 100px; /* 画像の幅を指定 */ } .li02 { background: url(images/menu02.gif) no-repeat left top; width: 90px; } .li03 { background: url(images/menu03.gif) no-repeat left top; width: 80px; } でいかがでしょうか? WIN環境のIE6とFirefoxで確認済み。IE7・MACは未確認です。 また、メニューに指定する画像の高さが一律と仮定したCSSソースです。 あとは、環境に合わせてイジり倒して下さい。

haru_atama
質問者

お礼

ごめんなさい、返信が遅くなってしまいました。 こちらで問題なく表示できました! ありがとうございました。

その他の回答 (2)

  • gonagona
  • ベストアンサー率80% (12/15)
回答No.2

こんばんわ。 手元にIEが無いので、SafariとFirefoxでしか確認していませんが、 CSSを下記のようにしてもダメでしょうか? /* リストを左側に回り込み */ li.tmenu01 { float: left; } /* 「aタグ」をブロック要素にして幅・高さ・背景指定。テキストを非表示に。 */ li.tmenu01 a{ display:block; width:126px; height:31px; background:url(image/menu01.gif) no-repeat; text-indent:-9999px; }

haru_atama
質問者

お礼

有難うございました! やってみたところ、 Firefox、Netscapeでは問題なく見えているのですが、 やはりIEではだめなようです…。 IE7で確認したところ、完全な横並びにならず、ちょっとずつ下にずれていてってます。??? やっぱりliでは無理でしょうか。。。 ともかく貴重なお時間をいただき、有難うございました。

  • MAN_MA_RUI
  • ベストアンサー率41% (426/1024)
回答No.1

箇条書きに使うためのものを横並びに使うことは余り好ましくないと思います。 何故liタグを使って横並びメニューを作成しようと思うのでしょうか? 普通にimgを使わない理由は何でしょうか?第一印象的なモノで行けば意味のないことをしているようにも感じます。 も、もう少~し詳しく、理由とか目的とかを書いていただけるといいのですが…^^;

haru_atama
質問者

補足

ご返信ありがとうございます。 クライアントがかなりSEOを意識していて、「imgよりもテキストで記述させたい。けれどフォントが特殊なものを使っているので、文字も画像で。」という背景があり、liタグで出来ないかなあと考えておりました。縦並びだと簡単にできるのですが…。 実はつい先ほどliタグを使用しつつ横並びメニューのサイトを見つけてCSSを拝見していたのですが、非常~に複雑すぎて理解できませんでした(笑)もし解決方法があれば(liタグでなくても、imgではない方法で)分かればご教示いただけると助かります!

関連するQ&A

  • liタグをfloat,leftし横並びにしたのですが、テキストがうまく2行に改行されない@IE7

    はじめまして。 html初心者なんですが、 表題にあるようにメニューのようなものをliタグでテキストで横並びにするためfloat leftをかけたのですが、すべてテキストで構成しているためか、1行目の最後の文字、つまり、<li>hoge</li>が改行されず、残りの幅で縦書きに表示されてしまいます。 画像を添付いたします。 これの解決方法を教えてください。 どうかよろしくお願いいたします。

    • ベストアンサー
    • HTML
  • <li>による横並びメニューの記述法

    こんにちは。 CSSで<li>を使って横並びメニューを作っているのですが、メニューのイメージとイメージの隙間を空けるにはどうすればよいのでしょうか? 現在の記述はこうです。 -----------------html------------------------ <div id="menu"> <ul> <li id="menu01"><a href="index.html"></a></li> <li id="menu02"><a href="business.html"></a></li> </ul> </div><!--menu--> -----------------css------------------------ #menu ul{ margin:95px 0 0 25px; padding:0; width:100%; float:left; list-style:none; } #menu ul li { float:left; } #menu ul a{ text-decoration:none; display:block; width:125px; height:30px; } #menu ul a:hover{ text-decoration:none; display:block; width:125px; height:30px; } #menu01 a{ background-image:url(img/menu01a.gif); background-left:0 0; } #menu01 a:hover{ background-image:url(img/menu01b.gif); background-position:0 0; } #menu02 a{ background-image:url(img/menu02a.gif); background-position:0 0; } #menu02 a:hover{ background-image:url(img/menu02b.gif); background-position:0 0; } 現状だと、画像(menu01.gif)と画像(menu02.gif)がどうしてもつながってしまうんです。 どなたかご教授いただけませんでしょうか。 よろしくお願いいたします。

  • 横並びのメニューボタンについて

    float:leftでメニューボタンを横並びにしています。 表示を100%にするとうまく並ぶのですが、 100%以上にすると左端に隙間が、 100%未満にすると、ある時点からメニューボタンが2列になってしまいます。 これを回避する方法はあるでしょうか。 <<html>> <body> <div id="wrap"> <img src="image/photo1.jpg"> <div id="navi"> <!-- ナビボタン ここから --> <ul class="menu"> <li><a href="index.html" >ホーム</a></li> <li><a href="page1.html" >ページ1</a></li> <li><a href="page2.html" >ページ2</a></li> <li><a href="page3.html" >ページ3</a></li> <li><a href="page4.html" >ページ4</a></li> <li><a href="page5.html" >ページ5</a></li> </ul> </div> <!-- /navi --> </div> <!-- /wrap --> </body> <<css>> body { text-align: center; background-color:#EEEEEE; font-size: 12px; margin-top: -10px } #wrap{ margin: 0 auto; text-align: left; background-color: #ffffff; width: 752px; border: 1px solid #404040; border-collapse: collapse; padding: 0; } .navi{ width:750px; } ul.menu { margin: -5 0 0 0px; padding :0; list-style-type : none; } ul.menu li { margin:0; float:left; width: 125px; line-height: 30px; } ul.menu li a{ display:block; text-align:center; text-decoration: none; background-image: url(menu1.jpg); background-repeat: no-repeat; color: #ffffff; font-size: 12px; } ul.menu li a:hover{ background-image: url(menu2.jpg); color: #404040; } よろしくお願いします。

    • ベストアンサー
    • HTML
  • menuのHTMLタグとCSSが上手くいかない

    画像(1)が現状です。イメージは(2)です。何故HTMLタグを別々にするかというとスマホにしたらsubメニューをボトムに配置したいのです。 メニューとsubメニューの背景がくっつかないのです。 (1)を(2)にするにはどうすれば良いでしょうか? 以下がHTMLタグとCSSになります。 アドバイスをお願いします。 HTMLタグ <div class="div1"><ul><li>メニュー1</li><li>メニュー2</li><li>メニュー3</li><li>メニュー4</li></ul></div> <div class="div2"><ul><li>sab1</li><li>sub2</li></ul></div> CSSスタイル ul li { list-style: none; } .div1 { background: #ccc; float: left; } .div2 { width: 240px; background: #999; float: right; } li { float: left; padding: 5px 15px; }

  • <li>タグでメニューを作った場合

    横並びでサブメニューがあるメニューを以下の様に作成しました HTMLは <ul> <li><a href="">トップページ</a></li> <li><a href="">メニュー2</a> <ul class="sub-menu"> <li><a href="">メニュー2のサブメニュー</a></li> <li><a href="">メニュー2の長いんだよサブメニュー</a></li> <li><a href="">メニュー2のサブメニュー</a></li> </ul> </li> <li><a href="">メニュー3</a></li> <li><a href="">メニュー4</a></li> <li><a href="">メニュー5</a></li> <li><a href="">メニュー6</a></li> <li><a href="">メニュー7</a></li> </ul> CSSは ul{ float:right; font-size:95%; padding-bottom:20px; } ul ul{padding-bottom:0;width:auto;} ul li{ display:inline-block; vertical-align:text-top; text-align:left; padding:5px 0; margin-left:15px; background:url(../images/arrow.png) no-repeat 0 9px; } ul li a{ display:block; padding:0 0 0 12px; overflow:hidden; } ul li li{ display:block; padding:0; margin-left:5px; background:url(../images/arrow2.png) no-repeat 0 6px; } これですと添付画像の左のようになってしまいます。 サブメニューの長さに関係なく、右のようにメニューを詰めることは可能ですか

    • ベストアンサー
    • CSS
  • 横並びのメニューにならない

    初心者です。 dreamweaverで、メニューを横並びにしたいのですが、縦のままです。 <div id="#navi"> <ul> <li><a href="index.html">ホーム</a></li> <li><a href="#">お支払・送料</a></li> <li><a href="#">お問い合わせ</a></li> </ul> </div> という風に作って CSSが、 #navi { height: 30px; width: 750px; } #navi ul { list-style: none; } #navi li { display: inline;       float: left; } #navi li a{      text-align: center;      display:block; } としました。 どこが間違っているのでしょうか? あるいは何か足りないのでしょうか?

  • li ul横並びについて

    横並びのメニューを表示させるところまでは出来たのですが、ウィンドウを縮小させると画像の通りリストが画面に合わせてズレてしまいます。 CSSはこのように書いています。 ul.menu{ list-style:none; width:100%; font-size:25px; //margin-left:0px; //margin-top: 642px; position: relative; top: 642px; right: 27px; padding:3px 0px; text-align:center; font-family: 'Gorditas', cursive; } ul.menu li{ list-style:none; display:inline; margin:0px 15px; } ウィンドウを縮小しても横並びのままにはならないのでしょうか?まだまだ勉強途中なのでわかりやすく教えて頂けるとありがたいです。

    • ベストアンサー
    • CSS
  • float横並びにしたブロックの中のul/liを縦並びにさせたい

    float leftで横並びさせている中でul/liを縦並びにさせたい。現在はすべて横並びしてしまう。 (html) <div class="base"> <div class="box1"> <a href="#"><img src="#" alt=""></a> </div> <div class="box2"><img src="images/spacer.gif" width="1" height="1" alt=""></div> <div class="box3"> <ul class="list-y"> <li>ああああ</li> <li>いいいい</li> <li>うううう</li> <li>ええええ</li> <li>おおおお<a href="#">かかか</a></li> </ul> </div> </div> (css) ul{ margin: 0; padding: 0; list-style-type: none; text-decoration: none; display: block; } li { margin: 0; padding: 0; display: inline; } .base { width: 618px; height: 100px; margin: 0; padding: 8px 10px 0 10px; text-align: left; line-height: 1.5em; background-image: url(../images/content_bg.gif); background-repeat: repeat-y; } .base .box1 { width: 130px; height: 97px; margin: 0; padding: 0; float: left; outline: solid 2px black; } .base .box2 { width: 2px; height: 100px; margin: 0 5px 0 10px; padding: 0; float: left; border-right: dotted 2px #ccc; } .base .box3 { margin-left: 157px; padding: 0; font-weight: bold; text-align: left; } .list-y{ clear: both; } CSSに疎いのでよろしくお願いいたします。

    • ベストアンサー
    • CSS
  • メニューの横並びで改行されてしまう。

    ul li を使用して、横並びのメニューを作成したいのですが、 最後の項目が、横に並びきれなくて、下の段に移ってしまいます。 border幅や、marginも計算してpxで指定しているつもりですが、上手くいきません(TдT) 何故ですかね? HTML <body> <div id="wrapper"> <header> <nav> <ul> <li><a href="#">about</a></li> <li><a href="#">information</a></li> <li><a href="#">party</a></li> <li><a href="#">access</a></li> <li><a href="#">contact</a></li> </ul> </nav> </header> <!-- /wrapper --></div> CSS #wrapper { width: 985px; margin-top: 0px; margin-right: auto; margin-bottom: 0px; margin-left: auto; } nav ul { list-style-type:none; } nav li { float:left; width:190px; border: 1px #ffb366 solid; text-align:center; margin-right:5px; }

    • ベストアンサー
    • CSS
  • 背景画像へのリンク

    CSSで背景画像をリンクさせているのですが 文字が出てきて困っています。 ソースは以下の通りです。 文字が出ないようにするにはどうしたらいいのでしょうか。 <div id="side"> <div class="menu_content"> <ul class="menu"> <li class="menu_top"><a href="index.html">トップページ</a></li></ul> </div> </div> .menu_content li{display:block; text-indent:-9999px; font-size:0px; width:206px;height:68px; text-indent:-9999px;} li.menu_top a{display:block; width:406px;height:128px; text-indent: -9999px; background:url("css/menu_top.gif") bottom left no-repeat;}

専門家に質問してみよう