• ベストアンサー

スタイルシートで画面を縦に2分割する方法

スタイルシートで左側にメニュー(class=menu)を、右側に本文を書くようなサイトを作っています。 body { margin: 0px; } .menu { background-image:url(./img.gif) ; background-repeat:repeat ; margin:0px ; padding:10px ; position:absolute; width:150px ; } といった感じにしていましたが、左側メニューの背景がテキストの終端部分で切れてしまいます。(メニューの行数が短いので。) 私は、下までメニュー部分の背景がくるようにしたいのです。(つまり、画面が左右に2分割されるように) そこで、いろいろ調べて、body{}と.menu{}に「height:100%;」を加えることによって、少し改善が見られました。 表示させると、画面がきちんと2分割されます。 しかし、右の本文が長い時、スクロールをすると、それに伴いメニューが上に行き、やはりメニュー部分の下部が空白になります。 スクロールしても、下まできちんと2分割できるようにするには、どうすればいいでしょうか? たぶん、分かってしまえば簡単なことなのでしょうが、よろしくお願いいたします。

  • HTML
  • 回答数7
  • ありがとう数9

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

  • ベストアンサー
  • ao_
  • ベストアンサー率33% (15/45)
回答No.5

こんにちは。 考え方は#4さんと同じなんですが、bodyにメニュー部分と本文部分の背景画像を一つにまとめ、リピートするのに最低必要な高さ(極力サイズを小さく)で作成しY方向だけにリピートさせる方法があります。この方法はA List Apartで掲載された偽カラムの作成方法です。 body { margin: 0px; background:url(背景画像.gif) repeat-y } .menu { margin:0px ; padding:10px ; width:150px ; float:left; } .本文{ float:left; width:…; } 説明が下手でごめんなさい。

参考URL:
http://www.alistapart.com/
fitzgerald18
質問者

お礼

ありがとうございました。ご紹介のサイトはよくわからなかったのですが、自己解決しました。 http://desperadoes.biz/style/p_frame.php を参考にしたら、できました。 流れとしては、 class=body内にclass=menuとclass=mainを入れるのではなく、最大領域で、class=body内にclass=menuとclass=mainを作成し、class=menu内に適当なpaddingを設定したid(classも可)を作成し、そのid内に背景画像を入れるといった方針でできました。 当然、class=main内にも、適当なpaddingを設定したidを作成しました。 ありがとうございました。

その他の回答 (6)

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

条件に合った構成を作成してみようと思いますが、もしよろしければ、既に作成されたソースを見せていただけますか…? どのように要素を包含されているかも確認したいので…。 読み取れる限りの条件にあったものを考えてみますが…。

fitzgerald18
質問者

お礼

ありがとうございました。 自己解決しました。No.5に分かりにくい説明ですが、書いておきました。 www.mamapapa.net/kosodate/ 近日中ににアップする予定ですので、検索でこちらを見られた方は、まず、 http://desperadoes.biz/style/p_frame.php を参考になさって、それがリンク切れなどの場合には、上記サイトでソースを見ていただければ参考になると思います。 最初は height など一箇所を加えたり直すだけでいいのかと思っていましたが、意外にも難問でした。

  • goldfox
  • ベストアンサー率49% (123/249)
回答No.6

#4 です。 本文が短い場合ですが、メニューがウィンドウの表示領域内におさまるのでしたら、本文のほうにheight:100%;を加えればよいかと思います。 あるいは、そのページは、本文のほうの背景をbodyに設定するとか。 height:100%;はページ全体に対する割合ではなく、表示領域に対する割合なので、スクロールするほど長さのないページならきれいにできます。 どのページにも同じスタイルで、というのであれば 他の方が提案しているように、背景を1枚に加工するか、テーブルを使うか、overflowを使ってしまう手もあるかと。

fitzgerald18
質問者

お礼

ありがとうございます。 本文の方が短くなるかどうかは、見る人の環境によるのではないかと思います。 大量の文章のため、左メニューのwidthは180pxぐらいの固定にしていますが、本文の部分は右端まで文章がくるようにしています。その場合、画面サイズ、最大化せずにブラウズする場合、左にお気に入りを表示させている場合などによって、どちらが長くなるか場合によって違うのではないかと思います。 いかがでしょうか。

  • goldfox
  • ベストアンサー率49% (123/249)
回答No.4

背景がメニューと本文の二つだけでよいのでしたら、メニューの背景をbodyに付けてはいかがでしょうか? body { margin: 0px; background-image:url(メニュー側背景) ; } .menu { margin:0px ; padding:10px ; width:150px ; float:left; border:solid 1px #ff0000; } .(本文) { background-image:url(本文側背景) ; margin-left:170px; padding:10px ; border:solid 1px #0000ff; } 分かりやすいようにborderを付けてみました。 本文のほうが短いとダメですけどね(^^;

fitzgerald18
質問者

お礼

20~30ページあるサイトなのですが、本文が短いページを見ると、やはりご指摘のように、うまくいきませんでした。 短いページですと、凹の形に背景が流れ込んでしまいました。 やろうとしていることは単純なのですが、スタイルシートでは意外と難しいんですね。 これって、スタイルシートが不十分だということなのでしょうか。 実はそのサイトは以前にフレームで分けていたのですが、リニューアルに際して、できるだけW3C準拠のサイトにしたいと思って、このような質問をさせていただきました。 でも、body全体に背景を指定して、本文(=main)部分の背景を別にというアイディアは素晴らしいと思いました。ありがとうございました。

  • Manuel
  • ベストアンサー率43% (43/98)
回答No.3

<table>を使えば出来ると思いますけど、それではダメですか?

fitzgerald18
質問者

お礼

お返事ありがとうございます。もうしばらくいろいろとやってみて、ダメだったらテーブルを使いたいと思います。サイトの性質上、できるだけレイアウト部分はスタイルシートでやりたいと思ったものですから....。

  • now77
  • ベストアンサー率38% (72/188)
回答No.2

#1です。 度々すみません。 今確認したら、 -------------------------------------------------- ◆ background-attachment: attachment (C1/e4/N6)  ウィンドウのスクロールを動かした時の背景の動作を   scroll(規定値:一緒にスクロールする)、   fixed(スクロールしない)、   inherit(継承)のいずれかで指定します。 -------------------------------------------------- とありました。fixedじゃまずかったです・・・。 BODY { background-image: url(image/back.gif); background-attachment: scroll; } でいかがでしょう。

参考URL:
http://www.tohoho-web.com/css/reference.htm#background2
fitzgerald18
質問者

お礼

早速のお返事ありがとうございました。参考のURLは私も見て、それらしいところをいろいろやってみたのですが、どうもうまくいかず、教えて!gooに頼ってしまいました。 ご教授の方法もアレンジしたりしながら、いろいろやってみたのですが、残念ながらうまくいきませんでした。

  • now77
  • ベストアンサー率38% (72/188)
回答No.1

あまり詳しくは無いのですが・・・ これではいかがでしょう body { margin: 0px; } .menu { background-image:url(./img.gif) ; background-attachment: fixed; background-position: 100% 100%; background-repeat: no-repeat; width:150px ; }

関連するQ&A

  • ホームページ作成 スタイルシートを使用して画面を3分割したい。

    ホームページ作成 スタイルシートを使用して画面を3分割したい。 下のようなソースを作成しました。 head と body と foot に画面を3分割してます。 footを高さ30pxにしてますが、これをウィンドウの一番下にくっつけて 画面解像度、ウィンドウサイズを変更してもhead部分は一番上へfoot部分は一番下に表示したいと思ってます。 どのような指定をすれば出来ますでしょうか?ご教授願いします。 -------------------------------------------------- <html> <head> <style> * { padding: 0; margin: 0; } #head { height: 100px; width: 100%; background-color: #FFFF00; } #body { width: 100%; } #foot { height: 30px; background-color: #000000; color: #FFFFFF; } </style> </head> <body> <div id="head"> タイトル </div> <div id="body"> テストページ </div> <div id="foot"> copyright(c) </div> </body> </html>

    • ベストアンサー
    • CSS
  • 外部スタイルシートは同じなのですが…

    こんばんは。 HTMLをコーディングしていて困ったことが出て来たのでご指導願います。 外部スタイルシートで共通のスタイルシートを指定し、コンテンツを組んでいるのですが、画像を挿入するとセンターで指定しているボックスが微妙に左へずれるのです。 HTMLのコードは下記/// <body> <div class="bace"> <div class="hedder"></div> <div id="menu"> <div class="menu"> <div class="menu_box"><a href="info.html">当サイトについて</a></div> <div class="menu_box"><a href="time.html">時間</a></div> <div class="menu_box_act">アクセス</div> <div class="menu_box"><a href="profile.html">紹介</a></div> <div class="menu_box"><a href="index.html">トップページ</a></div> <div class="clear"></div> </div> </div> <div class="main"> <h1>アクセス</h1> <div class="main_text"> <div align="center"><img src="map.jpg"/></div>  ←この部分で画像指示をするとレイアウトが左へずれる。 </div> <div class="main_text"> <h2>アクセス/設備</h2> ○○○徒歩3分<br /> 駐車場2台(バリアフリー)<br /> <br /> <h2>住所</h2> 〒000000000000000000000000<br /> 電話 123-456-789 </div> </div> <div class="futter">Copyright &copy; 2007 All Rights Reserved</div> </div> </body> CSSは下記/// * { margin:0; padding:0; } .bace{ width:750px; height: auto; margin-right: auto; margin-left: auto; font-size:90%; } .hedder{ width:750px; height:150px; background-image: url(hed.jpg); background-repeat: no-repeat; } .menu{ width:700px; height:30px; margin-top: 10px; padding-right: 25px; padding-left: 25px; } .menu_box{ height:30px; width:120px; float:left; margin-right: 10px; margin-left: 10px; } .menu_box_act{ height:30px; width:120px; float:left; margin-right:10px; margin-left:10px; display:block; text-align:center; line-height:30px; background-image: url(menu_back2.jpg); background-repeat: repeat-x; } .main{ width:670px; padding-right: 40px; padding-left: 40px; margin-top: 15px; height: auto; } .main_text{ margin-top: 5px; padding-right: 15px; padding-left: 15px; width: 640px; margin-bottom: 5px; height: auto; position: relative; } .futter{ height:15px; width:750px; text-align:center; background-color: #002187; color: #CCCCCC; margin-top: 15px; font-size: 90%; } .clear{ float:clear; } /* メニュー用リンクスタイル */ #menu a{ display:block; color:#333333; height:30px; line-height:30px; text-decoration:none; text-align:center; background-image: url(menu_back1.jpg); background-repeat: repeat-x; } #menu a:hover,a:focus{ color:#333333; background-image: url(menu_back3.jpg); background-repeat: repeat-x; } #menu a:active{ color:#333333; background-image:url(menu_back2.jpg); background-repeat:repeat-x; } 画像を入れないと全くぶれないのに、入れた途端レイアウトはそのまま左右へぶれるということが起こるのでしょうか? リンクをサイト内でたどるとこのページだけ左へずれて違和感があります。 ご指摘の程、どうぞよろしくお願いいたします。

    • ベストアンサー
    • HTML
  • htmlやスタイルシートに詳しい方教えてください

    初めてのHP作りがんばっています 早速行き詰まりました(´~`) 800×600くらいのサイズの1枚のオリジナルイラストの画像があるのですがそれを背景としたいです 下記のように記述いたしました <html> <head> <title>tamaringo world</title> <style type="text/css"> body { background-image: url(img/haikei.jpg); background-repeat: no-repeat } </style> </head> <body> </body> </html> 背景として画像は表示されますが左上に表示されてしまい右側と下に大幅な余白ができます 画面いっぱいに背景とするにはどうしたらいいでしょうか 横スクロールにはしたくないです できれば縦スクロールもなしで1枚の画像がポンと出るようにしたいです 初心者で質問の意図が分かりにくいかと思いますがアドバイスいただけると本当にうれしいです よろしくお願いします

    • ベストアンサー
    • HTML
  • FC2のスタイルシートで背景を変えたい!!!!

    宜しくお願い致します!!! いろいろなサイトでたくさん時間を費やして調べたのですが、 その通りにやってるつもりなのですが、自分の好きな背景に変更できません。+゜(。>д<。)゜+。 背景は body ですよね?? ↓私のCSSの最初の部分↓ /************************************/ /* body */ body{ background-color: #FFFFFF; margin: 0; padding: 0; text-align: center; } #baseBlock { width: 760px; padding: 0px; margin: 0px auto; text-align: left; } ↑ ちなみに、私が入れたい背景は、img6f29afc806ki0s.gif  デス。 今は、背景が白(非常にシンプル)です。 どうか、わかる方、宜しくお願い致します!!!!

  • スタイルシート教えて下さい

    ブログのトップページの一番上の部分を 自分の作った画像に変えました。 それはうまくいったのですが、 その部分にブログサイト名と説明文が入るのですが、 自分の画像を貼り付ける前までは一番左にあった文字が 今は真ん中に表示されてしまうんです。 ブログ名(リンクつき)とブログの説明文を左に表示させるには どうしたらいいのか教えて下さい。 その部分のスタイルシートです↓ #banner{ background-image:url(http://△△△△/○○○/□□□.jpg); background-repeat:no-repeat; background-position:left top; font-family:arial, Helvetica; padding:0px 0px 0px 197px; height:197px; text-align:left; margin-left:13px; }

  • スタイルシート

    スタイルシートを使ってホームページを作り始めたんですが、左にメニューを作りたかったので body { margin: 0px; padding: 0px; } .main { width: 580px; position: absolute; left: 210px; } .side { width: 180px; margin-left:10px; } とcssファイルを作り何個かのページに記述したらトップページを除いて他のページは配置がおかしくなったりレンタルサーバの広告がど真ん中に重なったりしてしまいます。なぜでしょうか? 配置がおかしいとはsideとmainが ■■という配置にして欲しいのですが ■  ■という風になってしまいます。 わかりにくくてすみません。

  • CSSのスタイルシートについて教えて下さい。

    現在、ASP.NETにてメイン画面に使用する4分割のアプリケーションを作りたいと考えているのですがWeb Developer 2005 ではframesetが使えないので代替案を模索していました。 そこでCSSのスタイルシートにて作成しているのですが、見ようみまねでサンプルを加工しても記述を見ても経験が浅い為全く分からなくて困っています。 勉強が足りず恐縮ですがご教示下さい。 4分割フォームの詳細は ・ヘッダー部分「Title.aspx」→ 両端に画像が入った題名のみのファイル ・左部分「left.aspx」→  検索ボックスと検索ボタンが4つあり。キーを入力して   次の検索結果フォームへ異動する。 ・右部分「right.aspx」→ left.aspxと全く同じ作りです。           (東日本と西日本が分かれているようなイメージです。) ・下部 → 署名(フォームではなく文字列) <BODY> <HEAD> <link rel="stylesheet" type="text/css" href="pseudoframe_lmr.css"> </HEAD> <DIV class="menu"> メニュー </DIV> <DIV class="bar"> タイトル </DIV> <DIV class="main"> メインコンテンツ </DIV> <DIV class="bar2"> <p align="right">Copyrigth &copy 2006-2007 Name all rights Reserved</p> </DIV> </BODY> <STYLE> /* Opera/mozilla/共通用CSS */ <!-- BODY{ background-color : #e0fef8; } .menu{ width : 50%; top : 15%; left : 50px; top : 15%; position : absolute; background-color : #e0fef8; z-index : 1; } .bar{ width : 100%; height : 15%; left : 0px; top : 0px; position : fixed; overflow: auto; z-index : 2; } .main{ width : 50%; top : 15%; left : 20%; position : absolute; background-color : #e0fef8; z-index : 1; } .bar2{ width : 100%; height : 15%; left : 0px; top : 85%; position : fixed; overflow: auto; z-index : 2; } --> </STYLE> <!--[if gte IE 5 ]> /* IE5以上に適用させるCSS */ <STYLE> BODY{ width : 100%; margin : 0px; overflow : hidden; padding : 0px; } .menu{ position : absolute ! important; } .bar{ position : absolute ! important; } .main{ height : 70%; overflow: auto; } .bar2{ position : absolute ! important; } </STYLE> <![endif]--> コードを載せましたのでどの様に記述すればよいのかご教示下さいませ。 皆様、宜しくお願い致します。

  • CSSで、height:100%の中央寄せ

    白い背景に、緑色の本文欄(id="container")を中央配置しようと思っています。 本文欄の上下に余白はなく、文章量に関係なく画面ぴったりの高さにするために、 html, body, containerのそれぞれにheight:100%、 親要素にmargin, padding 0を指定したところ、 画面をスクロールさせたところから緑色の背景色が消えています。 どのようにすれば解決できるのでしょうか? *{ margin:0; padding:0; } html, body{height:100%;} #container { height:100%; width:800px; background-color:#0A0; margin:0px auto; }

    • ベストアンサー
    • HTML
  • ホームページビルダーでスタイルシートを使ったのですが?

    今、ホームページビルダーで簡単な2カラム(右メニュー)のテンプレートを作っています。 質問ですが、メニューバー(サイドバー)に色を付けたくて、画像を使う事にしました。 <div class="main">に画像(background.gif)を入れ属性で繰り返す(垂直方向)にチェックをいれたのですが、IEやfirefoxでプレビューでは反映されていないです。 色々いじってみたのですがどうしても解りません。どこが間違っているのか教えていただけないでしょうか? よろしくお願いします。 HTML <body> <div class="box"> <div class="header"> <span class="site_name">ここにサイト名を入れる</span> <h1>ここにh1</h1> <div class="description_1">ここに簡単な説明文</div> </div> <div class="main"> <div class="contents">コンテンツ部分<br /> </div> <div class="menu"> メニュー部分 </div> </div> <div class="footer"> フッター部分 </div> </div> </body> スタイルシート * { margin:0; padding:0; } .box{ width : 750px; margin: 0 auto; border-left-width : 1px; border-left-style : solid; border-left-color : black; border-right-width : 1px; border-right-style : solid; border-right-color : black; border-bottom-width : 1px; border-bottom-style : solid; border-bottom-color : black; } .header { width : 726px; height : 96px; background-color : #b9b9ff; padding-top : 12px; padding-left : 12px; padding-right : 12px; padding-bottom : 12px; border-bottom-width : 2px; border-bottom-style : solid; border-bottom-color : black; } .main { width : 750px; background-image : url(file:///C:/Documents and Settings/※※※/img/background.gif); background-repeat : repeat-y; background-position : 0px 0px; margin-top : 0px; margin-bottom : 0px; margin-left : auto; margin-right : auto; background-color : #ffffff; } .menu { float: left; width : 180px; padding-top : 10px; padding-left : 10px; padding-right : 10px; padding-bottom : 10px; margin-left : auto; margin-right : auto; } .contents { float: left; width : 526px; padding-top : 12px; padding-left : 12px; padding-right : 12px; padding-bottom : 12px; } .footer { clear: both; width : 726px; height : 26px; background-color : #b9b9ff; padding-top : 12px; padding-left : 12px; padding-right : 12px; padding-bottom : 12px; text-align : center; } .menu ul { list-style: none; } .site_name{ font-size : 21px; font-weight : bold; margin-left : 12px; } h1{ font-size : 15px; margin-top : 12px; margin-left : 24px; } .description_1{ font-size : 12px; font-weight : normal; margin-left : 24px; }

  • IEでだけ1つのDivがずれる。

    現在スタイルシートを使ってレイアウトをしているのですが、 なぜかIEだけ一部のDIVのセンタリングがうまくいきません。 ヘッダー、メニューは共に中央揃えなのですが、その下のメインDIVのみ 10pxくらいだけ左側にずれます。Firefoxではきちんと揃って表示されています。 色々試したのですがどうしても解決方がわかりません。よろしくお願いします。 css body{ text-align: center; margin-top: 0px; margin-bottom: 0px; margin-left: auto; margin-right: auto; padding: 0px; } #header{ display: box; margin: 0px; padding: 10px 0px 15px 0px; background-image: url(header.gif); background-repeat: repeat-x; background-position: center bottom; } #header div{ width: 780px; display: box; margin-top: 0px; margin-bottom: 0px; margin-left: auto; margin-right: auto; padding:0px; } #menu { clear: both; margin: 0px; padding: 0px; background-image: url(menu-bg.gif); background-repeat: repeat-x; height: 50px; } .main{ clear: both; margin: 0px auto 0px auto; padding:0px; text-align: left; width: 780px; bottom: 0px; } #menu ul{ width: 780px; margin: 0px auto 0px auto; padding: 0px; height: 50px; overflow: hidden; } ヘッダー、メニュー共に、背景画像を画面いっぱい横並びにしたいため その内の要素のみをセンターに寄せる形にしています。 htmlでは上記のdiv(ヘッダー・メニュー・メイン)を縦に三つ並べています。

    • ベストアンサー
    • HTML

専門家に質問してみよう