• 締切済み

floatで並べた2つのdivの高さを揃えるには?

コーディング初心者です。 以下の内容のcssがかけなくて困っています。 内容は <p id="a">A</p> <div id="b">B</div> <p id="c">C</p> 今はこの3つをfloatで横並びにします。 #a {float: left;} #b {float: right;} #c {float: right;} ここで、BとCに入る内容が変わる場合でも2つの高さが揃うようにしたいのですが、 MTを使用し、Bを表示させないこともあるので、 BとCを<div>で囲み幅を指定することができません。 何か方法はありますでしょうか? 参考のURL等を教えていただけるだけでもたすかります。 よろしくお願いします。

  • CSS
  • 回答数5
  • ありがとう数6

みんなの回答

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

 すみません。タブインデントを置換するのを忘れて投稿したので、インデントがわかりづらいですね。  このようにidを使わないと、同じような内容のセクションがいくつ連続していても良いですね。 <body>  <h1>  <p>  <div class="section">   ・・・  </div>  <div class="section">   ・・・  </div>  <div class="section">   ・・・  </div> </body> また、ブロックの配置にfloatを使わない方がよいのは、本文中でfloatさせたい添付画像がある場合、それを本文中でclearできなくなるからです。floatはブロックを配置するためではなく、あくまで文章を画像などの周囲を回り込ませるためのものです。

decoooo
質問者

お礼

「floatはブロックを配置するためではなく、あくまで文章を画像などの周囲を回り込ませるためのものです。」 なるほど、 floatの使用を勘違いしておりました。 ORUKA1951さまには、質問直後から時間をさいていただき、本当に感謝いたします。

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

HTMLのマークアップは、文書構造が理解できるように・・・ 今回の場合、地位と写真は、ひとつのsection(章)に含まれるわけですから、同じdiv内にないと、当然「高さをそろえる」という表現と整合が取れません。正しい(文書解析木に従った)HTMLを書かないと、CSSがかけないとはそういう意味です。  また、繰り返しになりますが、デザインのためにIDを記述するのは良くありません。ID、CSSで言うところの一意セレクタは文字通りHTML内の唯一無二の要素を特定するもので、詳細度も100ありますから、サンプルようなグループ化やCSSの最大の利点であるカスケーディングを利用しにくくなります。  セレクタで詳細度を考慮して記述すると、無駄なIDを書かなくても特定の要素にスタイルシートを適用できます。 サンプルは、HTML4.01strictで書いておきました。こんなシンプルなHTMLで良いのですよ。CSSもそのためシンプルになる。「HTMLは文書構造を」「スタイルシートはデザインを」と使い分けましょう。  このHTMLは、 The W3C Markup Validation Service ( http://validator.w3.org/#validate_by_input ) Another HTML-lint gateway ( http://openlab.ring.gr.jp/k16/htmllint/htmllint.html ) W3C CSS 検証サービス ( http://jigsaw.w3.org/css-validator/#validate_by_input ) で検証してあります。私は常にチェックするようにしています。 ★タブインデントを_(全角)に置換してありますので、元に戻すこと。 <!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{line-height:1.4em;} p{margin:0.1em 0;text-indent:1em;} div.section{ width:640px;margin:auto; border:1px gray solid; position:relative; padding:0; } div.section div.position, div.section p.photo{ position:absolute; width:150px; top:0; border:1px black solid; height:100%; margin:0; } div.section div.position{ left:0; } div.section p.photo{ right:0px; } div.section p{ margin:0 160px; } div.section ul.license, div.section ul.hobby{margin-left:180px;} div.section div.position p{margin:0;} /* 表示テスト用色分け */ body{background-color:gray;} div.section{background-color:silver;} div.section div.position{background-color:aqua;} div.section p.photo{background-color:white;} --> </style> </head> <body> <h1>タイトルが入ります</h1> <div class="section"> <p>メーッセージがはいります。</p> <p>長い文章のメーッセージが、だらだらと、延々とはいるとインデントされます</p> <div class="position"> <p>役職</p> <p>名前</p> </div> <ul class="license"> <li>資格2</li> <li>資格2</li> <li>資格3</li> </ul> <p class="photo"><img src="url" alt="プロフィール写真" width="100" height="120"></p> <ul class="hobby"> <li>趣味はスポーツです</li> <li>趣味はスポーツです</li> </ul> </div> </body> </html>

  • mikemike7
  • ベストアンサー率87% (97/111)
回答No.3

HTMLは得意ではないので、参考になるかわかりませんが^^; 以下、質問者さんのHTMLソースを下に修正を加えたものです。 // CSS部 #content { background-color: #cccccc; width: 600px; padding: 10px; margin-bottom: 15px; } #content #messageBox { width: 580px; margin-bottom:15px; } div#messageBoxtop { position:relative; } #content #messageBox #message { width: 300px; /*float: left;*/ top: 0; left: 0; position: absolute; } ul#prof{ list-style-type: none; width: 220px; background-color: #ffffff; position: relative; top: 0; left: 320px; } ul#prof > li#photo { /*float: right;*/ width: 70px; position: absolute; top: 0; left: 0; padding-left: 10px; padding-top: 10px; padding-bottom: 10px; } ul#prof > li#profile { /*float: right;*/ width: 130px; position: relative; top: 0; left: 70px; background-color: #FFFFFF; padding: 10px; } #content #messageBox #profile #name { padding-left: 10px; margin-bottom: 5px; } #content #messageBox #profile ul#license { line-height: 1.3em; font-size: 79%; } #content #messageBox #profile ul#hobby{ } // HTML部 <div id="content"> <h1>タイトルが入ります</h1> <div id="messageBox"> <div id="messageBoxtop"> <div id="message"> メーッセージがはいります<br /> メーッセージがはいります </div> <ul id="prof"> <li id="profile"> <div id="name"> <p>役職</p> <p>名前</p> </div> <ul id="license"> <li>資格2</li> <li>資格2</li> <li>資格3</li> </ul> <li id="photo"><img src="bt029_36.gif" alt="プロフィール写真" /> </ul> </div> <ul id="hobby"> <li>趣味はスポーツです</li> <li>趣味はスポーツです</li> </ul> </div> </div> absoluteとrelativeで作っているので、常に長いほうをベースにします。 提示ソースのものだと、 「メーッセージがはいります」の部分が長くなりすぎるとはみ出ます。 こちらのほうが常に長くなるようでしたら、こちらをベースにすればいいかと思います。 同じように写真と名前の部分も、名前のほうをベースにしています。 写真の縦幅が名前を越えてしまうとはみ出ます。 はみ出るのを防ぐなら overflow などを使うしかないと思います。 まあ、参考になりましたら。

decoooo
質問者

お礼

とても丁寧にご指導いただいて、本当にありがとうございます。 floatを使用せずにpositionを使用するのですね。 大変、参考になりました。 ただ、写真部分がない場合も考慮しなければならないので、 頂いたものから調整してみようと思います。 わかりづらい説明の質問でしたが、お答えいただき、感謝いたします。 ありがとうございました。

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

 これだと、アンチテーブル派の私でも、十分tableなので、tableでマークアップしたほうが良いと思います。  ただ、どうデザインするかが先立ってしまったためか、意味不明の順番になっていますね。

decoooo
質問者

お礼

再度、ご回答をいただき、ありがとうございました。 tableでつくってみます。 確かに、自分以外の方がみるとわからないのでは、よくないですね。。。 もっときれいに、整理されたコードがかけるようになれるように努力します。。。 本当にありがとうございました。

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

 MTとは何でしょう。できるだけ多くの人にわかるよう一般的でない省略はしないほうが良いです。  CSSの説明サイトやツールが出力するものでない限り <p id="a">A</p> #a {float: left;} なんてないです。HTMLを正しくマークアップしていると、CSSは簡単なものになるはずです。一意セレクタはいらない。 例: <body>  <div class="header">   <h1>見出し</h1>   <p>・・・・</p>  </div>  <div class="section">   <h2>見出し</h2>   <p>あいうえお</p>   <div class="figure">    <img src="[URL]">   </div>   <div class="aside">    <h3>脚注</h3>    <p>・・・</p>   </div>  </div>  <div class="section">   <h2>見出し</h2>   ・・・・・  </div> </body> の場合として、div.section(本文)内のdiv.figure(挿絵)を左に、div.aside(脚注)を右に配置したいなら、普通に div.figure,div.aside{top:0;width:200px;} div.aside{float:right;}div.figure{float:left;} div.section{clear:both;position:relative;padding:0 200px;} で良いのではないですか?  肝心なことは、デザインのためではなく文書構造に従って正しくマークアップする。それさえできていれば、どのようにも配置できる。どうしても足りなければ、HTMLを見直す。  あなたが作成されている部分の文書内容--文書内のどんな要素なのか--を教えてください。そこから出発ですよ。  

decoooo
質問者

お礼

返答いただきありがとうございました。 わかりづらくて申し訳ありません。 再度、詳細を記述いたしました。 質問の内容は <div id="name">と<p id="photo">だけ背景を同じ色にして、高さを揃えたいです。 ORUKA1951さんの方法で一度試してみます。 ただ、まだわからない時は再度質問させてください。 【html】 <body> <div id="content"> <h1>タイトルが入ります</h1> <div id="messageBox"> <p id="message">メーッセージがはいります<br />メーッセージがはいります</p> <div id="profile"> <div id="name"> <p>役職</p> <p>名前</p> </div> <ul id="license"> <li>資格2</li> <li>資格2</li> <li>資格3</li> </ul> </div> <p id="photo"><img src="url" alt="プロフィール写真" /></p> <ul id="hobby"> <li>趣味はスポーツです</li> <li>趣味はスポーツです</li> </ul> </div> </div> </body> 【css】 #content { background-color: #cccccc; width: 600px; padding: 10px; margin-bottom: 15px; } #content #messageBox { width: 580px; margin-bottom:15px; } #content #messageBox #message { width: 300px; float: left; } #content #messageBox #photo { float: right; width: 70px; background-color: #FFFFFF; padding-left: 10px; padding-top: 10px; padding-bottom: 10px; } #content #messageBox #profile { float: right; width: 130px; background-color: #FFFFFF; padding: 10px; } #content #messageBox #profile #name { padding-left: 10px; margin-bottom: 5px; } #content #messageBox #profile ul#license { line-height: 1.3em; font-size: 79%; } #content #messageBox #profile ul#hobby{ clear: both; }

関連するQ&A

  • コーディングで「float」のclearの仕方

    htmlとcssのコーディングに関して質問させてください。 右側と左側にボックスをフロートさせた際、 どうやって回り込みを解除したらよいのか教えてください。 ▼htmlのタグ <div id="left">......</div> <div id="right">......</div> ▼cssのタグ #left{float:left; width:100px;} #right{float:right; width:100px;} このようなコーディングをした際には、 html、もしくはcssのどちらに、どのようなタグを 追加して回り込みをなくしたらよろしいでしょうか? 分かりにくいかもしれませんがご教授いただければ幸いです。

  • cssのfloatについて

    cssのfloatを使い横並びを実現していますがoverflowを利用して横並びを実現するという方法を聞きました。 現状の構成は具体的に以下のような感じです。 <div id="main"> <div id="left">レフト</div> <div id="center">センター</div> </div> #main:after { content: "."; display: block; visibility: hidden; height: 0.1px; font-size: 0.1em; line-height: 0; clear: both; } #left {float: left;} #center { float: right} これをoverflowで実現するにはどうすればいいのでしょうか? また、floatを使用しないで実現するメリットはなんでしょうか?

    • ベストアンサー
    • HTML
  • float divの関係

    ブロックdiv(Pとします)の中に、2つのブロックdivがあります。それぞれA、Bとします。 floatでA、Bを左寄せに並べた場合、Pに適用したスタイルシートがA、Bに反映されません。(文字サイズなど) 何が問題でしょうか? よろしくお願いします。 <div id="P-style"> <div id="A-style">aa</div> <div id="B-style">bb</div> </div>

    • ベストアンサー
    • CSS
  • 【CSS】floatで左右に並べた<div>のマージンが効かない。

    CSS(スタイルシート)においてfloatで2つのdivを左右に並べる方法は定番ですが、<div id="A">に設定したマージンが【firefox】でききません。 おそらく基礎的なことと思われますが、検索の仕方が悪いのか、 該当する質問を探し出すことが出来ませんでしたので、質問させていただきました。 どなたか、教えていただければと思います。 【HTML】--------------------------------- <div id="A">   <div class="B">    <h3>テキスト</h3>    <p>タイトル</p>    <table>     <tr>      <th scope="col">テキスト</th>      <td>テキスト </td>     </tr>     <tr>      <th scope="col">テキスト</th>      <td>テキスト</td>     </tr>    </table>   </div>   <div class="C" >    <h3>テキスト</h3>    <p>タイトル</p>    <table>     <tr>      <th scope="col">テキスト</th>      <td>テキスト </td>     </tr>     <tr>      <th scope="col">テキスト</th>      <td>テキスト</td>     </tr>    </table>   </div> </div> 【CSS】--------------------------------- #A {     margin-bottom:10px } #A h3{ background:url(../images/bg_h3_option_half.gif) no-repeat; width:380px; height:31px; padding:0 0 0 15px; margin:10px 0 0 0; overflow:hidden; font-size: 22px; color:#FFFFFF; font-style:normal; } #A div.B { float:left; width:380px; height: 100%; margin-right:20px; } #A div.C { float:left; width:380px; height: 100%; }

    • ベストアンサー
    • HTML
  • div#left {width:50%;

    div#left {width:50%; float:left; border:1px solid black;} div#right {width:30%; border:1px solid red;} がfloatされません。なぜでしょうか? <html> <head> <title>a</title> <style type="text/css"> <!-- div#left {width:50%; float:left; border:1px solid black;} div#right {width:30%; border:1px solid red;} --> </style> </head> <body> <div id="left"> left </div> <div id="right"> right </div> </body> </html> これでなぜならないのでしょうか?

  • floatタグの使い方

    FOM出版 WEBクリエイター検定 初級のテキスト問題で分からないことがあります。 詳しいかたお力をおかしください。 htmlファイルの記述ーーー(少し簡略化してます) <!DOCUTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www3c.org/TR/html4/strict.dtd"> <html> <head> <link rel="stylesheet" type="text/css" href="style.css"> </head> <body> <div class="left"> <p>古代の七不思議</p> </div> <div class="right"> <p>古代の七不思議</p> </div> </body> </html> CSSの記述ーーー .left{color:#000000; background-color:#cccc99; padding:10px; margin-left:10px; width:300px; float:left; } .right{color:#000000; background-color:#cccc99; padding:10px; margin-left:350px; width:300px; } これが正解のようで、クラスleftの右にクラスrightが回り込みます。 しかし僕にはクラスrightに記述したmargin-left:350px;がよく分かりません。 divタグでボックスを二つ創ってあるので、.leftにfloat:left;の記述をして .rightが回り込んで.rightにmargin-left:10px;記述とかで隙間が開くのだと思っていました。 ちなみに.rightのmargin-left:350px;を10pxにして.rightにもfloat:left;とかけるとうまく回り込みます。これもよくわかりません。 つたない文章で分かりづらいかもしれませんが、どうか解説をお願いいたします。 よろしくお願いします。

    • ベストアンサー
    • HTML
  • CSSでdivの縦幅を指定する方法

    CSSで、div領域の縦幅を指定する方法を教えてください。 下記のような感じのHTMLで、Aが外枠、中のBとCがfloatを使って横並びになっています。 B、C共に、縦のサイズをAの縦幅いっぱいまで(内容の高さに拘わらず常に)広げる方法がわかりません。 (ブログのテンプレート用なので、内容は一定ではありません) height:100%としてみましたが無理でした。 <div id="A">   <div id="B">     メニュー   </div>   <div id="C">     本文   </div> </div> よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • ボックス(div)の縦方向中央をそろえる

    <div id="wrap"> <div id="a">~</div> <div id="b">~</div> </div> #a { float: left; } #b { float: right; } a, b を wrap で包み、a, b を float で左右に並べています。 この a と b のボックスの高さが違うとき、これらを縦方向センターでそろえるにはどうしたらよいでしょう?

    • ベストアンサー
    • HTML
  • HTMLのCSS(float)の設定がよくわかりません

    HTMLのCSS(float)の設定がよくわかりません 画像のように各配置はうまく表示されているのですが footerのCSSを #footer { width: 100%; float: left; clear: both; } と表記するとwrapperのCSSで表記した外枠のボーダーが footerの前で切、footerの左横に1px~2pxの隙間が できてしまうのですが、その理由をわかる方いらっしゃいますか。 宜しくお願い致します。 footerの表記を #footer { width: 100%; clear: both; } とすると、ボーダーも1pxの隙間もなく正常に表示されます。 宜しくお願い致します。 ■HTML <html> <body> <div id="wrapper"> <div id="header"></div> <div id="container"> <div id="left"></div> <div id="right"></div> </div> <div id="footer"></div> </div> </body> </html> ■CSS #wrapper { width: 700px; border-right-width: 1px; border-left-width: 1px; border-right-style: solid; border-left-style: solid; border-right-color: #000; border-left-color: #000; } #container { overflow: hidden; } #left { float: left; } #right { float: left; } #footer { width: 100%; float: left; clear: both; } わかる方いらっしゃいましたら 宜しくお願い致します。

    • ベストアンサー
    • HTML
  • div領域をウインドウサイズに合わせる

    divタグで生成された3つの領域を横に並べたいのですが、 左2つは幅をピクセル指定で固定し、3つめをウインドウサイズに合わせて残りの幅全てを使う、という指定はどうすればいいでしょうか? 高さもやはりウインドウサイズにあわせるようにしたいです。 また、左2つの領域は固定したまま、3つめの領域のみスクロールができるようしたいです。 現在下記で試していますが、うまくいきません。 お分かりになる方、知恵をお貸しくださいo(_ _*o) 【HTML側】 <div id="left">1</div> <div id="center">2</div> <div id="right">3</div> 【CSS側】 html,body{   height:100%;   width:100%;       } div#left{   width:150px;   height:100%;   float:left; } div#center{   width:160px;   height:100%;   float:left; } div#right{   width:100%;   height:100%;   float:left; }

    • ベストアンサー
    • HTML