• 締切済み

CSSの三段組みレイアウトについて教えて下さい。。

CSSレイアウト初心者ですが、CSSの作成段組みを作る時に <div id="container"> <div id="header"> </div><!--/header--> <div id="contents"> <div id="left_bar"> </div><!--/left_bar--> <div id="main"> </div><!--/main--> </div><!--/contents--> <div id="right_bar"> </div><!--/right_bar--> <div id="footer"> </div><!--/footer--> </div><!--/container--> と三段組固定レイアウトを作成したいのですが、 一度目は何回やり直してもfloatの設定でleft_bar,mainの横並びが上手くいかずに、 contentsの中でleft_bar,mainが縦並びになってしまい何回何が原因か様々なサイトで考えを模索してソースを直しても何故かleft_bar,main がcontentsの中で何回書き直しても縦並びになりもう一度一からCSSを組み直してみると、 どうした訳かようやくcontentsの中でleft_bar,mainが横並びになってくれました。 これは一体根本的に何が原因で横並びにさせるつもりが、縦にボックスが並んでしまうのでしょうか? CSSのfloatの概念からハックかなと思いハック親ボックスにハックをかけてみてでも全く関係ないみたいでしたし、親ボックスにピクセルを指定していないからかと思い親ボックスにピクセルで指定しても何故か縦並び?! CSSをもう一度書きなすことで意図したレイアウトになると言う事は一番は何が原因していると見られるのでしょうか?

みんなの回答

  • balloon23
  • ベストアンサー率69% (16/23)
回答No.3

自分の場合、よくあるケースで 1)どっかでclearfix使っている(タグはなくても擬似要素でやってたりとか) 2)タグが正しく記入されているか(謎のdivがあったりしてはまる) 3)ブロック全てにの幅計算が当たっているか(よく100%きっちりにしてIEであぼん) などなど。   可能性ありそうなのは、まずは1と2とかでしょうか?   対策として ◇cssの中に「clear」設定している箇所を探していじる ◇html lintなどで、(主にdivの)閉じ忘れ、余分なものがないかチェックする ◇(ちょっと難易度上がりますが)ブラウザのプラグインなどで要素のチェックをする (firebugとかwebdeveloperとか)   cssのリンク先を間違えてるなんてこともしょっちゅうですが;

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

そもそも、そんなHTMLは書かない!! HTML4.01で 『構造とプレゼンテーションの分離( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html401j/intro/intro.html#h-2.4.1 )』が強く唱えられ、『DIV要素とSPAN要素は、id属性及び class属性と併用することで、文書に構造を付加するための一般機構を提供する。( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html401j/struct/global.html#h-7.5.4 )』 となっていたことは御存知だと思います。  すなわち、divに付くidやclassは、(文書構造を示す要素が用意されていないために)「DIVと組み合わせて文書構造を示すための物」でした。  HTML5では、文書構造を示すために新しい要素( http://standards.mitsue.co.jp/resources/w3c/TR/html5-diff/#new-elements )が追加されDIVは原則使わなくなります。 【引用】____________ここから NOTE: Authors are strongly encouraged to view the div element as an element of last resort, for when no other element is suitable. Use of more appropriate elements instead of the div element leads to better accessibility for readers and easier maintainability for authors.  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ここまで[4.4 Grouping content — HTML5( http://www.w3.org/TR/html5/grouping-content.html#the-div-element )]より <div id="container">要らないでしょう。  <div id="header"></div>headerになるものは沢山あるのでclassでしょう。  <div id="contents">本文はsection   <div id="left_bar"></div>先で右に配置するときや、下にするときはどうする   <div id="main"></div>mainのほうを先に書かなきゃ  </div>  <div id="right_bar"></div>スマホ用に下に置きたいときは?  <div id="footer"></div> </div> 簡単なサンプルです。HTML5にするときは、 <div class="header">その部分のヘッダ</div> → <header></header> <div class="section">本文</div> → <section></section> <div class="nav">ナビゲーション</div> → <nav></nav> <div class="aside">本文と直接関係ない記事</div> → <aside></aside> <div class="footer">文書のフッタ</div> → <footer></footer> にすれば良いです。 ★タブは_に置換してあるので戻す。 ★Another HTML Lint - Gateway( http://www.htmllint.net/html-lint/htmllint.html )  でチェック済みHTML4.01strict+CSS2.1 ★リキッド--スマホから幅広ディスプレイに対応(必要ならmediaqueryでデザインを変える)  当然、フォントを大きくしてもデザインが崩れない。 ★印刷にはデザインが変わる(印刷プレビューで確認)  印刷時には本文でない物は後回しにされる。もちろん検索エンジンにも・・ ★段組にfloat使ってないので、本文内で画像のfloat/clearなど本来の使い方ができる。 <!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" media="screen"> <!-- html,body{margin:0;padding:0;} h1,h2,h3,h4,h5,h6{margin:0;line-height:1.6em;} p{text-indent:1em;} div.header,div.section,div.footer{width:90%;min-width:630px;max-width:900px;margin:0 auto;padding:5px;} div.section{position:relative;min-height:400px;} div.section h2,div.section p,div.section div.section{margin:0 165px;} div.section div.section p{margin:0 auto;} div.section div.section{width:auto;min-width:0;min-height:0;} div.section div.nav,div.section div.aside{position:absolute;width:160px;top:0;height:100%;} div.section div.nav{left:0;} div.section div.aside{right:0;} /* わかりやすいように色分け */ div.header{background-color:aqua;} div.aside{background-color:fuchsia;} body{background-color:gray;} div.footer{background-color:lime;} div.section div.section{background-color:silver;} div.section{background-color:white;} div.section div.nav{background-color:black;color:white;} div.nav a{color:aqua;} --> _</style> _<style type="text/css" media="print"> <!-- a{text-decoration:none;} a:after{content:" (http://hoge.com"attr(href)")";} div.aside{display:none;} --> </style> </head> <body> _<div class="header"> __<h1>タイトル</h1> __<p>このページでは・・・・</p> _</div> _<div class="section"> __<h2>見出し</h2> __<p>本文はsection</p> __<div class="section"> ___<h3>項見出し</h3> ___<p>本文項記事</p> ___<p>sectionの階層でレベルが判断される</p> __</div> __<div class="nav"> ___<ol> ____<li><a href="/">Top</a></li> ____<li><a href="/books">Books</a></li> ____<li><a href="/manual">Manual</a></li> ___</ol> __</div> __<div class="aside"> ___<h3>補足記事</h3> __</div> _</div> _<div class="footer"> __<h2>文書情報</h2> __<dl class="documentHistry"> ___<dt id="FIRST-PUBLISHED">First Published</dt> ___<dd>2013-03-03</dd> __</dl> _</div> </body> </html>

noname#206842
noname#206842
回答No.1

CSSが、書かれていないのでなんともいえない! HTMLだけでは、Window幅によりDiv要素が表示されるだけでは?・・・

関連するQ&A

専門家に質問してみよう