• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:CSSを使って、商品データをボックス形式で羅列)

CSSで商品データをボックス形式で羅列する方法とは?

このQ&Aのポイント
  • CSSを使って商品データをボックス形式で羅列する方法を知りたいです。現在はfloat: left;を使用してボックスを並べていますが、その結果、内容と金額の位置がバラバラで、ブロックの高さを固定することができません。
  • float:とposition: absolute;の組み合わせでは、高さを自動にすることはできませんか?内容の量によってブロックの高さが異なるため、統一された高さにする方法を知りたいです。
  • また、ボックス形式の羅列にはfloat以外の方法があるのでしょうか?float以外の方法でボックスを並べることで、高さの統一と位置の調整ができるのか知りたいです。

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

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

No.1です。  極めて簡単なサンプルを上げておきます。 ・ウィンドウ幅は480px以上あれば、スクロールなしで利用できますのでスマホのような小さな画面でも利用できます。幅広ディスプレイの場合は800px幅まで広がります。 ・価格はabsoluteで配置してあります。  親になる直近のstaticでないコンテナブロックの高さを参照しています。 ・floatと異なり高さの低いデータがあるとに回りこむことはありません。 ★Another HTML-lint 5 ( http://www.htmllint.net/html-lint/htmllint.html# )でチェック済みのウェブ標準(HTML4.01strict+CSS2.1)です。 ★Firefox,GoogleChrome,Opera,safari,IE8以降で同じになるはずです。  IE7以前に対応させる場合はスタイルシートを違うものを読み込むように指定してください。 ★商品リストはシンプルな <ol class="productList">   <li>商品名     <p>\1,200-</p>     <p>ここには、説明が入ります。</p>   </li>   <li>商品名     <p>\12,600-</p>     <p>ここには、長い説明が入ります。</p>     <p>説明</p>   </li> </ol> でマークアップしてあります。価格は最初の<p></p>に入ると想定してあります。 なお、タブは_に置換してあるので必ずタブに戻してください。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="ja"> <head> _<meta http-equiv="content-type" content="text/html; charset=Shift_JIS"> _<title>サンプル</title> _<meta name="author" content="ORUKA1951"> _<meta http-equiv="Content-Style-Type" content="text/css"> _<link rev="made" href="mailto:oruka1951@hoge.com" title="send a mail" > _<link rel="START" href="../index.html"> _<style type="text/css"> <!-- html,body{margin:0;padding:0;} body{background-color:silver;} ol.productList,ol.productList li{list-style:none;} ol.productList{ _display:block;width:80%; _margin:0 auto; _min-width:480px;max-width:800px; } ol.productList li{ _display:inline-block; _text-align:center;width:21%; _border:solid 1px gray; _position:relative; _margin:0.5%; _font-weight:bold; _background-color:white; _padding:0.5%; _min-height:4em; } ol.productList li p{ _text-align:right; _position:absolute; _top:25%; _right:0;width:4em; _font-size:0.8em;font-weight:normal; } ol.productList li p + p{ _text-align:left;text-indent:1em; _line-height:1.4em;margin:0 4em 0 0; _position:static; _width:auto; } --> _</style> </head> <body> _<div class="header"> __<h1>タイトル</h1> __<p>このページでは・・・・</p> _</div> _<div class="section"> __<h2>見出し</h2> __<ol class="productList"> ___<li>商品名 ____<p>\1,200-</p> ____<p>ここには、説明が入ります。</p> ___</li> ___<li>商品名 ____<p>\12,600-</p> ____<p>ここには、長い説明が入ります。</p> ____<p>説明</p> ___</li> ___<li>商品名 ____<p>\1,800-</p> ____<p>ここには、とても長い説明が入ります。説明・説明・説明・説明・説明・説明・説明・説明・説明</p> ____<p>説明</p> ___</li> ___<li>商品名 ____<p>\500-</p> ____<p>ここには、とても長い説明が入ります。説明・説明・説明・説明・説明・説明・説明・説明・説明</p> ____<p>説明</p> ___</li> ___<li>商品名 ____<p>\500-</p> ____<p>ここには、長い説明が入ります。説明・説明・説明・説明・説明</p> ____<p>説明</p> ___</li> ___<li>商品名 ____<p>\500-</p> ____<p>ここには、長い説明が入ります。説明・説明・説明・説明・説明・説明・説明・説明・説明</p> ____<p>説明</p> ___</li> ___<li>商品名 ____<p>\1,800-</p> ____<p>ここには、長い説明が入ります。説明・説明・説明・説明・説明</p> ____<p>説明</p> ___</li> ___<li>商品名 ____<p>\12,600-</p> ____<p>ここには、長い説明が入ります。</p> ____<p>説明</p> ___</li> ___<li>商品名 ____<p>\1,800-</p> ____<p>ここには、とても長い説明が入ります。説明・説明・説明・説明・説明・説明・説明・説明・説明</p> ____<p>説明</p> ___</li> ___<li>商品名 ____<p>\500-</p> ____<p>ここには、とても長い説明が入ります。説明・説明・説明・説明・説明・説明・説明・説明・説明</p> ____<p>説明</p> ___</li> __</ol> _</div> _<div class="footer"> __<h2>文書情報</h2> __<dl class="documentHistry"> ___<dt id="FIRST-PUBLISHED">First Published</dt> ___<dd>2012-08-10</dd> ___<dt id="LAST-MODIFIED">Last Modified</dt> ___<dd>2012-08-10 12:00:00 (JST)</dd> __</dl> __<address>&copy; ORUKA1951 2012 - 2016 All Rights Reserved mailto:*****</address> _</div> </body> </html>

その他の回答 (2)

  • ixkaito
  • ベストアンサー率69% (18/26)
回答No.2

NO.1さんの補足として、ボックス内でposition:absolute;にした要素の幅と高さは、ボックスの高さに加えられません。(ボックスが広げられませんと言った方が良いかもしれません) 例えばボックスの中身を全部absoluteにすると、ボックスにwidth、height、paddingを指定していないと、どちらも0になってしまいます。 そもそも今回のケースでabsoluteにする必要性をあまり感じません。 普通にh1~6、pタグなどで入れたらダメでしょうか?

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

floatないし、display:inline-blockを使います。  floatが良いのはウィンドウ幅によって並ぶ数が変化するので、様々なディスプレイに対応できる利点があります。display:inline-blockでは、固定幅の場合は、コマ一つ一つのサイズが多少異なっても均等配置できることです。ただし、inline-blockに対応していない古いブラウザには使えません。  それと、コマ内の配置は別の問題で、基本的には内部でabsoluteさせても構いません。その場合長さが変わるデーターはstaticにするのが良いでしょう。  またコマの高さにはmax-heightで制限を加えて、oveflow-y:auto;ではみ出した場合にのみスクロールできるようにすると良いでしょう。

関連するQ&A