• ベストアンサー

「CSS」リストの2段組どのように組まれていますか?(同一カテゴリの場合)

リストの2段組ですが、皆さんどのように組まれていますか? リストの項目が同一カテゴリーだった場合です。 例えば下記のような同一カテゴリー(花)の場合 ・チューリップ ・あじさい ・たんぽぽ ・ひまわり ・すみれ ・パンジー これを ============= ・チューリップ  ・ひまわり ・あじさい     ・すみれ ・たんぽぽ    ・パンジー ============= のように表示させたい場合です。 投稿した後に表示がズレるかもしれませんが、 ・ひまわり ・すみれ ・パンジー の頭は揃えたいです。 苦肉の策で下記のようなマークアップをしています。 <ul class="left"> <li>チューリップ</li> <li>あじさい</li> <li>たんぽぽ</li> </ul> <ul class="right"> <li>ひまわり</li> <li>すみれ</li> <li>パンジー</li> </ul> そして左右にfloatさせています。 ただ、これだとリストが途中で分断されてしまって 正しいマークアップとは言えないですよね・・・。 こういうケースって結構あるのでは、と思い、 色んなサイトを巡りましたが見つからず。 皆さんこういったケースの場合どのように組まれてますか? いっそテーブルの方が良いのでしょうか? 項目は後から追加するものと想定してください。 (縦に可変していきます) どうぞ宜しくお願いいたします。

  • HTML
  • 回答数6
  • ありがとう数9

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

  • ベストアンサー
noname#83877
noname#83877
回答No.5

確かに下のソースだとIEで駄目でした・・・ 以下の部分を追加してください。 .left { width:251px; float:left; clear:left; /* ←追加する場所 */ }

hrykyk
質問者

お礼

わかりやすい記述なのにIEだと無理なのか・・・ と残念に思っていたのですが、たしかに記述追加で問題なく表示できるように なりました! No.6さんも言っておられますが、確かに目から鱗ですね。 columnというのが実装されてきているということも勉強になりました。 早く普及して欲しいです。

その他の回答 (5)

  • abril
  • ベストアンサー率69% (388/560)
回答No.6

(回答じゃなくてすみません。) ANo.5様の方法…これで解決できるとは。目から鱗でした。勝手ながら、今後是非使わせて頂こうと思います。 ということで私のANo.4の方法は忘れて下さい(元々お奨めじゃないので…)。

hrykyk
質問者

お礼

>私のANo.4の方法は忘れて下さい(元々お奨めじゃないので…)。 とおっしゃっているにもかかわらず、ソースをコピーして試してみました。すみません・・・。 (回答くださった皆様のを全部、試していたりします・・・) IE、Firefoxで試しましたが、どちらも崩れなく綺麗に表示されています。 緻密に計算されていてすごいなと思いました。 何よりpositionをもっと勉強してみようと思うきっかけになりました。 ありがとうございました!

  • abril
  • ベストアンサー率69% (388/560)
回答No.4

アイテムの並び方に拘らなくても良く「左→右→左→右→左→右」になっても構わない様な内容なら、ANo.1様の最初の方法をとりますが、並び方に意味があって「左→左→左→右→右→右」を崩せないとなると難しいですね。ANo.2様の方法は理想的なのですが、例によってIE6/7がだめなので、通常は妥協して質問者様と同じくリストを二つに分けてしまう事が多いでしょうか… ごく限られた条件(アイテムが頻繁に増減する事がなく、アイテムのテキストが短くかなり文字サイズを拡大しても2行にならない)が整っている場合は、下記の様な方法をとる事もありますが。 <ul class="hoge"> <li class="col1">チューリップ</li> <li class="col1">あじさい</li> <li class="col1">たんぽぽ</li> <li class="col2">ひまわり</li> <li class="col2">すみれ</li> <li class="col2">パンジー</li> </ul> ul.hoge { position: relative; width: 500px; height: 4.2em; list-style: none; margin: 0; padding: 0; line-height: 1.4em; overflow: hidden; } ul.hoge li { width: 50%; margin: 0; padding: 0; } ul.hoge li.col1 { position: relative; left: 0; } ul.hoge li.col2 { position: relative; top: -4.2em; left: 250px; } heightとline-heightで高さを調整してpositionで右コラムのリストの開始位置を引き戻しています。 ただし、これはアイテム数の増減によって、それらのプロパティの値をその度に再計算して調整しなければならないという手間があります。アイテムが2行になってしまう可能性が高い場合は基本、使いません。

回答No.3

あまり参考にならないかもですが。 http://www.google.co.jp/cse?cx=partner-pub-4575936807909242%3A8lcrsa5kagl&q=%83%8A%83X%83g%81@2%97%F1 内容が既出の回答と被ってるかもしれません。

hrykyk
質問者

お礼

ご回答ありがとうございます。 同じところでつまづいている方々がいるのだな・・・と。 (いけない安心が・・・) <ol>を使用して縦並びさせたい、というのも実際にでてきそうなケースだな、 と思いながら参考ページを読ませていただきました。

noname#83877
noname#83877
回答No.2

そのうちモダンブラウザで先行実装されはじめているcolumnが使えそうですが・・・ とりあえず今回のパターンだとこれでもいいかなと思います。 <ul> <li class="left">チューリップ</li> <li class="left">あじさい</li> <li class="left">たんぽぽ</li> <li>ひまわり</li> <li>すみれ</li> <li>パンジー</li> </ul> ul { width:500px; } .left { width:251px; float:left; }

回答No.1

はじめまして。 私も質問者様と同じように左右にfloatさせています。 が、少し試してみました。 ul,liの幅を固定にしてfloatすれば、 2つずつならんでカラム落ちを繰り返すので 左の列の先頭は揃うと思いますが・・。 【html】 <ul> <li>チューリップ</li> <li>あじさい</li> <li>たんぽぽ</li> <li>ひまわり</li> <li>すみれ</li> <li>パンジー</li> </ul> 【css】 ul{ width:400px; } li{ width:200px; float:left; } でも、これでは順番が ============= ・チューリップ  ・あじさい ・たんぽぽ    ・ひまわり ・すみれ     ・パンジー ============= と変わってしまいますね。 それではソースを少々いじって、 【html】 <ul> <li>チューリップ<span>ひまわり</span></li> <li>あじさい<span>すみれ</span></li> <li>たんぽぽ<span>パンジー</span></li> </ul> 【css】 ul{ width:400px; list-style-type:none; } li{ background:url(URL)no-repeat; } li span{ display:block; background:url(URL)no-repeat; text-align:left; width:200px; float:right; margin:-2.25em 0 10; } これだと正しいマークアップとは言えないですね。

hrykyk
質問者

お礼

ご回答ありがとうございます。 1つ目に提案いただいたものがリストの並び順にこだわらなければ、シンプルで良いです。 難しく考えすぎていたのですが、こんなにすっきりとした記述でOKなんですね。 実は、並び順にこだわる以前の問題だったので、(こだわらなくてもつまづいていた)とても嬉しく思っています。是非活用させていただきます。 「でも順番にこだわるなら・・・」と問題提起して考えていただいた 2案目もありがとうございます!

関連するQ&A

  • cssでリストを横並びのセンタリング

    現在、サイトをHTMLからHTML5に移行中なのですが、リストを横並びにするところまではできたのですが、それをセンタリングするにはどうしたら良いでしょうか? さまざまなサイトを巡ってやり方を拝見したのですが、目的とするものがありませんでした。 現在のHTML <!-- ヘッダ開始 --> <div id="header"> <h1>サイトタイトル</h1> <p class="catch"><strong>サイト説明</strong></p> <div class="opening"> <h2><img src=".jpg" alt="表示されなかった画像の説明的な" width="900" height="260"></h2> </div> <ul class="nl clearFix"> <li class="active"><a href="#">1</a></li> <li><a href="#">2</a></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> <hr class="none"> </div> <!-- ヘッダ終了 --> 現在のcss /* --- ヘッダメニュー --- */ #header ul.nl { width: 100%; /* IE 6のために幅の指定が必要 */ margin: 0 auto; padding: 0; background-color: #ffffff; /* ヘッダメニューの背景色 */ list-style-type: none; text-align: center; } /* メニュー項目 */ #header ul.nl li { width: 124px; /* 項目の幅 */ float: left; line-height: 100%; } /* 最初の項目と最後の項目 */ #header ul.nl li.first, #header ul.nl li.last { width: 125px; /* 項目の幅 */ } わかりにくいと思いますが、上のように配置したいのです。 まだイマイチ理解しきれていないのですが、回答していただければと思います。 ↓HPの現状。 http://dateme.web.fc2.com/top.html

    • ベストアンサー
    • CSS
  • MovableTypeのテンプレート カテゴリのリスト表示について

    MovableTypeのテンプレートの編集について質問させていただきます。 カテゴリのリスト表示を <ul> <li>トップレベルカテゴリA</li> <li>トップレベルカテゴリB</li> <li>トップレベルカテゴリC</li> </ul> <ul> <li>カテゴリAの子1</li> <li>カテゴリAの子2</li> </ul> <ul> <li>カテゴリBの子1</li> <li>カテゴリBの子2</li> <li>カテゴリBの子3</li> </ul> <ul> <li>カテゴリAの子1の子A</li> <li>カテゴリAの子1の子B</li> </ul> というように、各階層のカテゴリごとに表示させようと思い挑戦しているのですが苦戦しています。 MTのタグの知識が足りずなかなかうまくいきません。皆さんのお力貸していただけるとうれしいです。 よろしくお願いいたします。

  • 2種類のリスト項目をjQueryを使って揃えたい

    スマートフォンサイト制作中です。 やりたい事は 横並びにしている2種類のリスト項目数を jQueryを使って、揃えたいって事です。 以下のようなリストがあって、 2種類のulを横並びにしています。 (2列のテーブルみたいな感じ) <ul class="column1"> <li>あいう</li> <li>かきく</li> <li>さしす</li> </ul> <ul class="column2"> <li>アイウ</li> <li>カキク</li> <li>サシス</li> <li>タチツ</li> </ul> 例として、上記の場合、class="column2"の方が<li>が一つ多いので それに合わせてclass="column1"に<li>を追加して(追加した要素の中身はブランクで)、 横並びを揃えたいのです。 ※要素の中身が2行になったりしてズレることはないです。 考え方として、おそらく class="column1"とclass="column2"のそれぞれのエレメント数を size()で取得して そのエレメント数を比較して、大きい個数に合わせて、 足りない分を、足りない<ul>要素内にappend()を使って挿入でもするのかな?? …って思っているのですが どのように書けばよいのか、やっぱり分からないのです。 ※ちなみにHTMLの、この<ul><li>リストは動的に生成しています。 現行のPCサイトのHTMLをいじらずに スマホ対応しているので、このリストを使った横並びを変えることは出来ないのです。 どなたか詳しい方、どうかご教授ください。 どうぞ宜しくお願いいたします。

    • ベストアンサー
    • AJAX
  • jQueryでリストを3項目ずつにしたい。

    いつもこちらでお世話になっています。 またjQuery関連で質問をさせて下さい。 下のようなリスト項目をfloatさせています。 <ul class="box"> <li>項目1</li> <li>項目2</li> <li>項目3</li> <li>項目4</li> </ul> レイアウトをcssで設定して 1行あたり3項目ずつの横並びにしたいと考えています。 4項目以上の場合は、 2行目に、あらたに3項目分のリストを表示したいです。 ※liの個数は動的に変化します。 ※cssの方は特に問題なく出来ています。 例えば上記の例のように4項目あった場合に 2行目が1項目分しかないため、2項目分の余白ができるので その足りない分のliの個数を算出し、liを追加したいと考えています。 $('ul.box').append('<li />'); を使うのだと思うのですが どのようにappendするliの個数を、算出したらよいのでしょうか? 詳しい方、初心者の私にどうかご教授下さい。 いつもながらに恐縮ですが、何卒、宜しくお願いいたします。

  • css 横並びのナビゲーションバーを二段にする場合

    CSSでデザインしてるのですが・・・。 ナビゲーションバーで横並びに4項目。 ここまでは出来るのですが、この4項目を 2段にして、8項目にするには、どのように書くのがスマートでしょうか。 テーブルにしたほうが早そうな気もしますが、 表かといいうと、違う気もします。 ulでリスト表示の途中で改行させる方法があるのか、 マークアップが適切とはいえないけれど、 リストが二つあることにして、ulを二つにするか、 などと考えています。 初心者でよくわかっていないのですが、 皆様はどのようにしたら良いと思われますか? よろしくお願いします。

    • ベストアンサー
    • HTML
  • <li>タグの順番を入れ替える方法

    <ul> <li id="category-125" class="category"> <li id="category-123" class="category"> <li id="category-126" class="category"> <li id="category-124" class="category"> </ul> この様なリストが有った場合 jQueryなどで順番を <ul> <li id="category-124" class="category"> <li id="category-126" class="category"> <li id="category-125" class="category"> <li id="category-123" class="category"> </ul> この様に入れ替える事はできるでしょうか? <li>はphpにより生成されているらしく直接順番を変えることができませんでした。 IDの数字を元に昇順、降順に順番を変えるソースは見つけたのですが IDの数字がランダムの場合どのようにすれば良いかわかりませんでした。 どなたかご教示いただけましたら幸いでございます。 どうぞ宜しくお願い申し上げます。

  • css リストを右揃えにできません。。。

    非常にシンプルなことができず、頭を抱えています。 縦に並んだリストを、右揃えにしたいです。 ulに便宜的にborderをつけていますので、 そのボックスの右にピッタリ並べたいのですが … text-align、margin 二通りの指定で試したものの 左揃えになってしまいます(Mac safari firefox)。 なんで~~?? どなたかドウゾ助けてください。よろしくお願いします。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <style><!-- *{ margin:0; padding:0; } ul.align { list-style:none; text-aling:rignt; width:200px; border:1px solid #000;} ul#margin li { list-style:none; margin-left:auto; margin-right:auto;} --></style> </head> <body> <ul class="align"> <li><a href="" title="">AA</a></li> <li><a href="" title="">BBBBB</a></li> <li><a href="" title="">CCC</a></li> <li><a href="" title="">DDDD</a></li> </ul> <ul class="align"> <li>AA</li> <li>BBBBB</li> <li>CCC</li> <li>DDDD</li> </ul> <ul id="margin"> <li><a href="" title="">AA</a></li> <li><a href="" title="">BBBBB</a></li> <li><a href="" title="">CCC</a></li> <li><a href="" title="">DDDD</a></li> </ul> </body> </html>

    • ベストアンサー
    • HTML
  • CSSのリスト表示

    リストの表示ですが、li a で上下と左にpaddingを入れたいです。 IEではOKなのですが、Firefoxでは右に背景色が飛び出てしまいます。 どこを直したら良いでしょうか。 <?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> で組んでいます。 #category { width: 180px; float: left; } #categoryt ul { border-top: 1px solid #999999; } #category li { border-bottom: 1px solid #999999; } #category li a { display: block; width : 100%; padding: 5px; background-color: #F6F6F6; text-decoration:none; color: #000033; } #category a:hover { background-color: #DBE7EE; color: #003366; } --------------------- <div id="category"> <ul> <li><a href="#">AAA</a></li> <li><a href="#">BBB</a></li> </ul> </div>

    • ベストアンサー
    • HTML
  • cssで、入れ子になったリストに別のデザインを適用したくてつまづいてい

    cssで、入れ子になったリストに別のデザインを適用したくてつまづいています。 ■ソース <ul id="column-topmenu"> <li><a href="#">●●●</a></li> <li><a href="#">●●●</a></li> <li><a href="#">●●●</a>     <ul class="sub"> <li><a href="#">●●●</a></li> <li><a href="#">●●●</a></li> </ul> </li> <li><a href="#">●●●</a> </li> </ul> ■CSS(親リストの指定) ul#column-topmenu li { padding: 15px 20px 15px 25px; list-style:none; background: url(../img/title2_bg.gif) no-repeat; font-size: 17px; line-height: 1.1; } 親要素のリストには、背景画像をつけるのですが、 入れ子のほうには背景画像なしで、テキストを整形して並べるだけです。 システムで生成する関係上、<li>にはIDを振ることができません。 <ul>は可能です。 入れ子のulには、subとつけて、試行錯誤しているのですが、 どうしても背景画像が反映してしまって・・・。 ご教示ください。 よろしくお願いします。

  • CSS で li を float させる方法

    リスト項目を横並びにfloatさせたいいんですが、 li {list-style:none url(../image/icon/article.png) inside;} と指定すると、floatできないようです。 どうすればlist-styleを指定したliをfloatさせることできますか? コートは以下のようにしています。 よろしくお願いします。 【HTML】 <div class="YYY"> <ul> <li class="movie"><a href="">MOVIE</a></li> <li class="photo"><a href="">PHOTO</a></li> </ul> </div> 【CSS】 .YYY {margin:10px 0;} .YYY ul {margin:0px;padding:0px;} .YYY li.photo {float:left;list-style:none url(photo.png) inside;} .YYY li.movie {float:left;list-style:none url(article.png) inside;}

    • ベストアンサー
    • HTML

専門家に質問してみよう