リストタグを横並びにする方法とは?

このQ&Aのポイント
  • リストタグを横並びにするためには、スタイルシートの解説本を参考にします。
  • タグの位置がセレクタの前と後では、表示に違いが生じる可能性があります。
  • ulタグを省略して横並びに進めることもできますが、注意が必要です。
回答を見る
  • ベストアンサー

リストタグを横並びにする方

横並びのナビゲーションを作成するためにスタイルシートの解説本で調べて 【html】 <div id="navi"> <ul> <li><a href="toiawase.html">問い合わせ</a></li> <li><a href="accsess.html">アクセス</a></li> <li><a href="top.html">TOP</a></li> </ul> </div> 【css】 ul#navi li { float: right; } ul#navi li a { display: block; text-decoration:none; } と記述しましたがうまくできず、頭のulを取ったら出来ました。 タグの位置がセレクタの前と後では、どう違うのでしょうか? また、ulを入れずに進めても問題ないでしょうか?

  • CSS
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • DrFell
  • ベストアンサー率55% (305/551)
回答No.2

<div id="navi"> <ul> <li><a href="toiawase.html">問い合わせ</a></li> <li><a href="accsess.html">アクセス</a></li> <li><a href="top.html">TOP</a></li> </ul> </div> 上の構造を日本語でいうと、 naviっていう名前の塊の中に、箇条書きリストが3行あります。 ということです。 で、上手くいかなかった ul#navi li {は nabiっていう名前のulの中の、liに対する指定です。 cssでスペースがなくクラスやアイディを指定すると、「~という名のdiv(この場合)」 半角スペースを空けてclassやidを指定すると「divの中の~という名前の」という指定になります。 #navi ul li{ 意味:naviと名前のついた要素の中にあるのulの中にあるli で指定すると今、見せていただいているhtmlに作用します。 ul#navi li { 意味:naviと名前のついたulの中にあるli を固持したければ、 <ul id="navi"> <li><a href="toiawase.html">問い合わせ</a></li> <li><a href="accsess.html">アクセス</a></li> <li><a href="top.html">TOP</a></li> </ul> のようにhtmlを変えます。(本質的にはhtmlが主でcssが従ですので、htmlはデザインの都合で変えるべきではありません。が説明の便宜上です。) 頭のulを取ったら出来ました。 #navi li naviという名前のついた要素の中にあるli への指定となりますので、当てはまったのです。さっきはnaviという名前のついたulと指定していたのにnaviと名前をつけたのはdivだったのではまらなかったというわけです。 また、ulを入れずに進めても問題ないでしょうか? 本来「id」はたった1つのものです。idが1つあることでその場所は特定できるはずです。今現在、思い通りの作用が出来ているなら、問題ありません。 おまけ 将来は問題が出てくるかもしれません。まずは、上述のことを抑えられてからでないと、次には進めないと思いますが一応。 例 <div id="navi"> <ul id="mainnavi"> <li><a href="toiawase.html">問い合わせ</a></li> <li><a href="accsess.html">アクセス</a></li> <li><a href="top.html">TOP</a></li> </ul> </div> #mainnavi li{color:blue;} #navi li{color:red;} 実際に表示されるのはredです。 ul#mainnavi li{color:blue;} #navi li{color:red;} 実際に表示されるのはblueです。 このあたりは詳細度、とかかわってきます。

kanaflan
質問者

お礼

大変判りやすいご回答をありがとうございました。

その他の回答 (1)

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.1

セレクタの書き方をしっかり理解しておきましょう。CSSで最も重要な部分です。 プロパティだけいくら覚えても使い物になりません。 セレクタ ( http://www.swlab.it.okayama-u.ac.jp/man/rec-css2/selector.html ) セレクタは、基準となるセレクタに接続詞でつなげて適用させたい要素(タグで囲まれた文書を構成する要素)を特定していきます。 * --全称セレクタ すべての要素に当てはまります。CSS2で追加(詳細度0) ul,li,p -- タイプセレクタ:HTMLの要素に該当します。詳細度c=1  -- 子孫セレクタ 半角スペースで子孫に適用される >-- 子供セレクタ 直接の子孫に適用 #--- 一意セレクタ、HTMLのID  詳細度[b=1] .-- クラスセレクタ、HTMLのclass属性の値がひとつないし複数が空白で区切られているときのひとつ。詳細度[c=1] [] -- 属性セレクタ 詳細度[c=1] + -- 兄弟セレクタ 他にも、擬似要素[詳細度d=1],擬似クラス[詳細度c=1]などがあります。それぞれに詳細度が定められています。 ul#nav はulのうち、ID属性がnavであるものに当てはまります。HTMLだと<ul id="nav"></ul>に当てはまります。詳細度は[0,0,1,1] ★書かれたHTMLにそのようなものはありません。id="nav"は、<DIV>要素についてます。 ★書くのならul#navでないといけませんね。 #navは、CSS2では、*#navとみなされます。*(全称セレクタ)は詳細度ゼロで、一意セレクタは詳細度[b=1]ですから、このセレクタの場合、詳細度は[0,1,0,0]  全称セレクタですから、id="nav"のすべての要素に当てはまります。ただし、HTMLにおいては、特定のIDは一箇所にしか存在しませんから、詳細度[0,1,0,0])(#nav)だろうが詳細度[0,1,0,0](ul#nav)だろうが同じと思われるでしょうが、大きな違いがあります。 たとえば他のページで、<div id="nav">と書かれている場合、前者は適用されますが、後者は適用されません。しかも詳細度が高いですから、前の記述はそのままで上書きされますね。 ・・・詳細度の計算はCSS2.1で変更されていますから、上の日本語訳ではなく「6.4.3 Calculating a selector's specificity ( http://www.w3.org/TR/CSS2/cascade.html#specificity )」を参照してください。  サンプルに示されたHTMLだと、 div#nav ul{}、div#nav ul li{}だと適用されます。それぞれの意味は理解されてますか? ★単純にタイプセレクタだけ(ul,li)だと、そのHTML内のすべてのul,liに適用されますから、この様に他のセレクタと組み合わせて詳細度を上げて期待した要素にのみ適用させるように書きます。  リンク先でない場合は <div class="nav">  <ul>   <li></li> のほうが良いです。リンク先であっても <div class="nav" id="navigation">  <ul>   <li></li> とするほうが、色々な面でベストです。 例] タブが全角スペースに置換してあります。 <div class="nav">  <ul id="navigation">   <li><a href=""></a></li>   <li><a href=""></a></li>   <li><a href=""></a></li>  </ul> </div>  に対して div.nav ul,/* 詳細度[0,0,1,2] */ div.nav ul li{ /* 詳細度[0,0,1,3] */ /* セレクタはグループ化して記述すると同じプロパティを何度も書かなくて良い */   display:block; /* リストをリストでなく単なるブロックにする */   list-style:none; /* 古いIEは上記だけではマークが残る */   margin:0;/* ブラウザによって差があるのでいったん0にする */   padding:0;/* ブラウザによって差があるのでいったん0にする */ } div.nav ul{/* 詳細度[0,0,1,2] */   width:80%;   margin:0 auto;   line-height:30px;/* 継承されるので上位に */ } div.nav ul li{/* 詳細度[0,0,1,3] */   width:30%;   float:left; } div.nav ul li a{/* 詳細度[0,0,1,4] */   display:block; /* インライン要素をブロックら変換する */   width:100%;   height:100%;   text-align:center;   text-decoration:none; } div.nav ul li a:hover{ /* 動的な擬似クラス 詳細度[0,0,2,4] */   color:red;   background-color:yellow; } div.nav ul li a:active{/* 詳細度[0,0,2,4] */ color:yellow; background-color:red; } 簡単なCSSですが、これだけのHTML/CSSをよく理解することで、レベルは上がるはず。そのために詳しい説明は省いてあります。仕様書と見比べながら勉強しましょう。

kanaflan
質問者

お礼

判っていなかった事を再認識しました。 ありがとうございました。

関連するQ&A

  • 横並びのメニューにならない

    初心者です。 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; } としました。 どこが間違っているのでしょうか? あるいは何か足りないのでしょうか?

  • ナビゲーションを横並びにして真ん中配置にしたい

    ナビゲーションをulタグを使って作り、横並びにしています。 さらにそれをブラウザの真ん中に配置したいのですが、真ん中になってくれません。 HTMLは以下のようにしています。 <div id="menu_top"> <ul> <li>Profile</li> <li>Information</li> <li>History</li> <li>Invitation</li> </ul> </div> CSSは以下のとおりです。 #menu_top{  margin:auto;  width:90%;  height:20px;  text-align: center; } #menu_top li{  float:left;  list-style-type:none;  margin:15px; } あとbody要素にはtext-align:centerを入れています。 現状では、ナビゲーション自体は横並びになるものの、左に寄っています。横並びのまま、真ん中に表示させるにはどのようにしたらいいでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • CSS 横並びリストの書き方はどちらがよいでしょうか

    スタイルシートで横並びリストを作成するとき、li { display: inline; } を使う方法と、li { display: block; float:left; } を使う方法がありますよね。皆さんは、意識して、使い分けられていますか? どちらで表現しようか、よく迷います。どちらの方法でも同じレイアウトにできるように思ってしまっていて。。でも自分の気付いていないデメリットがあるのかな?と気になります。「こうしたい場合、こちらのレイアウトだと無理」とか、「これではこのブラウザで表示が崩れる」など、お気づきのことがあれば、教えていただけないでしょうか。 下に、自分で確認用に作ったhtmlがあるので、そのままブラウザで見ていただければと思います。お手数ですが、よろしくお願いします。 ========================= <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>横並びサンプル</title> <style type="text/css"> <!-- /* リスト:インライン ------------------------------------------------------------ */ #yoko1 li { display: inline; } #yoko1 a { display: block; float:left; } #yoko1 li { list-style-type: none; margin:0 5px; } #yoko1 a { padding: 5px 10px; margin: 5px; text-decoration:none; border:1px solid #CCFF33; } #yoko1 a:hover { background-color:#CCCCFF; } #yoko2 { clear:left; } /* リスト:ブロック ------------------------------------------------------------ */ #yoko2 li { display: block; float:left; } #yoko2 a { display:block; } #yoko2 li { list-style-type:none; margin:0 5px; } #yoko2 a { padding: 5px 10px; text-decoration:none; border:1px solid #CCFF33; } #yoko2 a:hover { background-color:#CCCCFF; } --> </style> </head> <body> <div id="yoko1"> <ul> <li><a href="#">あ</a></li> <li><a href="#">い</a></li> <li><a href="#">う</a></li> </ul> </div> <div id="yoko2"> <ul> <li><a href="#">あ</a></li> <li><a href="#">い</a></li> <li><a href="#">う</a></li> </ul> </div> </body> </html>

    • ベストアンサー
    • HTML
  • 横並びのメニューボタンについて

    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
  • リストを横並びさせた時にできた左端の余白を消したい

    いつもお世話になっております。WEBサイト制作でご質問があります。 使用ソフトはDreamweaverCS5.5。個人的に公開するものなので、Chromeのみで確認しています。 リストを横並びにしてナビゲーションを作っているのですが、画像のように左端に余白ができてしまいナビゲーションが改行された状態になってしまいます。 【html】 <div id="hedder"> <ul class="navi"> <li class="top"><a href="#">top</a></li> <li class="about"><a href="#">about</a></li> <li class="profile"><a href="#">profile</a></li> <li class="event"><a href="#">event</a></li> <li class="link"><a href="#">link</a></li> </ul><br clear="all" /> </div> 【CSS】 ul.navi { list-style-type: none; } .navi li { display: inline; float: left; } .navi li a { text-indent: -9999px; display: block; height: 78px; } .navi li.top a { background-image: url(img/btn_top.gif); width: 189px; } .navi li.about a { background-image: url(img/btn_about.gif); width: 190px; } .navi li.profile a { background-image: url(img/btn_profile.gif); width: 189px; } .navi li.event a { background-image: url(img/btn_event.gif); width: 189px; } .navi li.link a { background-image: url(img/btn_link.gif); width: 193px; } <div id="wrapper">で幅950pxの指定をしています。 よろしくお願いします。 (画像の青い四角は意図的にあとから加えた物なので本来のデザインではないものです。)

    • ベストアンサー
    • CSS
  • リストタグ以外でfloatしたものをセンター寄せに

    下記のようにHTMLを組みました。 「.footerNav」を「float:left」して横並びにした上でセンター寄せをしたいと思いました。 しかし何をどうやってもセンター寄せになってくれません。 ちなみに各「div class="footerInner"」の幅設定はしません。 <footer> <nav> <div class="footerInner"> <h4>○○○</h4> <ul class="XXXXX"> <li><a href="#">○○○</a></li> <li><a href="#">○○○</a></li> <li><a href="#">○○○</a></li> </ul> </div> <div class="footerInner"> <h4>○○○</h4> <ul class="XXXXX"> <li><a href="#">○○○</a></li> <li><a href="#">○○○</a></li> <li><a href="#">○○○</a></li> </ul> </div> <div class="footerInner"> <h4>○○○</h4> <ul class="XXXXX"> <li><a href="#">○○○</a></li> <li><a href="#">○○○</a></li> <li><a href="#">○○○</a></li> </ul> </div> </nav> </footer> 調べて見ると、<div class="footerInner">~</div>の単体であれば、 センター寄せができる手段はありました。 <div class="footerInner"> <h4>○○○</h4> <ul class="XXXXX"> <li><a href="#">○○○</a></li> <li><a href="#">○○○</a></li> <li><a href="#">○○○</a></li> </ul> </div> しかし自分のはリストタグではなく、divタグをフロートしたもの。 リストタグではないものを「float:left」してセンタリングは可能なのでしょうか? 何度かこの手のことにはまって、その度にいろいろな手段を試したり検索していたのですが、 検索しても見つからず、結局出来たためしがありません。 それで今回は投稿させていただきました。 ご存知の方いらっしゃいましたらご教授いただければ幸いです。

    • ベストアンサー
    • 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記述ではie8及びFirefoxはテキストが隠れ動作確認も問題ないのですが、ie6dではテキストが隠れず画像の下に表示されてしまいます。 どこを訂正または記述追加すればよいか困っております。 ぜひ、ご教授いただければ幸いです。 CSS /* ---------------- .navi .naviin ---------------- */ .navi { background:#063686 url("/test/menu_bg.png") repeat-x top; border-bottom:1px solid #8fa5ca; } .navi .naviin{ width:990px; clear: both; margin: 0 auto; } .navi .naviin ul.tab{ height:30px; } .navi .naviin ul.tab li{ float:left; } .navi .naviin ul.tab li a.tab_01{ width:163px; height:0; overflow:hidden; display:block; padding-top:30px; margin-right:2px; background:url(/test/navi01_n.png) no-repeat left top; } .navi .naviin ul.tab li a.tab_02{ width:163px; height:0; overflow:hidden; display:block; padding-top:30px; margin-right:2px; background:url(/test/navi01_n.png) no-repeat left top; } .navi .naviin ul.tab li a.tab_03{ width:163px; height:0; overflow:hidden; display:block; padding-top:30px; margin-right:2px; background:url(/test/navi01_n.png) no-repeat left top; } .navi .naviin ul.tab li a.tab_04{ width:163px; height:0; overflow:hidden; display:block; padding-top:30px; margin-right:2px; background:url(/test/navi01_n.png) no-repeat left top; } .navi .naviin ul.tab li a.tab_05{ width:163px; height:0; overflow:hidden; display:block; padding-top:30px; margin-right:2px; background:url(/test/navi01_n.png) no-repeat left top; } .navi .naviin ul.tab li a.tab_06{ width:165px; height:0; overflow:hidden; display:block; padding-top:30px; background:url(/test/navi06_n.png) no-repeat left top; } /* ---------------- a.の設定 ---------------- */ .navi .naviin ul.tab li.on a.tab_01{ background:url(/test/navi01_o.png) no-repeat left top; } .navi .naviin ul.tab li.on a.tab_02{ background:url(/test/navi01_o.png) no-repeat left top; } .navi .naviin ul.tab li.on a.tab_03{ background:url(/test/navi01_o.png) no-repeat left top; } .navi .naviin ul.tab li.on a.tab_04{ background:url(/test/navi01_o.png) no-repeat left top; } .navi .naviin ul.tab li.on a.tab_05{ background:url(/test/navi01_o.png) no-repeat left top; } .navi .naviin ul.tab li.on a.tab_06{ background:url(/test/navi06_o.png) no-repeat left top; } /* ---------------- hoverの設定 ---------------- */ .navi .naviin ul.tab li a:hover.tab_01{ background:url(/test/navi01_o.png) no-repeat left top; } .navi .naviin ul.tab li a:hover.tab_02{ background:url(/test/navi01_o.png) no-repeat left top; } .navi .naviin ul.tab li a:hover.tab_03{ background:url(/test/navi01_o.png) no-repeat left top; } .navi .naviin ul.tab li a:hover.tab_04{ background:url(/test/navi01_o.png) no-repeat left top; } .navi .naviin ul.tab li a:hover.tab_05{ background:url(/test/navi01_o.png) no-repeat left top; } .navi .naviin ul.tab li a:hover.tab_06{ background:url(/test/navi06_o.png) no-repeat left top; } /* ---------------- submenu ---------------- */ .navi .naviin ul.submenu{ padding:6px 0 6px 0; } .navi .naviin ul.submenu li{ float:left; padding:0 7px 0 10px; background:url(/test/sub_line.png) no-repeat left center; white-space:nowrap; } .navi .naviin ul.submenu li a{ padding:0 0 0 12px; color:#ffffff; background:url(/test/triangle.png) no-repeat left center; } .navi .naviin ul.submenu li.firstList{ background:none; padding:0 7px 0 5px; } HTML <div> <div class="navi"> <div class="naviin"> <ul class="tab"> <li class="on"><a class="tab_01" href="">タブ01</a></li> <li><a class="tab_02" href="">タブ02</a></li> <li><a class="tab_03" href="">タブ03</a></li> <li><a class="tab_04" href="">タブ04</a></li> <li><a class="tab_05" href="">タブ05</a></li> <li><a class="tab_05" href="">タブ06</a></li> </ul> <ul class="submenu clearfix"> <li class="firstList"><a href="">サブ01</a></li> <li><a href="">サブ02</a></li> <li><a href="">サブ03</a></li> <li><a href="">サブ04</a></li> <li><a href="">サブ05</a></li> </ul> </div> </div> </div>

  • ヘッダ(横並び)の作り方について

    横並びメニューのヘッダーを作る例として、<div1>Text</div1><div2><ul><li></li><li></li></ul></div2>という構成※divの数字は便宜上で、cssで<li>&<div1>&<div2>にfloat:left指示する物ががありましたが、<div2>のfloat leftの役割が分かりません。 宜しくお願いします。

    • ベストアンサー
    • CSS
  • リストタグを用いた段組みメニューの不具合(IE6)

    数日間大変悩んだのですが解決しなかったため、どなたかご回答頂けると嬉しいです。 リストタグを横に二列並べて段組みにするようなレイアウトを作っているのですが、 IE6で確認した際にdisplay:inlineを使用しているにも関わらずリストが縦に並んでしまいます。 他のブラウザで見る際には問題が無いので、どうしたものかなと途方にくれています。 以下がhtmlとcssです。 【html】 <div class="test"> <div class="test_left"> <h3>テスト1</h3> <ul> <li><a href="#">・あ</a></li> <li><a href="#">・い</a></li> <li><a href="#">・う</a></li> </ul> </div> <div class="test_right"> <h3>テスト2</h3> <ul> <li><a href="#">・あ</a></li> <li><a href="#">・い</a></li> <li><a href="#">・う</a></li> </ul> </div> <div class="search_clear"></div> <div class="test_left"> <h3>テスト1</h3> <ul> <li><a href="#">・あ</a></li> <li><a href="#">・い</a></li> <li><a href="#">・う</a></li> </ul> </div> <div class="test_right"> <h3>テスト2</h3> <ul> <li><a href="#">・あ</a></li> <li><a href="#">・い</a></li> <li><a href="#">・う</a></li> </ul> </div> </div> 【css】 div.test { width: 500px; height: 370px; margin: 15px 0 10px 0; } div.test h3 { width: 220px; font-size: 16px; margin: 10px 10px 0 20px; } div.test ul { width: 220px; margin: 0 10px 15px 10px; list-style:none; } div.test ul li { width: 220px; display:inline; } div.test ul li a { color: #666; } div.test ul li a:hover { color: #999; } .test_clear { clear:both; } .test_left { float: left; width: 240px; } .test_right { float: right; width: 240px; } 仮にこの部分に問題が無いとすると、この要素を囲む他のcssやhtmlに問題あるのかもしれませんが、 何卒宜しくお願い致します。

    • ベストアンサー
    • HTML

専門家に質問してみよう