• ベストアンサー

ホームページ作成に関する質問

現在ホームページを次のようなレイアウトで作っています。 ----------------------------- -----------------------------      (1)ヘッダー     ----------------------------- (2)リンク| --------- (3)リンク| (5)コンテンツ --------- (4)リンク| --------- -----------------------------      (6)フッター     ----------------------------- ----------------------------- 各ボックスをdiv要素で作っているのですが、(5)、(6)の配置がうまくいきません。 (5)をcssの position:relative; で相対位置を指定して配置すると、(6)が離れた下のほうにできてしまいます。誰かよい配置法を知っておられたらご教授願います。

  • HTML
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
  • tkmojo
  • ベストアンサー率50% (105/207)
回答No.3

そのやり方ではたぶん出来ません。 (1)~(4)までpositionの指定をせずに、(5)にいきなりposition:relative;を入れて位置を調整したのでは (6)は(4)の下から(5)が始まった場合の位置に居たまま動きません。 (6)にpositionを入れて無理やり上に上げても、今度は(6)の下に大きな隙間が空くはずです。 positionでレイアウトするなら、 (1)~(6)までをまず一つのdivで囲み、その大枠のdivにposition:relative;を入れ、 (1)~(6)にposition:absolute;を入れてそれぞれ位置指定をすればできます。 しかし、positionでレイアウトした場合はピクセルでガチガチに位置を固定していますので、 ブラウザで文字サイズを変更などした場合に、コンテンツの内容が枠からはみ出してしまったりします。 基本的にpositionでのレイアウトは、全体のレイアウトには向かず、 画像しか使用していない場所(ヘッダーなど)で局地的に用いるのが向いていると個人的には思います。 今回の場合はやはりfloatでレイアウトしましょう。 まず一番簡単な方法を書きます。 とりあえず(2)(3)(4)をひとつのdivで囲み、ヘッダー、レフトナビ、コンテンツ、フッターの4つのブロックに分けます。 【1】レフトナビにfloat:left;を入れて左寄せします。 【2】コンテンツにも同じくfloat:left;で左寄せ。 【3】フッターはclear:both;でfloatを解除。 ※レフトナビとコンテンツ(要はfloatを入れるボックス)には必ず横幅の指定を入れるようにしましょう。 これで、とりあえず目的の配置はできます。 しかしこのままでは背景色や背景画像が切れてしまったり、フッターとの位置調整がしにくかったりしますので、 それが気になる場合はレフトナビとコンテンツをひとつのdivで囲み、そのdivにclass="cleafix"を記述しましょう。 clearfixは検索するとそのままコピペで使えるサンプルがたくさん出てきますので、 躊躇なくcssファイルにコピペしましょう。 注意点として、floatを使った場合は、ie6で同じ方向のmarginが2倍になってしまうというバグがあります。 (float:left;とmargin-left:10px;を一緒のボックスに入れるとIE6だけmargin-leftが20pxになる) その場合はうまくpaddingや別のボックスのmarginを使って回避しましょう。 上には書いてませんが、一番外に全体を囲むdivを作れば、色々レイアウトしやすいと思います。(全体のセンター寄せなど) とりあえずいろいろやってみて、がんばってください。 ※上記のアドバイスはリキッドレイアウトではなく、横幅が固定されているサイトの場合です。

tama330
質問者

お礼

回答を参考にして、目的のレイアウトをつくることができました。 詳しく説明してくださり、有難うございました。

その他の回答 (2)

  • abril
  • ベストアンサー率69% (388/560)
回答No.2

No.1です。 > 初心者ゆえ、マークアップ等の言葉はわかりませんが、 そうですか。マークアップというのは所謂コーディングと解釈しておいて下さい(厳密には同じじゃないですが)。つまり、No.1での補足要求は、実際のHTMLソースも(CSSと共に)見せてください、という事でした。 > もう少し具体的な説明をさせていただきます。 …うーん、やっぱりあんまり具体的じゃないので、以下は想像で補いながら。 > 画面中央にdivコンテナを配置し、 これは、(1)~(6)のコンテナを内包する一番親のコンテナですね?<div id="wrapper">~</div>という感じの。 > その中に(1)~(6)のカラム(というのでしょうか) カラムは段組、という意味ですからこの場合のカラム組の対象は、(2)~(4)が左カラム、(5)が右カラム、ですね。 > (1)~(4)については、positionもfloatも指定していません。 (1)はヘッダーですし必要ないでしょうね。が、(2)~(4)にはpositionもfloatも使ってない、ということは(5)のtopとleftの値は実際にはどう指定されているのですか?コーディングの順番が(2)~(4)→(5)ならば、当然(5)のtopはマイナス値・leftは(2)~(4)の左カラムの幅以上の値が取られている筈ですが。 > この時点でコンテナの下側が間延びします。(6)を配置するとコンテナの最下に配置されるので、(5)と間が空いてしまいます。 コーディングの順番が(5)→(6)で、(6)に配置関係のプロパティが何も与えられていないのであれば当然そうなりますね。 > 適切なカラムレイアウトの方法 非常によくある2カラムのレイアウトですし、左カラムと右カラムの高さが成り行き(高さを固定値にできない)なのであれば、おそらくpositionを使うよりもfloatを使った方が現時点では理解しやすいかと思います。ただし、大抵の場合floatを使う際には適切な場所でfloatの状態を解除するという指定がセットで必要になってきますが、そこさえ気を付ければ楽にできます。 現在のHTMLとCSSのソースを公開して頂けるのであれば、それを元に具体的な修正箇所をアドバイスする事もできますが、もしそれができないのであれば、下記などを参考にして見て下さい。とてもわかりやすいと思います。 【参考】http://www.geocities.jp/multi_column/ 上記を最初からじっくり読めばもうお望みの2カラムレイアウトはすぐ実現できると思います。上記にも書いてありますが、(2)~(4)の左カラムと(5)の右カラムのカラムレイアウトをfloatで実現した場合、(6)のフッターにclearプロパティを指定するというのがよく使われる手法です。

tama330
質問者

お礼

回答を参考にして、目的のレイアウトをつくることができました。 詳しく説明してくださり、有難うございました。

  • abril
  • ベストアンサー率69% (388/560)
回答No.1

> (5)をcssのposition:relative;で相対位置を指定して配置すると、 ということは、(2)~(4)と(5)のカラムレイアウトはfloatではなくpositionで行っているのですか? だとしたら(5)の前後に登場する(2)~(4)と(6)のpositionと基点からの位置はそれぞれどう指定されているのでしょう? とにもかくにも、具体的な(1)~(5)のマークアップとCSSがわからないと、上記の情報だけ切り出されても原因の特定はできかねます。

tama330
質問者

お礼

ご回答有難うございます。 初心者ゆえ、マークアップ等の言葉はわかりませんが、もう少し具体的な説明をさせていただきます。  レイアウトは、画面中央にdivコンテナを配置し、その中に(1)~(6)のカラム(というのでしょうか)を配置しています。(1)~(4)については、positionもfloatも指定していません。(5)について、そのまま配置すると(4)の下にきてしまうので、辞典でposition:abusoluteプロパティを調べて使っています。画面で確認しながら、topとleftの値をいじって調整しています。これで配置はできますが、この時点でコンテナの下側が間延びします。(6)を配置するとコンテナの最下に配置されるので、(5)と間が空いてしまいます。  手元にHTML,css,javascriptの辞典しかありません。あと某大学のホームページのHTMLを参考にして、cssは自前で作ってます。できれば適切なカラムレイアウトの方法について教えていただけると有難いです。 よろしくお願いいたします。

tama330
質問者

補足

質問者補足: お礼の文中、position:absoluteというのはposition:relativeの誤りでした。失礼いたします。

関連するQ&A

  • お叱りを受けるような質問なのですが・・・

    CSSをかじって1年位なのですが、HP作ってふと疑問に思うことがあるのです。 CSSは、主に文書のレイアウトやデザインの為の言語ですよね。で、その目的で使う分については、テキストの位置、画像の位置すべてposition.relativeで思うようにできると思うのですがそれでは、だめなのですか? paddingやfloatとかdivとか使わなくても・・・と思うのですが・・・。 グループで分業してやってるわけではないから、すべてposition,relativeでレイアウトしてもいいと思うのですが、どうなんでしょう?

    • ベストアンサー
    • HTML
  • HTMLの画像の位置の指定

    HTMLで、画像の位置などを決めるときに、<div align="center"></div>などを使いますが、CSSやジャバスクリプトで使用している、 position:absolute; 絶対配置 position:relative; 相対配置 position:static; 通常配置(指定しない場合はこれ) position:fixed; 上のようなポジションタグを使う事は可能ですか? できれば、そのサンプルのようなものを書いてもらえると 助かります。

    • ベストアンサー
    • HTML
  • 【CSS】不具合の原因がわかりません。

    すいません、少しややこしいかもしれませんが・・・。 下記のように、「ヘッダ」「コンテンツ」「フッタ」の3つにレイアウトが分かれていて、「コンテンツ」「フッタ」に clear: both; float: none; をかけると不具合なく表示されます(縦に3つ並びます)。 ですが、諸事情により「フッタ」部分にcssをかけることが出来なくなりました。 (企業によるガイドラインなので詳しくは書けません。すいません・・・。) 「フッタ」から clear: both; float: none;をはずすとFirefoxではレイアウトがずれてしまいます。float: left をかけたように「コンテンツ」の右側に「フッタ」が来てしまいます。 いちから構築しなおしてはいるのですが、「コンテンツ」部分にmarginやpaddingの値を加えたり(左右ではなく上下でも)、高さを指定したりするだけでずれてしまいます。 原因は何が考えられるでしょうか? よろしくお願い致します。 ちなみに宣言文は <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> としています。 ////////html//////// <body> <div id="header"> ヘッダ </div> <div id="contents"> コンテンツ </div> <div id="footer"> フッター </div> ////////css//////// #header{ } #contents{ clear: both; float: none; } #footer{ clear: both; float: none; }

  • ブラウザいっぱいに表示されるページが作成できません。

    ブラウザいっぱいに表示されるページを作成しようとしているのですが、上手くいきません。 3カラムのサイトで、左側メニュー、真ん中コンテンツ、右側メニューという感じにしようと思っています。 ブラウザのサイズに合わせて真ん中のコンテンツだけが伸び縮みするようにし、左側メニュー、右側メニューは固定したいと思っています。 イメージとしてはGIGAZINEのような感じです。 http://gigazine.net/ ―HTMLソース <div id="contents"> contents </div> <div id="right"> right menu </div> <div id="left"> left menu </div> ―CSS #contents { float: right; } #right { float: right; } #left { float: left; } しかし、真ん中コンテンツは最小サイズは指定しても、最大サイズを指定することができないので、長い文章を書くとその分だけ広がってしまい、結果的に他のメニューが回り込みできなくなって下に移動してしまいます。 position:absolute;を使えば、好きな場所に配置することができるので、これを実現できるのですが、個人的にposition:absolute;はあまり良くないと聞いたことがあります。実際はどうなのでしょうか? また、GIGAZINEのソースを見ていると、position:absolute;ではなく、position:relative;で相対的に配置しております。 今まで横幅が固定されたサイトしか作ってこなかったので、少し難しいです。アドバイスをお願いします。

  • dreamweaver cs3 でのホームページ作成について

     お世話になります。 以前HPBで全てテーブルレイアウトで添付画像のようなHPを作成致しました。 サイトのページ数が約15枚ほどで、画像の「1,ヘッダー」 「3,左メニュー」「4,フッター」は全てIフレームにして別のHTMLを表示させるようにしています。 「1,ヘッダー」「3,左メニュー」「4,フッター」は全てのページで共通 で表示され「3,コンテンツ」のみ内容が切り替わるようにしています。  この度ページを更新しようと思ったのですが、段々と左メニューやコンテンツ、フッター等内容が多くなってきてしまい、なおかつテーブルの入れ子に次ぐ入れ子という感じでレイアウトしていたために、どれがどのテーブルかわからず、レイアウトを調整しようと色々といじっていたらレイアウトがぐちゃぐちゃになってしまいました。 そこでこの際勉強も兼ねて一からサイトを作り変えようと思っております。ソフトはdreamweaver cs3でやってみようかと思っています。 cssを使って何とか添付画像のようなレイアウトは作れたのですが、 ヘッダー内や左メニュー内にも細かな段組みレイアウトが作れません。 通常細かな段組み(ヘッダー部分のメニューや左メニューのレイアウト)についてはやはりテーブルでのレイアウトが正しいのでしょうか? まだdreamweaver cs3も使い始めて間もないもので細かなレイアウトの方法などが理解できていません。今後のサイト更新のためにも分かりやすい形で作りたいのですが・・・。 どなたかレイアウトについての参考URLや方法などご存知の方がいらっしゃいましたらご教授下さいませ。 よろしくお願い申し上げます。

  • HPの作成を教えてください。

    HP作成を見よう見まねで作成しているのですが最初からつまずきました。 作成したいのはDIVで#headerでヘッダー領域を作りその中にヘッダー#header-inを作りその中を区分けしたいので#header-logoと#header-logo2をCSSで作成したのですが#header-logoと#header-logo2の文字が表示されません。 何分初心者なので分かりやすく教えて頂ければ助かります。 body , html { height: 100%; margin: 0; padding: 0; text-align: center; /* 標準文字色 */ font-size : 100%; background-image : url(../imege/bg01.png); background-repeat : repeat-x;background-position : left top; } /* Safari用ハック 文字サイズ調整 */ /*\*/ html:\66irst-child body{ font-size: 90%; } /* end */ } img{ border-top: 0; border-right: 0; border-bottom: 0; border-left: 0; } #container { width: 100%; position: relative; height : 100%; min-height: 100%; background-image : url(../imege/fbg01.png); background-repeat : repeat-x;background-position : left bottom; } #header{ width: 100%; height : 84px; margin-top : 0px; margin-bottom : 0px; text-indent : -9999px; } #contents { padding-top : 84px; padding-bottom: 100px; margin-top : 0px; margin-bottom : 0px; margin-left : auto; margin-right : auto; } #footer { position: fixed; bottom: 0; width: 100%; height: 100px; margin-left : auto; margin-right : auto; } #header-in{ width : 900px; height : 84px; position : relative; margin-left : auto; margin-right : auto; margin-top : 0px; margin-bottom : 1px; } #contents-in{ margin-left : auto; margin-right : auto; width : 900px; position : relative; margin-top : 0px; margin-bottom : 0px; } #footer-in{ margin-left : auto; margin-right : auto; margin-bottom : 0px; width : 900px; height : 100px; position : relative; margin-top : 0px; } #header-logo{ width : 500px; height : 84px; float : left; z-index: 2; } #header-logo2{ width : 200px; height : 84px; float : left; z-index: 2; } <div id="container">  <div id="header">  <div id="header-in">ヘッダー     <div id="header-logo">トップロゴ</div>     <div id="header-logo2">お問い合わせ</div>    </div> </div>    <div id="contents">   <div id="contents-in">コンテンツ</div>  </div>  <div id="footer">    <div id="footer-in">フッター</div>  </div> </div> よろしくお願いいたします。

    • ベストアンサー
    • CSS
  • ホームページ レイアウトについて

    ホームページ作成について質問です。 複数ページのホームページの内、全ページ共通の罫線や画像(ヘッダー部、フッター部など)のレイアウト微調整を スタイルシートで設定したい、というのが目標ですが、そのレイアウト微調整を position:absolute; で行っていますが間違っているのでしょうか? 上記を設定したオブジェクトは確かに完全に任意の位置に配置できるのですが、 位置を指定していないHTMLだけに記述されたオブジェクトとレイアウトが重なったりしてしまいます。 全てのオブジェクトの位置をスタイルシートで指定すればそれも回避できると思うのですが、 そうするとひとつのHTMLファイルだけのスタイルシートになってしまうし、スタイルシートはそういう使い方するものではないんじゃないか、と思ってます。。 (そもそも共通設定ファイルにポジションの固定値を記述する事自体、 間違ってる気がしてます) スタイルシートの位置指定を使用しないで左寄せ、中央、右寄せ、以外の レイアウト調整って可能なのでしょうか? また、ホームページの完全な任意レイアウトの際のセオリー等が ありましたら教えていただきたいです。 以上、宜しくお願い致します。

  • リキッドレイアウトで親boxと子boxの位置

    CSSのpositionについて、解らないので教えていただけませんか? アメブロを使っています。 ある程度固定されたHTMLタグ内にCSSで隙間を作り、追加のボックスを入れたいのですが、リキッドレイアウトらしくて、新しく作ったボックスの位置指定が出来ません。 ブラウザに固定するとブラウザを広げた時に位置が変わってしまうし、他のボックスをposition relative にしても、その子ボックスに入れる事が出来ません(アメブロはHTMLファイルの改変は出来ないため) 要は、ブラウザを広げたり、縮めたりすると、メインのコンテンツと新しいボックスが、右に左にずれてしまいます。 これを解消するよい方法をご存知の方居られましたら是非教えて頂けませんか? よろしくお願いします。

    • 締切済み
    • CSS
  • FirefoxだとCSSで作ったフッターが崩れてしまいます

    お世話になります。現在、CSSにて2段組にて ヘッダー・メニュー・コンテンツ・フッター部分にレイアウトを 切り分けてサイトを作っておりますが IEだと私が意図した通りに表示されるのですが、FireFoxだと フッター部分のレイアウトが、コンテンツ部分にかぶってしまい レイアウトがぐちゃぐちゃになってしまいます。 #cover { width: 700px; height: 100% } #menu { width: 150px; height: 100%; float: left } #main { width: 550px; height: 100%; float: right } #footer { width: 700px; clear: both } こちらが、htmlです。 <div id="cover"> <div id="main">コンテンツ</div> <div id="menu">メニュー</div> <csobj csref="a.html" h="259" occur="27" t="Component" w="700"> <div id="footer">フッター</csobj></div> </div> ※このcsobjは、Goliveのコンポーネント機能を使って 1つの外部ファイルからリンクさせることによって、 ヘッダー部分に変更が生じたら、全ページを一括で更新できる 機能を使っています。SSI(サーバーサイドインクルード)みたい なやつでしょうか。 とても困っていますので、詳しい方ぜひご教授ください。 よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • divタグ+CSSでのレイアウトで、Firefox, Operaで不必要な余白ができてしまいます。

    divタグ+CSSでレイアウトしようとしています。 横関係では全体がセンタリングされていて、縦関係においては、各ブロック要素間の余白がなくぴったりくっついている状態にしたいのですが、Firefox 1.0やOpera 8などを使ってレイアウトを確認すると、上下や要素間に余白が出来てしまい、なかなかうまくいきません。 以下、HTMLとCSSのソースを、レイアウトに関する部分だけ載せます。 [--HTML--] <body> <div id="all"> <div id="header"> <p>header</p> </div> <div id="body"> <p>body</p> </div> <div id="sidebar"> <p>sidebar</p> </div> <div id="footer"> <p>footer</p> </div> </div> </body> [--CSS--] @charset "shift_jis" body { margin: 0 auto; padding: 0; text-align: center; } div#all { width: 760px; background-color: blue; margin: 0 auto; padding: 0 0 20px; text-align: left; overflow: hidden; } div#header { position: relative; left: 17px; width: 717px; height: 50px; background-color: yellow; margin: 0; padding: 0; text-align: left; } div#body { position: relative; left: 17px; width: 522px; height: 200px; background-color: lime; margin: 0 0 2em; padding: 0; text-align: left; float: left; } div#sidebar { position: relative; left:32px; width: 180px; height: 200px; background-color: red; margin: 0 0 3em; padding: 0; float: left; } div#footer { position: relative; left: 17px; width: 717px; height: 100px; background-color: fuchsia; margin: 0; padding: 0; clear: both; } ---------- marginやpaddingを"0"にしているにもかかわらず、余白が生まれてしまうのはなぜなのでしょう・・?

    • ベストアンサー
    • CSS

専門家に質問してみよう