• ベストアンサー

2カラムの左固定、右変動幅にするには?

CSS初心者です。 ページ幅に合わせて右カラムの幅を変えたいのですが 左カラムを固定にして右カラムだけ変動させるにはどのようにしたら良いですか? カラム全体をBOXで囲んで幅を決めてその中で 左カラムの幅を固定にして 右カラムの幅を100%としたところ 右カラムのフローティングが崩れて左カラムの下に表示されてしまいます。

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

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

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

ウェブ標準--文書構造に従ったHTMLとCSS、WAI---だと、後で好きなようにデザインを変更できます。i-padでのアクセスが多ければ、i-pad用のものを作ればよい。だからといってi-pad用にHTML用に書き直す必要もない。携帯電話用のスタイルシート(media="tty")も追加できる。 このHTMLは、点字端末、読み上げブラウザ(スクリーンリーダー)、テレビ・・いずれもOK そしてなによりもCSSも簡潔。 [CSS] 2column_navTop.css @charset "Shift_JIS"; div.header, div.section, div.footer{ _min-height:100px; _max-width:1020px; _margin-top:20px; } div.header{ _text-align:center;background-color:yellow; } div.section{ _padding-right:210px; } div.section div.annotation div.article{ _width:200px; _position:absolute; _top:140px; _right:0; _height:300px; } div.section div.annotation div.nav ol, div.section div.annotation div.nav ol li{ _display:block; _list-style:none; _line-height:20px; _height:20px; _margin:0;padding:0; } div.section div.annotation div.nav ol{ _position:absolute; _top:0;left:0; _width:100%; } div.section div.annotation div.nav ol li{ _width:18%; _float:left; _text-align:center; _margin-right:2px; } div.section div.annotation div.nav ol li a{ _display:block; _width:100%;height:100%; _text-decoration:none; _background-color:green; } div.section div.annotation div.nav ol li a:hover{ _background-color:yellow; }

akaginoyama
質問者

お礼

ORUKA1951さま度々の回答誠に恐れ入ります。 まだまだ、解らない所はたくさんあり、課題が残りますが。 見よう見まねでなんとかなりました。 教えて頂いた知識は、使いこなせるようになりたいと思います。

その他の回答 (5)

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

ちょっと時間が取れたので・・たぶんIE5以上に対応できる。ポイントは ★HTMLはデザインのためじゃない。文書構造をマークアップするもの  <div class="wraper">のような非セマンティクなマークアップはなかなかなくなりません。そのため、タグスープと揶揄されるマークアップがいまだに多い。 ★きちんとマークアップされていれば、HTMLもCSSもシンプルで、しかも好きなようにデザインできる。 ※それによって、CSSはHTMLを見なくてもメンテナンスできます。他の端末、検索エンジンにも中身が伝わる ※3種類のスタイルシートが選択できる。(表示→スタイル) ※携帯電話も印刷もOK ★Another HTML-lint gateway ( http://openlab.ring.gr.jp/k16/htmllint/htmllint.html ) ★The W3C Markup Validation Service ( http://validator.w3.org/#validate_by_input" ) ★W3C CSS 検証サービス ( <a href="http://jigsaw.w3.org/css-validator/#validate_by_input" ) で検証済み。 ★_はタブに戻す。 [HTML] <!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"> _<link rel="stylesheet" type="text/css" href="./CSS/default.css"> _<link rel="stylesheet" type="text/css" media="screen" href="./CSS/2column.css" title="2カラム"> _<link rel="Alternate StyleSheet" type="text/css" media="screen" href="./CSS/3column.css" title="3カラム"> _<link rel="Alternate StyleSheet" type="text/css" media="screen" href="./CSS/2column_navTop.css" title="メニュートップ"> _<style type="text/css" media="screen"> <!-- --> _</style> </head> <body> _<div class="header"> __<h1>サンプル</h1> __<p> ___文書構造に従ったマークアップとスタイルシートのサンプルです。 __</p> _</div> _<div class="section"> __<h2>本文見出し</h2> __<p>これはテストだよ。これはテストだよ。内容はテキストだよ。これはテストだよ。内容はテキストだよ。これはテストだよ。内容はテキストだよ。</p> __<p>これはテストだよ。内容はテキストだよ。これはテストだよ。内容はテキストだよ。これはテストだよ。内容はテキストだよ。</p> __<p>これはテストだよ。内容はテキストだよ。これはテストだよ。内容はテキストだよ。これはテストだよ。内容はテキストだよ。これはテストだよ。内容はテキストだよ。これはテストだよ。内容はテキストだよ。</p> __<p>これはテストだよ。内容はテキストだよ。</p> __<p>これはテストだよ。内容はテキストだよ。</p> __<p>これはテストだよ。内容はテキストだよ。</p> __<div class="annotation"> ___<div class="nav"> ____<ol> _____<li><a href="./">トップ</a></li> _____<li><a href="./new/">新製品</a></li> _____<li><a href="./product">製品</a></li> _____<li><a href="./profile/">会社案内</a></li> _____<li><a href="./contactUs/">コンタクト</a></li> ____</ol> ___</div> ___<div class="article"> ____<h3>脚注</h3> ____<p>記事</p> ___</div> __</div> _</div> _<div class="footer"> __<h2>文書情報</h2> __<dl class="document-version"> ___<dt id="FIRST-PUBLISHED">First Published</dt> ___<dd>2005-06-10</dd> ___<dt id="LAST-MODIFIED">Last Modified</dt> ___<dd>2011-07-10 12:00:00 (JST)</dd> __</dl> _</div> </body> </html> [CSS]default.css @charset "Shift_JIS"; html,body{margin:0;padding:0;} p{text-indent:1em;line-height:1.5em;margin:0} div{border:gray 1px solid;} [CSS]2column.css @charset "Shift_JIS"; div.header, div.section, div.footer{ _min-height:100px; _max-width:1000px; } div.header{ _text-align:center;background-color:yellow; } div.section{ _position:relative; _padding-left:210px; } div.section div.annotation{ _width:200px; _position:absolute; _top:0;left:0%; _height:100%; } [CSS]3column.css @charset "Shift_JIS"; div.header,div.section,div.footer{ _min-height:100px; } div.header{ _text-align:center;background-color:yellow; } div.section{ _position:relative; _padding:0 210px; } div.section div.annotation{ _border-color:red; _width:100%; _position:absolute; _top:0;left:0; _height:100%; } div.section div.annotation div.nav, div.section div.annotation div.article{ _width:200px; _position:absolute; _height:100%; } div.section div.annotation div.article{ _right:0; _color:green; } 続きは次回・・・

  • DrFell
  • ベストアンサー率55% (305/551)
回答No.4

質問文が矛盾してます。 ★希望 1.ページ幅にあわせる。 2.左固定、右変動 ★実際 1.全体をboxで囲んで幅を決め 2.左固定、右100%(え、100%?何に対して100%か分かってる?親要素に対してだから、そりゃー左と右が100%の中に両立できなくって落っこちるでしょう。) ★提案 1.変動ということなので、%で全体の幅を決め 2.右100%を外す。 ものすごくシンプルな形(手抜きとも)だとこんな形 html <div class="wrap"> <div class="sub">左コラムがいろいろ</div> <div class="main">右コラムがいろいろ</div> </div> css .wrap{margin:0 10%;} .sub{width:10em;float:left;} .main{margin-left:11em;} 検索エンジンで「css 段組」などを検索すると、解説やテンプレートなど沢山ヒットすると思います。いろいろな方法があります。対応させるブラウザによっても変わってきます。背景の有無、対応範囲や崩れ方、問題点などそれぞれのやり方に長所も短所もありますので、いろいろ調べてから、どれを選ぶか決められるといいと思います。

akaginoyama
質問者

お礼

回答ありがとうございます。 >100%か分かってる。 ここを間違って解釈してました。 親要素の最大幅さえキチンと指定していれば、内包要素はなんとかなるだろうと言うことがそもそも間違っていたようです。

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

同じ見た目にするにも、色々な方法があるので一概に何が正しいということはないですが。。 > 外側のブロックの配置にはfloatは使うべきではありません。本文中でfloatが使えなくなる。 まあこれはそのとおりで、float を使わないで実現できるなら float は使わないほうがいいと思います。 > 本文中の挿絵とか、リストを並べるときとか限定して使うべき。基本はabsoluteです。 ただ、position: absolute が万能かというとそんなことは全然なくて、position: absolute で配置された要素はないものとして後続要素が配置されるので、position: absolute を指定した要素のサイズが縦に長い場合などに別の要素と重なったり、はみ出してしまう、というような問題も起きます。 CSS3 が使えるなら display: box という選択肢もありますが、当面は float を使うのが便利なのではないかと私は思っています。 そんなわけで float を使った場合の 2 カラムの方法ですが、親ボックスに固定幅にしたいカラムの幅分の padding をブロックの左側に設定して、その padding の部分に固定幅のカラムを置く、という手法がわりと汎用性が高くて便利だと思います。 具体的なコードは参考 URL のような感じになります。 もちろん状況によって最適な手法は異なるので、この方法が必ずしも良いとは限りません。

参考URL:
http://www.vividcode.info/sample/2011/0714_col2_left_fixed.html
akaginoyama
質問者

お礼

サンプルページまで作成して頂き感激です。 的確な回答で解りやすくベストアンサーに選ばせて頂きたいくらいです。 回答ありがとうございました。

  • k0021
  • ベストアンサー率26% (32/120)
回答No.2

<div style="position:relative;height:70px;"> <div style="position:absolute;left:90px;width:243px;background-color:red; font:22px/69px 'MS 明朝',serif;">上 奉造営</div> <div style="position:absolute;top:11px;left:333px;width:95px;background-color:blue; font:18px/24px 'MS 明朝',serif;">穂積権現<br>少彦名大神</div> <div style="position:absolute;left:428px;width:auto;background-color:yellow; font:22px/69px 'MS 明朝',serif;">二柱神社</div></div> 3段の段組ですが 最後の幅は、auto 指定して下さい。 ポジショニング(位置を指定)で無いと質問内容は、出来ないと思います。

akaginoyama
質問者

お礼

ポジショニング理解できました。 回答ありがとうございます。

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

「この様にしようとしてこの様にマークアップした」 考え方が根本的に違います。  HTMLは文書構造(見出し、記事、引用)をマークアップするもので、プレゼンテーションとは無関係です。というより、きちんとマークアップされていたら如何様にもデザインできます。 ★Another HTML-lint gateway ( http://openlab.ring.gr.jp/k16/htmllint/htmllint.html ) ★The W3C Markup Validation Service ( http://validator.w3.org/#validate_by_input ) ★W3C CSS 検証サービス ( http://jigsaw.w3.org/css-validator/#validate_by_input ) で検証済み。 外側のブロックの配置にはfloatは使うべきではありません。本文中でfloatが使えなくなる。 本文中の挿絵とか、リストを並べるときとか限定して使うべき。基本はabsoluteです。 ★以下のソースは、タブインデントを_に置換してあるので戻すこと ★作成中の文書の構造をしっかりマークアップすること。デザインは考えない。 ★それさえ出来てりゃ好きにデザインできます。けっしてデザインのためにHTMLを書かないこと。 ★携帯電話だとスタイルなしで表示される。 <!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{padding:0;margin:0;} p{text-indent:1em;line-height:1.5em;margin:0} div{border:gray 1px solid;} div.header{ _text-align:center;height:100px; _background-color:yellow;max-width:1000px; } /* 2カラムここから */ div.header div.nav{ _width:200px; _position:absolute; _top:100px;left:0; } div.section,div.footer{ _margin:0 auto 0 210px; _position:relative; _max-width:770px; _padding:1ex 1em; } /* ここまで */ /* おまけ */ div.header div.nav ol{ _display:block;list-style:none; _margin:0; _padding:0; } div.header div.nav ol li{ _margin:5px; _padding:0; _border:solid green 2px; _height:60px; _line-height:60px; _text-align:center; } div.header div.nav ol li a{ _display:block; _width:100%; _height:100%; _text-decoration: none; } div.header div.nav ol li a:hover{background-color:yellow;} --> _</style> </head> <body> _<div class="header"> __<h1>サンプル</h1> __<p> ___最小450px、最大1020px,通常90%幅の左寄せサンプルです。 __</p> __<div class="nav"> ___<ol> ____<li><a href="./">トップ</a></li> ____<li><a href="./new/">新製品</a></li> ____<li><a href="./product">製品</a></li> ____<li><a href="./profile/">会社案内</a></li> ____<li><a href="./contactUs/">コンタクト</a></li> ___</ol> __</div> _</div> _<div class="section"> __<h2>本文見出し</h2> __<p>これはテストだよ。内容はテキストだよ。これはテストだよ。内容はテキストだよ。これはテストだよ。内容はテキストだよ。</p> __<p>これはテストだよ。内容はテキストだよ。これはテストだよ。内容はテキストだよ。これはテストだよ。内容はテキストだよ。</p> __<p>これはテストだよ。内容はテキストだよ。</p> __<p>これはテストだよ。内容はテキストだよ。</p> __<p>これはテストだよ。内容はテキストだよ。</p> __<p>これはテストだよ。内容はテキストだよ。</p> __<p>これはテストだよ。内容はテキストだよ。</p> __<p>これはテストだよ。内容はテキストだよ。</p> __<p>これはテストだよ。内容はテキストだよ。</p> __<p>これはテストだよ。内容はテキストだよ。</p> _</div> _<div class="footer"> __<h2>文書情報</h2> __<dl class="document-version"> ___<dt id="FIRST-PUBLISHED">First Published</dt> ___<dd>2005-06-10</dd> ___<dt id="LAST-MODIFIED">Last Modified</dt> ___<dd>2011-07-10 12:00:00 (JST)</dd> __</dl> _</div> </body> </html>

関連するQ&A

  • 【CSS】横3カラム:左右は固定pxで中央カラムはが残り幅となるにはどうすれば?

    http://www.amazon.co.jp/ のように、 横3カラムで、全体は100%、一番左カラムと一番右カラムは固定px、真ん中のカラムは100%-左カラム固定pxー右カラム固定pxで、 ウィンドウをリサイズしても、この状況が変わらない・・・ というようなCSS(JSもからむのでしょうか?)は、どのようにすればつくれるのでしょうか? <div style="float:left;"> 左カラム </div> <div style="float:right;"> 右カラム </div> <div> 中央カラム </div> 。。。だと、中央カラムが縦長になるとはみ出してしまいますよね・・・。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • HTML
  • 2段組レイアウトのCSSについて。左幅:可変/右幅:固定

    http://desperadoes.biz/style/dan/1-g.html こちらのような2段組を想定しています。 (ブラウザウィンドウのサイズを変えたりして、スタイルの効き方を確認してみて下さい。) 上記ページの例ですと、左幅:固定、右幅:可変となっていますが、 私が希望するのは、その逆です。 つまり、左幅:可変、右幅:固定です。 どのようなスタイルを指定すれば良いか、どなたか教えて下さい。 --------------------------------------------- ちなみに、上記ページのスタイルは、 http://desperadoes.biz/style/dan/ で確認できます。 「TYPE C-4 左ボックスのみ幅固定。幅 : 100%」のタイプになります。 --------------------------------------------- 私の考えでは、右と左を逆にすれば、目的を達成できるのかな? なんて思い、下のように記述してみましたが、ダメでした。 #my_navigation {margin-right: 150px;} #my_contents {float : right ; width : 150px ;}

    • ベストアンサー
    • HTML
  • 2カラムで固定幅+可変幅のCSSは?

    2カラムのデザインで、左のカラムは幅が200px、右のカラムは幅が可変(100%から200pxを引いた値)にするにはどうすればいいのでしょうか? なお、右カラムの中身の文章はごくごく少量のときもありえます。 以上、よろしくお願いします。

    • ベストアンサー
    • CSS
  • CSSを使って3カラムにしたいのですが・・・。

    現在CSSを使って、2カラムのページを作っています。 これを今回3カラムにしようとしているのですが、うまく並んでくれません。 現在はA.Bというボックスを作って並べています。左からA.Bとします。最初にBのボックスを読み込ませたいので最初にBを書いて、次にAを持ってきて左に来るようにさせています。ですので見た目はABと並んでいますがソースはBAとなっています。 そこで今回Cというボックスを一番右に持ってこようと奮闘しているのですが、AとBの間にきたり、変な一番上のほうに表示されたりして、一番右に来てくれません。 どこにどのような記述をすれば、一番右にもう1個表示できるようになるでしょうか??

    • ベストアンサー
    • HTML
  • 【CSS】左右可変、中央固定の3カラムレイアウト

    ボックス3つを横一列に、 center:画面中央配置、幅は900px固定 left:残りの左領域全て(幅可変) right:残りの右領域全て(幅可変) というレイアウトをしたいのですが、CSSでの指定方法が解らず困っています。 2カラムや左右固定・中央可変の3カラムレイアウトは様々なサイトで解説されているのですが、 このパターンは中々無いようで見つかりませんでした。 良い方法をご教示いただければと思います。 宜しくお願いします。

    • ベストアンサー
    • CSS
  • ヘッダー・左カラムは固定、右カラム可変のレイアウト

    CSSでレイアウトを制作中なのですが、途中から分からず止まっております。 今の状況は縦に可変した時、左カラムのスクロールバーが最大まで表示されない状態です。また、右カラムは途切れてしまいます。 height100%に対し、ヘッダでピクセル指定しているからだと思うのですが。 ■CSS *{ margin:0px; padding:0px; } /** html */ html,body { height:100%; min-height:500px; overflow-y:hidden; } /** ヘッダ */ #header { height:125px; width:100%; } /** 左・右カラムの囲い */ #container { height:85%; margin-left:400px; } /** 左カラム */ #menu { float:left; height:85%; margin-left:-400px; overflow:auto; width:400px; } /** 右カラム */ #main{ float:right; height:100%; margin-left:430px; overflow:auto; width:100%; } /** フッタはありません */ ■HTML側 <div id="header"> ヘッダ </div> <div id="container"> <div id="menu"> 左カラム </div> </div> <div id="menu"> 右カラム </div> 以上です。 理想のレイアウトが、GoogleマップもしくはYahoo!マップの様に組みたいのですが・・・ http://maps.google.co.jp/ Googleマップ http://map.yahoo.co.jp/  Yahooマップ どなたかお力添えをお貸しください。 宜しくお願いします。

    • ベストアンサー
    • CSS
  • %(パーセント)での3カラム構成・・・飛び出ます。

    現在、画面いっぱいに表示させる為のページを%で指定してcssにて作っております。 とても単純な様に安易に考えていたのですが旨く表示できません。 まず、左、中央、右のボックスを作りました。指定した幅は、25%、50%、25%となっていますが、一番右のボックスだけが飛び出してしまいます!! 初めて%で作ったのですが、100%になっては駄目なのでしょうか?? 出来れば中央のボックス左右に少しだけマージンが欲しいですが、全てフロートがかかっているため、均等に余白も作れません。(真ん中がどちらかに寄ります。) %で作るときの基本などがあればアドバイスいただけたらと思います。 どうぞ、宜しくお願いいたします。

    • ベストアンサー
    • HTML
  • カラムの高さを揃える

    添付した画像のようにスタイルを書いてます。 左カラムには<div class="boxLEFT">を2つ使っており、 下の<div class="boxLEFT">と右カラム<div class="boxRIGHT">の 天地を合わせたいのですが、どのように行えばよろしいでしょうか? javasprictでもcssでも構いません。 初心者なので、難しいと分からりませんので、 お手柔らかに教えてください。 よろしくお願いします。

  • ウインドウ幅を狭めるとボックスが下に飛んでいきます

    cssを使ってdivでテーブルのようなレイアウトにしています。 サイト全体の設定は、左から「メニュー」「メイン」「右サイドバー」といった感じで、メインの部分にdivでボックスを作ってます。 メニューは固定でメインとサイドバーは可変にしているのですが、ブラウザのウインドウ幅を左右に狭めると、floatで左右にくっつけたボックスがバラバラになったり、下へ飛んでいったりしてしまいます。 テキストの場合は可変してもいいのですが、ボックスやテーブルは動いてほしくありません。 常に前面に固定されて表示されるような方法はあるのでしょうか?

    • ベストアンサー
    • HTML
  • ホームページの左カラム

    なつひかりみっくす様、読解アヘン様のように、左メニューで項目を選び右ページに表示される、といった仕組みのホームページにするには、どのようにすれば良いのでしょうか? 上の二サイト以外にも、初心者の方も簡単に左カラムが作れていて少し焦り気味です。 質問者の知識の低さゆえ、回答お願いします。

    • ベストアンサー
    • CSS