• ベストアンサー

floatを使ったデザインについて

CSSで、左側にメニュー・右側にメイン記事、という 設定にしたいのですが(ブログではありません)、うまく行きません。 以下の状態で、IE6.0では思い通りに左右に分かれてくれるのですが、 FireFoxの場合に 右カラムの.midashiで指定したグリーンの背景色が、左カラムの左端から始まってしまい、 文字は.midashi、.text共々「画像に回り込むテキスト」のように 左のメニューが終わったところで左カラムの左端から始まります。 #right_textに、margin-right:0px;、margin-left:auto;と付け加えると FireFoxでも予定通り、左右がキレイに分かれてくれるのですが 本来、こうするものなのでしょうか? ブログのカスタマイズもしたことがあるのですが、 http://allabout.co.jp/internet/hpcreate/closeup/CU20050228A/index3.htm この通りなら、こんな風にしなくても大丈夫ですよね? いつもテキストエディタで入力しているので 素人ながらに色々とチェックはしたのですが(スペルミス・ブラウザ間のpadding合わせなど) 基本的なことが間違っていないか、御教授ください。 [HTMLソース] <div id="frame"> <div id="left_text"> (中略) </div> <div id="right_text"> <div class="midashi"> らりるれろ </div> <div class="text"> ああああああ<br> いいいいいい<br> </div> </div> </div> [CSSソース] #frame { width : 660px; background-color : #F0F0F0; } #left_text { width : 150px; float: left; padding-left: 10px; padding-right : 10px; } (#left_text内の細かい部分は省略) #right_text { width : 470px; padding-left: 10px; padding-right : 10px; } .midashi { font-size:20px; background-color: #b3c716; width : 470px; } .text { line-height: 170%; font-size: 15px; width : 470px; }

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

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

  • ベストアンサー
noname#23734
noname#23734
回答No.1

それで良いと思いますよ。 確かfloat:leftが指定された要素に続く要素がNormal flowの場合は、float:leftが指定された要素が作るブロックのパディング左上と続く要素が作るマージン左上が重なるようになると思いました。 そして続く要素の行ボックスはfloat:leftが指定された要素の幅分幅を縮めて親ブロック上パディングから順番に並べられその高さがfloat:leftが指定された要素の高さを越えると親ブロックの幅になると思います。 でも続く要素にfloatが指定されているとそのようにならず続く要素は指定された方向に寄せられるのだと思いました。 そしてある要素の子供要素の全てにfloatが指定されているとその要素が作るボックスの高さは0になるのだと記憶しております。 そのように考えると正しい表示だと思えませんかね。 #right_text にmargin-left:150pxを入れると一見希望通りに表示されると思います。 でも、#right_text にpaddingが指定されているのに、.text と#right_text が同じ幅ってのがスッキリしませんけど、margin-right:0pxもありだとおもいますね。

a_berry
質問者

お礼

丁寧な御回答、ありがとうございました。 回答を読ませて頂いて、自分の考えと1から比較しつつもう一度調べたところ、 floatの解釈に、先入観、思い違いがあったことがわかりました。 左右のカラムに分ける時に、左カラムにfloat:leftを、右カラムにfloat:rightを使う方法も あったと覚えています。右カラムにmargin-right:0px left:autoを使う方法と どちらが理にかなっているのでしょうか? 重ねて質問になってしまってすみません。

その他の回答 (3)

  • quads
  • ベストアンサー率35% (90/257)
回答No.4

#frame のボックスを用いて表現したいことがあるかによって多少完成形が異なります。 指定方法の違いについて、その妥当性に関する差異はあまりないように思われます。 こちらの内容は既に認識されているでしょうか。 http://www.geocities.jp/multi_column/

a_berry
質問者

お礼

臨機応変に対応していかなければならないということを、今回の質問で痛切に感じました。 解りやすいサイトを教えてくださってありがとうございます。 ずっとこういう解りやすいレイアウトの説明をされているサイトを探していました。 よく読んで勉強致します。ありがとうございました!

noname#23734
noname#23734
回答No.3

>どちらが理にかなっているのでしょうか? 正直、これについては私にはなんとも言えません。 CSSの仕様書にもブラウザの振るまいについてのあるべき姿のようなことは書かれているようですが、スタイルシートの書き方に付いては特にこうあるべきと言うことは書かれていません。 私もこの質問を拝見させて頂いてこの方法もアリかなと思ったしだいです。 でもこの方法って意外と使われていないですよね。 前の回答でも書きましたがfloat:left,rightの組み合わせでは#frameの高さが0になるので色分けなどをすると少々不都合が出るし、margin-leftを使うとIEで見たときに#right_text内の行ボックスに微妙な(3px程度)違和感が出ます。 margin-right:0pxでこの違和感が出なく#right_textの内容が充分にあるのなら意外と理想的ではないでしょうか。

a_berry
質問者

お礼

再びありがとうございます。「こうあるべき」というのが無いのですね。 自由に出来そうな分、自分の思っている表現が出来ていても、実は正しくないんじゃないかな、と思ってしまいます。 でも大丈夫と解ってホッとしました。 width:150pxのご指摘の方も、ありがとうございました。

回答No.2

一般的には#1さんのおっしゃるように#right_textに左マージンを付けるか、 #right_textに[float: right;]を与えてボックス配置を明確に分けてしまえば後々メンテがしやすいと思います。 ただ[float: right;]を追加するとコンテンツが全てfloatになってしまい一番大きなくくりである#frameの背景色がFirefoxなどでは適用されない(本来はこれが正しい)ので、 どうしてもその背景色を適用したいのであればbodyに指定するか、 別途フッターなどでfloatを解除する[clear: both;]等の記述を追記する必要があります。 floatでの段組はいろいろサンプルになるサイトも多いのでそれらを参考にしてカスタマイズしながら覚える(技を盗む)のが一番だと思います。 分かりにくい説明で申し訳ございません、至らぬところ等ございましたら補足願います

a_berry
質問者

お礼

#1さんの説明で概要は解ったような気がしていましたが、全部を心得てはいなかったようで、 先ほど試してみた時に仰るとおり背景色が適用されず、#2さんの文章を読んでなるほどと思った次第です。 解りやすい説明、ありがとうございました。

関連するQ&A

  • IE6でfloatされない。

    IE6でfloatされない。 横幅950pxのコンテンツの中に divで3つのboxを作って横一列に並べているのですが ie7,8, firefoxでは意図した通りに表示されますがie6ではdiv id="c"(下記ソース)がfloatされません、どなたか解決策をご指導お願いします。 <div id="a"><img src="img/left.png" width="403" height="240" alt="スペース左" title="" /></div> <div id="b"><iframe name="iframe3" id="iframe3" frameborder="0" scrolling="no" src="home.html" title="******">*******</iframe></div> <div id="c"><img src="img/right.png" width="403" height="240" alt="スペース右" title="" /></div> css記述は下記の通りです #a{ padding-top : 0px; padding-left : 0px; padding-right : 0px; padding-bottom : 0px; margin-top : 0px; margin-left : 0px; margin-right : 0px; margin-bottom : 0px; width : 403px; height : 240px; float : left; display : inline; } #b{ padding-top : 0px; padding-left : 0px; padding-right : 0px; padding-bottom : 0px; margin-top : 0px; margin-left : 0px; margin-right : 0px; margin-bottom : 0px; width : 144px; height : 240px; float : left; display : inline; } #c{ padding-top : 0px; padding-left : 0px; padding-right : 0px; padding-bottom : 0px; margin-top : 0px; margin-left : 0px; margin-right : 0px; margin-bottom : 0px; width : 403px; height : 240px; float : left; display : inline; } #iframe3{ border-width : 0px 0px 0px 0px; margin-left : 0px; width : 144px; height : 240px; padding-top : 0px; overflow : hidden; margin-top : 0px; margin-right : 0px; margin-bottom : 0px; padding-bottom : 0px; padding-left : 0px; padding-right : 0px; } 宜しくお願いします。

  • 3カラムのサイトでfloatができない

    3カラムのホームページを作っているのですが、 中央と右のカラムがどうしてもfloatできません。。 左カラムをfloat:leftにして、中央と右のカラムを#contentsBoxで囲ってfloat:rightさせています 【HTML】 <div id="wrapper_2"><!--div id wrapper_2 START--> <div id="contentsBox"><!--div id contentsBox START--> <div id="560"><!--div id 560 START--> 中央カラム     </div><!--div id 560 END--> <div id="175"><!--div id 175 START-->     右カラム </div><!--div id 175 END--> </div><!--div id contentsBox END--> <div id="205"><!--div id 205 START-->     左カラム </div><!--div id 205 END--> </div><!--div id Wrapper_2 END--> 【CSS】 /*+++wrapper_2++++++++++++++++++++++++++*/ #wrapper_2 { width: 984px; background-color:#fff; padding: 8px; margin: 10px auto 10px auto; overflow: hidden; } /*+++contentsBox++++++++++++++++++++++++++*/ #contentsBox { width: 757px; float: right; } #contentsBox:after { height: 0; visibility: hidden; content: "."; display: block; clear: both; } /*+++左カラム+++++++++++++++++++++++++++++*/ #205{ width: 205px; margin: 0 22px 0 0; float: left; } /*+++中カラム+++++++++++++++++++++++++++++*/ #560{ width: 560px; float: left; } /*+++右カラム+++++++++++++++++++++++++++++*/ #175{ width: 175px; float: right; margin-left: 22px; } まだ勉強中なので、初歩的なミスなのかもしれませんが、 どうしても中央カラムの下に右カラムがきてしまいます。 (ドリームウィーバーで見たら、望み通りの配置になっているのですが、ブラウザでチェックすると、中央カラムの下に右カラムがきてしまいます) アドバイスいただければ嬉しいです。 よろしくお願い致します。

    • ベストアンサー
    • CSS
  • floatを使用すると中央寄せにならない

    CSSについて質問があります。 floatを使って2段組のレイアウトにしたのですが、 MacのIE5.2で見ると、floatを使ったdiv(container)だけ中央寄せではなく 左寄せになってしまいます。MacのSafariやFirefoxでは正常に見れました。 URL:http://fuma.xrea.jp/ /* CSSソース*/ html{height : 100%; width : 100%;} body{width : 100%; text-align : center; margin : 0px auto; padding : 0px;} #container{ margin : 0px auto; padding : 0px; width : 720px;} div#main{ text-align : left; width : 490px; margin : 0px; padding : 8px 0px; float : left;} div#side{ margin : 0px; padding-bottom : 8px; text-align : left; width : 230px; float : right;} div#copyright{ text-align : center; margin : 0px auto; padding : 10px 0px; clear : both; width : 720px;} /* HTMLソース */ <div id="container"> <div id="side">てすと</div> <div id="main">てすと</div> </div> <div id="copyright">test</div> <div align="center">を使っても中央寄せになりませんでした。 どうすれば、MacのIEでも中央寄せにできますか?

    • ベストアンサー
    • CSS
  • 回り込みfloatの間隔について質問です

    ボックスでボックスを回り込みしています。(?) …書いたほうが早いですね… HTMLが <div id="left"> 左ボックス </div> <div id="right"> 右ボックス </div> CSSが *{ margin: 0px; padding: 0px; } #left { float: left; width: 100px; height: 100px; } #right{ width: 200px; height: 100px; } といった感じです。 左ボックスと右ボックスの間に1~2pxほどの間隔があいてしまいます。 これをなくすにはどうすればいいですか? お願いします。

  • 3カラムのカラム落ちについて質問です。

    3カラムのカラム落ちについて質問です。 IE6だけ3カラムのうち右カラムだけカラム落ちしてなおりません。 ネットで検索して色々試した結果「clear: right;」を追加したら右に戻ったのですが、今度は隙間ができました。 <div id="wrap">  <div id="left">左カラム</div>  <div id="left">メインカラム</div>  <div id="left">右カラム</div> </div> という形です。 --CSS-- #wrap{ width: 970px; margin: 0 auto; background-color: #FFFFFF; height: 100%; min-height: 100%; position:relative; overflow: hidden; } #left{ width: 175px; margin: 15px 15px 0 15px; padding: 0; float: left; display: inline; } #contents{ width: 560px; float: right; margin-top: 15px; display: inline; clear: right; } #right{ width: 175px; margin: 15px; float: right; display: inline; clear: right; } です。 それぞれの中にはmargin やpaddingを使っています。 2日間それで悩まされていますができずに困っています。 IE6以外はすべて大丈夫なので、分かるかた教えてください。

  • CSSで文字が流れ込んでしまいます

    CSS勉強中ですが、このように組んだらFireFoxで見ると左のコンテンツより右のテキストを増やした場合に左の<div id="leftside">の領域まで文字が行ってしまいます。 clear: bothを入れるのかなぁと思いつつ、色々なところに入れてみたのですが、変らなくて・・・。 どのようにしたらいいでしょうか。 body { margin-top: 0; background: #30689D; text-align: center; } #header{ width: 760px; margin-left: auto;    margin-right: auto; background: #E2E2E2; } #container{ width: 760px; margin-left: auto;    margin-right: auto; background: #FFFFFF; text-align: left; } #wrap { padding: 0px; } #leftside{ width: 170px; float: left; background: #FFFFFF; } #photo{ width: 570px; float: left; margin-left: 10px background: #FFFFFF; } #news{ width: 570px; margin-left: 10px background: #FFFFFF; } #footer{ width: 760px; margin-left: auto; margin-right: auto; padding: 10px 0px 10px 0px; background: #E2E2E2; text-align: right; } p { margin: 0; padding: 0; } -----HTML <div id="header">ヘッド</div> <div id="container"> <div id="wrap"> <div id="leftside"> <p>1</p> <p>2</p> <p>3</p> <p>4</p> <p>5</p> </div> <div id="photo"> <p>写真を入れたいところ</p> </div> <div id="news"> <p>ここの文字をたくさん入れて下に増えるとと左に文字が流れ込んでしまいます。</p> <div id="footer">フッターく</div>

    • ベストアンサー
    • 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】floatを指定するとはみ出します

    ブロック要素をfioatで横並びにした際に、画像とテキストが全体を囲っている要素(親要素)からはみ出すことが多々あります。 その度に高さを指定して回避しているのですが、こちらはその他に回避の方法というのはあるのでしょうか? それとも、自分の記述がおかしいのでしょうか? 例えば下記の例です。 こちらは左に画像、右にタイトルとコメントが入ります。 <div class="aaa"> <div class="left"><img src="photo.jpg" width="180" height="120"></div> <div class="right"> <h3 class="title">タイトルです</h3> <div class="comment">コメントです</div> </div> </div> //////////////////////////////////// .aaa{ margin-bottom: 5px; padding-top: 7px; padding-right: 10px; padding-bottom: 7px; padding-left: 10px; clear: both; } .left{ float: left; height: 120px; width: 180px; } .right{ float: left; padding-left: 10px; width: 380px; } .title{ font-size: 90%; line-height: 120%; padding-right: 10px; padding-left: 10px; width: 360px; padding-top: 3px; padding-bottom: 1px; clear: both; } .comment{ font-size: 80%; line-height: 120%; padding: 5px; clear: both; }

  • 背景に影をつける方法(CSS)を教えてください。

    以前からやりたかったメインの背景の左右に影をつける方法にチャレンジしているのですが、IE6だけ少しうまくいきません・・・ やり方としてはメイン(wrapper)のボックスに+影の幅(左+右)のwidthを指定して、左右の影の幅分を左右それぞれにpaddingを指定しています。 その中をヘッダー+2カラムで構成しているのですが、IE6だけ右側部分のpaddingが2倍?になっているのか、おさまりきらず下に回り込んでしまいます。 その他のブラウザでは左右に2カラムが表示されています。 これはIE6のバグの一種でしょうか? これの解決方法を教えていただけないでしょうか? <div id="main" class="clearfix"> <div id="header"> </div> <div id="left"> いいいいいいいいいいいいいいいいいいいいいいい </div> <div id="right">aああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ</div> </div> body { font-size: 12px; margin: 0px; padding: 0px; height: auto; width: 100%; text-align: center; position: absolute; line-height: 150%; background-image: url(img/bg.gif); float: left; } #main { text-align: left; width: 910px; margin-top: 0px; margin: 0px auto; ; ; background-image: url(img/main-bg.gif); padding: 0 10px 0 10px; } #left { text-align: left; float: left; width: 210px; margin-left: 0px; padding: 10px 0 10px 0; } #right { width: 700px; float: right; }

    • ベストアンサー
    • HTML
  • cssによる配置の計算が合いません

    cssによる配置で width の計算がうまくあいません。 コンテンツ部分が 750(ページ)-5(padding)-1(border)-134(navi-width)-5(padding)-1(border)=604(contents-border) ちなみにSafariでは計算通りでした。 IE6ではだめなようです。 くわしくは <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <meta http-equiv="Content-Style-Type" content="text/css"> <style type="text/css"> BODY { padding-top : 0px; margin-top : 0px; text-align : center; padding-bottom : 0px; margin-bottom : 0px; } #page { background-color : #dd22aa; width : 750px; margin : 0; padding-top : 0px; text-align : left; margin-top : 0px; margin-left : auto; margin-right : auto; margin-bottom : 0px; height: 100%; padding : 0px ; } #header { width : 750px; height : 80px; position : relative; float:left; clear : both; background-color : #008899; padding: 0px; margin: 0px; color : #b99859; } #navi { width : 134px; height : 399px; float : left; position : relative; clear : both; background-color : #ffffff; background-repeat : no-repeat;background-position : center top; padding-top : 50px; padding-left : 0px; padding-right : 0px; padding-bottom : 0px; margin-top : 0px; margin-left : 5px; margin-right : 0px; margin-bottom : 0px; border-left-style : solid; border-left-width : 1px; border-left-color : #000000; } #contents { width :596px; height : 399px; float : right; position : relative; padding : 0px; margin-top : 0px; margin-left : 0px; margin-right : 5px; margin-bottom : 0px; background-color: #9999FF; border-right-style : solid; border-right-width : 1px; border-right-color : #000000; } </style> <title>テスト</title> </head> <body> <div id="page"> <div id="header"> ヘッダー </div> <div id="navi"> ナビゲーション。左のパディングが5px。左のボダーが1px。幅が134px。 </div> <div id="contents"> コンテンツ。右のパディングが5px。右のボダーが1px。幅が596px。計算すると、750-5-1-134-5-1=604(幅)となるはずなのですが、596pxでないとはまりません。 </div> </div> </body> </html>

専門家に質問してみよう