ウインドウサイズに合わせたdiv領域の横並びと高さの指定方法

このQ&Aのポイント
  • div領域をウインドウサイズに合わせる方法について説明します。
  • 左2つのdiv領域を幅をピクセル指定で固定し、3つめのdiv領域をウインドウサイズに合わせて幅を調整する方法について説明します。
  • さらに、右側の3つめのdiv領域にスクロールを実装する方法についても説明します。
回答を見る
  • ベストアンサー

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
  • 回答数2
  • ありがとう数3

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

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

できません。  そうなるとHTMLではなくてPDFなどの他の仕様の範疇です。  HTMLは、元来さまざまなプラットホームで利用できるように考案されたものです。すなわちさまざまな解像度、ウィンドウ幅、点字端末、読み上げブラウザ・・検索エンジンも・・  HTMLの基本中の基本です 【引用】____________ここから HTMLは、どんな環境からもWebの情報を利用できるようにすべきだという方針の下に開発されている。例えば、様々な解像度や色深度のグラフィックディスプレイを持つPCや、携帯電話、モバイル機器、音声入出力機器、帯域が広いコンピュータや狭いコンピュータ、等の環境である。  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ここまで[Introduction to HTML 4 (ja)( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html401j/intro/intro.html#h-2.2.1 )]より  それはともかく、HTMLはワープロやDTP ( http://ja.wikipedia.org/wiki/DTP )のようなデザインのためではありません。これを最も間違える部分です。  ですのでマークアップは(インデントがわかりやすいようにタブを全角スペースで置き換えてあります) <div class="section">  <h1>サンプル</h1>  <div class="body">   <h2>見出し</h2>   <p>段落</p>   <p>段落</p>  </div>  <div class="nav">   <ul>    <li>あいう</li>    <li>えおか</li>   </ul>  </div>  <div class="contentTable">   <h2>目次</h2>   <ol>    <li>きくけ</li>    <li>こさし</li>   </ol>  <div> </div> </body> とかになるはずですね。HTMLは文書構造を示すもの。CSSはプレゼンテーションを示すものという明確な区別があります。id=leftなんて、しないこと。先で右に配置したくなったらどうするの・・  さて、div要素の幅はウィンドウ幅を認識できますが、高さはウィンドウの高さを認識しません。IEの互換モードにすれば、IEのバグ(仕様?)でウィンドウ高さを使えます。そのときdivの親要素がbodyなので、body{height:100%;}が必要。  ★ただしこの方法は非推奨です。他のブラウザではうまくいきません。  ディスプレイ幅が小さなブラウザ、あるいは目が悪くてフォントを拡大して見られる訪問者のことも考えれば高さは指定すべきではありません。  よって幅だけを指定する方法を上記HTMLでしたら html,body{margin:0;padding:0;} div.section{width:100%;position:relative;background-color:gray;padding-left:320px;} div.section div.nav, div.section div.contentTable{position:absolute;top:0px;height:1000px;} div.section div.nav{left:0px;width:150px;background-color:green;} div.section div.contentTable{left:150px;width:160px;background-color:blue;} でよい。  floatは、ここで使うべきじゃありません。あくまで文章中の画像の周囲に本文を回りこませるためや(小さなブロックをウィンドウ幅に合わせて並べるとか)に使うものです。もし本文でfkoatの必要がでてきたとき、clearできなくなっちゃう。  

kami222
質問者

お礼

回答ありがとうございます。 独学で初心者なので基礎がわかっていなかったようです、すみませんo(_ _*o) ORUKA1951さんの回答を読んで、おおすごい!なるほど!と納得しました。 少々難があるようなので、無理矢理作るよりも、もっと見る人に優しいデザインに変えてみたいと思います。 ありがとうございました!

その他の回答 (1)

  • abacabu
  • ベストアンサー率37% (250/663)
回答No.2

独学でWEBサイトを作成している者です。 多少勘違いをしている様ですのでちょっと訂正をしておきます。 px値も%同様れっきとした相対単位です。 pxという単位の基準が画面サイズです。従って画面の大きさによって広さが変わります。 なので全て%値で良いのではないでしょうか? どうしても絶対値指定したいならptとかで指定して下さい。絶対お勧めはしません。 で、rightのみスクロールバーを付けたいというのはその位置以外は動かない様にしたいというのと同義語ですよね? 余り推奨されてはいませんが、画面にスクロールしても常に同じ位置に表示させる事は可能です。 CSSでposition:fixed;(positionのabsoluteを指定したと同じで、さらにスクロールしても同じ位置に表示される)を指定してスクロール対象から外します。同時にtop,left,right,bottomなどで位置調整して、z-index:10;(HTMLで書かれた上部項目からどんどん数値が上がるようですのでページが長くスクロールで隠れる様なら数値を上げて下さい。初期値:body=0)と指定して、id=leftとid=centerを位置決めして下さい。 私がやるなら div#left{ display:block; background:#eeeeee; position: fixed; width:150px; height:500px; z-index:1; /*今回これないと表示されないので最低限の1ですが 画面全体の階層数に応じて増やして下さい*/ } div#center{ display:block; background:#ffff66; position: fixed; padding-left: 160px; width:160px; height:500px; /*この項目にもz-indexを追加して下さい。文字記入して 行ったらスクロールすると非表示(下に隠れる)になります*/ } div#right{ display:block; background:#ffccff width:77%; padding-left:330px; height:500px; background:#ffccff; /*ここは特にz-indexは必要ないです一番高い階層ですから*/ } こうなります 中身が無いのでdisplay:block;で表示させてます。 全てのボックスの起点はleft:0;です。 で、padding-leftを使って文字の出力位置を調整しています。 さらに画面幅いっぱいでの注意!!CSS全体に言えるが… ボックスの幅(あえてこう書いています)というのは width+margin+padding=画面全体となりますので、調整する際はこの3つの要素を足し引きして 調整します。物の幅=widthではありませんのでこの点にご注意を!! あとそのCSSは本来のではなくここで書いた物ですよね? それコピペして検証しようとしたら全角スペース入ってたんで…(入ってると機能しません) 使うならTABキーを!!

kami222
質問者

お礼

回答ありがとうございますo(_ _*o) pxが相対単位だというのは知りませんでした・・・勉強になります。 やはり熟練の方からしたら無理な注文、といった感じなのですね; デザインをかえて作り直してみます。ありがとうございました!

関連するQ&A

  • IEだとdivが横に並びません

    CSSでレイアウトをしているのですが、横にふたつdivを並べたいのに、右側のdivが下にまわってしまいます。 http://oshiete1.goo.ne.jp/qa3576983.html こちらでIEでは左の余白が倍になってしまうと知り、display:inlineを指定しましたが、解決しません。 何が原因でしょうか。 HTML: <div id="main"> <div id="mainl"> </div> <div id="mainr"> </div> </div> CSS: #main { width: 900px; } #mainl { float: left; height: 317px; width: 324px; display: inline; padding-top: 26px; padding-right: 16px; padding-bottom: 0px; padding-left: 40px; } #mainr { float: right; height: 317px; width: 480px; padding-top: 26px; padding-right: 40px; }

    • 締切済み
    • CSS
  • divの入れ子が上手くいきません。

    .line { background-image: url(../img/line.gif); background-repeat: no-repeat; background-position: left bottom; display: block; padding: 0px; clear: both; width: 600px; height:auto; margin: 0px; } .left{ width:210px; height:90px; float:left; text-align:center; padding:10px 5px 10px 0px;} .right{ width:360px; height:90px; float:left; padding:10px;} <div class="line"> <div class="left">あああ</div> <div class="right">いいい</div> </div> 上記のようにlineでleftとrightを内包したいのですが、IEでは表示されるのですが、fox・safariで確認すると画像が消えてしまいます。 どうもdivで括っているせいかline内に文字が入っていないと認識されているようで、ためしに適当な数字を入れてやると認識されました。 また、lineのheightをpx指定してやると表示されるのですが、lineは使いまわしたいクラスなので、縦を固定することができません。 どうしたら解決しますか?

    • ベストアンサー
    • HTML
  • htmlを組んでいるのですが、DIVを使用した階層の作り方がわからず困

    htmlを組んでいるのですが、DIVを使用した階層の作り方がわからず困っています。 2レベルまでの階層ならば、まだわかるのですが、3レベル以上になった場合に思い通りに動作させることができなくなってしまいます。 具体的には、下で記述した場合、 <div id="test"> テスト </div> が、右寄せにならないのですが、何がいけないのでしょうか? 【-------------html-------------】 <DIV id="wrap"> <div id="head"> <div id="logo"> ロゴ配置予定 </div> <div id="test"> テスト </div> </div> <div id="menu"> メニュー </div> <div id="left"> レフト </div> <div id="right"> メインコンテンツ </div> <div id="foot"> フッタ </div> </dib 【-------------css-------------】 /* レイアウトの設定*/ body{ margin:0px; padding:0px; text-align:center; } /* ラッパーの設定*/ #wrap{ position:relative; width:600px; background-color:#FFFFCC; margin:0px auto; text-align:left; } /* ヘッダーの設定*/ #head{ width:600px; height:350px; background-color:#CC9999; div#logo{ position: absolute; float: left; width:200px; height: 30px; } div#test{ width:100px; height: 30px; float: right; } } /* ヘッダーの設定*/ #menu{ width:600px; height130px; background-color:#CC9900; } /* 左側の設定*/ #left{ width:150px; height:300px; float:left; background-color:#FFAC99; } /* 右側の設定*/ #right{ width:450px; height:300px; float:right; background-color:#CCCCFF; } /* フッターの設定*/ #foot{ position:relative; width:100%; height:30px; background-color:#CCFFCC; clear:both; }

  • 3カラムのレイアウト、及びdivの入れ子等

    初めまして。 とても基本的なことでお恥ずかしいのですが、 3カラムのレイアウト、及びdivの入れ子等について、行き詰ってしまいました。 どうぞ宜しくお願い致します。 下記のように、3カラムの段組みレイアウトを行いました。 左・右のナビゲーションに、width:150pxで幅指定し、それぞれleft・rightにfloat、 中心部分(#contents)は、左右ナビゲーション分のマージンを設定して、真ん中に配置させる方法です。 HTMLでは、可変?させたい真ん中部分は、ナビゲーションの後に記述すること、とのことでしたので、そのように致しました。 <CSS> #contents { margin-left:155px; margin-right:155px; } #left { float:left; width:150px; } #right { float:right; width:150px; } <HTML> <div id="left>あああああああ</div> <div id="right">いいいいいいい</div> <div id="contents">ううううううう</div> ここまでは、問題なく配置させられたのですが、 【#contents】の中に、<div>や<ul>などを使用すると、画像(http://blog.goo.ne.jp/ray-chimin)のような現象が起きます。 ちなみに、【#left】のheightを長く伸ばすと、IEではキレイに並びましたが、firefox等では、やはり崩れます。 と言いましても、それは実験的に行った結果で、【#left】のheightを無駄に長く伸ばすことは避けたいです…(;ω;) そもそも、【#contents】の中の、「中身の並べ方」の考え方に問題があるのでしょうか…? 可能な限りシンプルに、 正しいCSSの使い方でレイアウトしたいと考えております…!(>_<) divの不必要な多用? (ひとつひとつの画像をdivの中に入れたり、 横並びのミニバナーを、divの中にdivを入れて…のような入れ子構造) は避けたいと思っておりましたが、 もしかして、それがいちばん正しいのでしょうか…? ご存じの方、どうぞご指南の程宜しくお願い致します! 散文、失礼いたしました!

    • ベストアンサー
    • HTML
  • div枠のレイアウトが崩れてしまいます

    2×2段の枠を作るために、下のような段組にしました。 100%表示ではうまく表示するのですが、ウィンドウを縮小すると、 div要素が勝手に改行してしまい、レイアウトが崩れてしまいます。 同じような質問を参考にして、"wrap"の幅設定をしてみたり、 div要素に{position:relative;}を追加してみたりしましたが、 どれもうまくいかず、縮小でレイアウトが崩れます。 ウィンドウを縮小してもレイアウトが崩れないようにする方法はあるでしょうか? それと、もう1つ質問があります。 右上の枠内の画像を「枠内の右下」に表示したいのですが、よい方法はありますか? {text-align:right;}で横位置は移動できたのですが、縦位置がうまく設定できません。 画像自体に{potision:absolute;}{top:**}{left:**}で指定すると、 またウィンドウの倍率変更でとんでもないところに表示されてしまいます。 【html】 <body> <div id="wrap"> <img src="image/title.gif"> <div id="left-up">あああ</div> <div id="right-up"><img src="logo.jpg"></div> <br class="clear"> <div id="left-down">いいい</div> <div id="right-down">ううう</div> </div> <!-- /wrap--> </body> 【css】 #wrap{ width: 945px; height: 700px; padding: 0px; border: 1px #202020 solid; margin: 0 auto; text-align: left; } #left-up{ width: 160px; height: 80px; border-top: 1px solid #606060; border-right: 1px solid #606060; float: left; } #right-up{ width: 780px; height: 80px; border-top: 1px solid #606060; float: left; } .clear{ clear: left; } #left-down{ width: 160px; height: 500px; border-top: 1px solid #606060; border-right: 1px solid #606060; border-bottom: 1px solid #606060; float: left; } #right-down{ width: 780px; height: 500px; border-top: 1px solid #606060; border-bottom: 1px solid #606060; float: left; } よろしくお願いいたします。 そもそも、この枠組みの仕方が無謀であれば、何かよい方法を教えていただけないでしょうか。 重ね重ね申し訳ありません。

    • ベストアンサー
    • 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> これでなぜならないのでしょうか?

  • divの背景を高さ100%表示

    以下のように、divをつかって背景色を設定した際、 右のピクセル指定の背景は、スクロールバーが出た場合でも 指定された高さまで背景色が表示されるのですが、 左の100%表示指定の方はウィンドウで隠れた部分で切れてしまいます。 色々調べたのですが、 過去にも同じような内容で質問があり、min-heightを追加する事で解決するとありました。 同じように試してみたのですが、思ったように表示がされません。 指定している場所が間違っているのでしょうか? <style type="text/css"> html{ height:100%; } body { height:100%; } #test1 { height:auto !important; height:100%; min-height:100%; float:left; width:400px; background-color:black; } #test2{ float:right; height:800px; width:400px; background-color:black; } body > #test1 { height: auto; } </style> </head> <body> <div id="test1"></div> <div id="test2"></div> </body> </html>

    • ベストアンサー
    • HTML
  • <div>タグでサイドバーを作るときの幅の指定方法

    全体を囲むdivの中にサイドバーとメインコンテンツ用のdivを入れたいと思っています。 <div id="allContents" style="width:100%;">  <div id="sideBar" style="float:left; width:200px;"></div>  <div id="main" style="float:right;"></div> </div> で、このときに、右側に表示される#main部分の幅を「残り全部」にしたいのですが、 widthに何を指定したら良いのでしょうか? サイドバー部分が200px固定で、残りのメイン部分の幅はブラウザの右端までにしたいのです・・。 (Javascriptで#main部分の長さを取ろうと思っているので、中に何も入っていなくても  divの大きさが一杯までなるようにしたいのです・・) ご教授よろしくお願いします。

    • ベストアンサー
    • HTML
  • 回り込み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カラムレイアウトを作っています [css] #wraper { float:left; } #left { float:left; width:180px; margin:0px;} #center { width:450px; margin:0px;} #right { width:120px; margin:0px; } [html] <div id="wrapper">   <div id="left">左メニュー</div>   <div id="center">中央メイン</div> </div> <div id="right">右メニュー</div> が、それぞれの段組の間(↓の部分)に3pxほどの隙間があいてしまいます   ↓   ↓ [左] [中央] [右] 隙間なくぴったりつけるにはどうすればいいでしょうか。 どうぞよろしくおねがいいたします。

    • ベストアンサー
    • HTML

専門家に質問してみよう