Firefoxで背景画像がスクロールで消える問題

このQ&Aのポイント
  • firefoxで見るとdiv背景画像がスクロールで消えてしまいます。
  • FirefoxやNetscapeで確認すると、表示されているページより下部のスクロール以下の背景画像が表示されません。
  • 解決に至る方法をご教示いただきたいです。
回答を見る
  • ベストアンサー

firefoxで見るとdiv背景画像がスクロールで消えてしまいます

http://www.geocities.jp/testac2007/ bodyに「top_bg.gif」という背景画像指定をした上で更にdivを重ね、そのdiv内に「side_860.gif」という背景画像を指定しています。 ieだと意図した通りに表示されるのですが、 FirefoxやNetscapeで確認すると、表示されているページより下部のスクロール以下の背景画像が表示されません。 何とか同症状についてネットで検索し試行錯誤してみたのですが、解決に至りませんでしたのでこちらでヘルプさせていただきました。皆さんのお知恵を拝借いただきたいです。 ■■■HTMLの概要■■■ <body> <div id="side_bg"> <div id="outline"> <div id="A01">○○○</div> <div id="A02"> <div class="A02_left">○○○</div> <div class="A02_right">○○○</div> <br class="c-both"> </div> <div id="B01">○○○</div> </div> </div> </body> ■■■CSSの概要■■■ body { margin:0px auto; background-image:url(images/top_bg.gif); } #side_bg { width:860px; height:100%; margin:0 auto; background:#ffffff url(images/side_860.gif); overflow:visible; } #outline { width:830px; margin:0 auto; background-color:#FFFFFF; } .c-both { clear:both;} #A01{ width:830px; margin:15px 0px 4px 0px; overflow: auto; } #A02{ width:830px; margin:0px 0px 4px 0px; overflow: auto; } .A02_left{ width:304px; float:left; } .A02_right{ width:526px; float:right; margin-top:4px; } #B01{ width:730px; margin:20px 50px; }

  • sk03
  • お礼率100% (11/11)
  • CSS
  • 回答数1
  • ありがとう数5

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

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

# 教えて!goo は不便なルールがありますが、このようにページを提示されると検証しやすいです。 ※ 提示されたページと質問文内のソースに差異があります。 ※ 提示されたページのソースに対して回答します。 ## まず、文書型宣言がありません。 ## DTDが必須ということより、構成を実現する際の height の適用が異なります。 このままでも実現できますが、基本的に適切な文書型を宣言するようにしましょう。 html, body { height:100%; /* ● 表示領域に対する高さを確保します */ } body { text-align:center; margin:0px auto; background-image:url(images/top_bg.gif); } #side_bg { width:860px; min-height:100%; /* ● height ではなく min-height が理想を満足する指定です */ text-align:center; margin:0 auto; background:#ffffff url(images/side_860.gif); overflow:visible; } * html #side_bg { height:100%; /* ● IE7 quirk mode, IE6 以前 のIEでは min-height に対応してませんが、height が min-height として振る舞うバグがあるため、これを利用します */ } #outline { width:830px; text-align:left; margin:0 auto; padding-top:15px; /* ▼ #A01 での上マージンをここの上パディングで表現します */ background-color:#FFFFFF; } .c-both { display:block; /* ▼ br 要素に対して適用するのであれば、少なくともブロックレベルにする必要があります */ clear:both; } /* A */ #A01{ width:830px; margin:0px 0px 4px 0px; /* ▼ ここでの上マージンは理想に反した結果となります -> #outline */ font-size:8pt; color:#7F7F7F; overflow: auto; } #A02{ width:830px; margin:0px 0px 4px 0px; overflow: auto; } .A02_left{ width:304px; float:left; } .A02_right{ width:526px; text-align:right; float:right; margin-top:4px; } /* B */ #B01{ width:730px; margin:20px 50px; font-size:10pt; color:#666666; } /* footer */ .footer_margin{ font-size:9pt; color:#666666; text-align:center; margin:5px 0px 30px 0px; } 質問されたことに直接関係する指定は、コメントの文頭に●があるものです。 ▼ .c-both というクラスに対する clear 関連の指定がありますが、clear プロパティはブロックレベル要素にしか適用できません。 だからといって、空の div 要素を置いて指定するのは妥当性をクリアしますが適合性に反します。 このような場合、本来であれば以下のページに示されているように対処すべきです。 http://www.geocities.jp/multi_column/float/05.html http://www.kuroduction.com/doc/translation/position_is_everything/easyclearing.html 今回は、適合性に反しますが br 要素のままにしています。 # 本当は修正すべきですが、そこまで求める必要もないのでこのままでも結構です。 ▼ #A01 に対する上マージンが指定されていますが、 float や position がデフォルトのボックスに関して、 上マージンが指定されている要素の先祖要素が、ボーダーかパディングを正値で持っていない場合、上マージンはその要素ではなく、先祖要素の上マージンとして振る舞われます。 理想を実現するには、その要素に対する上マージンではなく、その要素の先祖要素に対して上パディングを与えるか、間にボーダーかパディングを挟む必要があります。 今回は、min-height:100% という指定によって、表示領域の100%の値を用いているため、margin, border, padding はこれより子孫要素で指定する必要があります。 #box{ height:100%; margin-top:20px; } などと指定すると、実際の id="box" の高さは、100% + 20px となってしまいます。 IE quirk mode では、ボックスモデルという概念において、これが 100% と解釈されるバグがあります。 IE6 及び IE7 の standard mode では、仕様通り 100% + 20px と解釈されます。 結果的に、#A01 の先祖要素であり、質問の内容のために height を指定した #side_bg の子孫要素である #outline に padding-top:15px を指定しています。 今回質問された内容は、少し複雑なブラウザ実装の事情もあるので理解しきれないかもしれませんが、 ポイントは、height ではなく min-height を使う、ということです。 これを変えただけでは、内容が少ないときに IE で高さ 100% が確保されないので面倒なこともする必要が出てきてしまいます。 #A01 の上マージンに関する内容は、バグではなく仕様です。

sk03
質問者

お礼

大変丁寧な解説に感謝致します。 ご指摘を受けた箇所を修正いたしましたところ、無事ブラウザ間でデザインを損なわないページにすることが出来ました。全体的に細かい指定の意図を理解できていなかったようです。 マージンとパディングに関しても使い分けをいまひとつ理解できておりませんでしたが、quadsさんのご意見で考え方がまとまり書き込みをして良かったと思います。 有難う御座いました。

関連するQ&A

  • Firefox2.0で背景が上段に集まってしまいます。

    以下のCSS、HTMLでdiv要素を分けて3つの細いgif画像を見た目は一つの背景になるように指定しているつもりです。真ん中のdiv要素をy方向にリピートさせて記事が長くなっても背景が崩れないページを作りたいと思っております。 IE7.0では問題なく表示してくれるのですがFirefox2.0になると背景が上段に集まってしまいます。 すみませんが改善方法をアドバイスよろしくお願い致します。 【CSS】 body { font-family: "MS Pゴシック"; margin: 0px; padding: 0px; text-align: center; background: #E8FFFF fixed; } #wrapper { text-align: left; margin: 0px auto; padding: 0px 0px 0px 20px; height: auto; width: 900px; background: url(background_3.gif) repeat-y; } #head-background { margin: 0px auto; height: 17px; width: 900px; background: url(background_7.gif) no-repeat; padding: 0px; } #header { margin: 0px; padding: 0px; height: 20px; width: 800px; } #footer {     clear: both width: 900px;     background: url(background_6.gif) no-repeat; margin: 0px auto; padding: 0px; } 【HTML】 <body> <div id="head-background"> </div> <div id="wrapper"> <div id="header"> ・・・・・(ロールオーバーリンク) </div> <div id="header"> ・・・・・(MPEG画像) </div> </div> </div> <div id="footer"> </div> </BODY> </HTML>

    • 締切済み
    • CSS
  • 背景色を設定しているのにFirefox,Opera等で背景出ない。overflow:hiddenではコンテンツ下部が途中で切れてしまう

    CSSでサイトを制作中ですが、背景が出ないことで困っております。 わかりやすくするためレイアウト画像を添付しましたのでレイアウトをご確認ください。 端的に書くと、コンテンツの白色の背景を記述しているのに、なぜか色がでず、両脇の背景色が表示されてしまっています。 このようになってしまうブラウザは、Firefox3,Opera8.5、NS7等です。IEは6なのですが、これだけ大丈夫でした。 でもIE6だけOKではダメなので、調べると、overflow:hiddenで直るような記載を見つけたのでやってみました。 すると、今度は ■IE6でコンテンツが終わっていないのに、途中で切れてフッターが出現してまう ■ミドルコンテンツであるdiv id="mdl"の中の左サイドバーと右コンテンツが両端に離れてしまい、間が開きすぎてしまう。 というようになってきました。どうやって回避すればよいでしょうか? 以下ソースです。 ●CSS ------------------------------------------------------------ div#hdr-wrap { background:url(../img/cmn/hdr_bg.gif) repeat-x; top:0px; width:100%; height:120px; text-align:center; } div#hdr { width:900px; _width: 902px;/*IE対策*/ height:120px; margin-left: auto; margin-right: auto; text-align: left; } div#gbnavi-wrap { background:url(../img/cmn/gbnv_bg.gif) repeat-x; top: 120px; width:100%; height: 51px; text-align:center; } div#gbnavi { width: 900px; _width: 902px;/*IE対策*/ top: 120px; height: 51px; margin-left: auto; margin-right: auto; text-align: left; } div#main-wrap { top:171px; width:100%; height:100%; background: url(../img/cmn/bg.gif) repeat; text-align:center; } div#main { overflow: hidden;/*BGcolor表示対策(Firefox,Opera,NS)*/ width: 920px; _width: 922px;/*IE対策*/ height:100%; background: #fff; border-left-color: 1px solid #000; border-right-color: 1px solid #000; margin-left: auto; margin-right: auto; text-align: left; } div#ftr-wrap { clear: both; width: 920px; _width: 922px;/*IE対策*/ height:151px; background: url(../img/cmn/ftr_bg.gif) repeat-x; border-left-color: 1px solid #000; border-right-color: 1px solid #000; margin-left: auto; margin-right: auto; text-align: center; } div#footer{ clear: both; color: #415880; width: 900px; _width: 902px;/*IE対策*/ height:151px; margin-left: auto; margin-right: auto; text-align: left; } ------------------------------------------------------------ ●HTMLソースは、単にくくっているだけです。 <div id="hdr-wrap"> <div id="hdr"> </div> </div> <div id="gbnavi-wrap"> <div id="gbnavi"> </div> </div> <div id="mdl-wrap"> <div id="mdl"> </div> </div> <div id="ftr-wrap"> <div id="ftr"> </div> </div> ------------------------------------------------------------

  • 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
  • ディスプレイサイズにあわせた背景画像

    html、cssは独学、javaはネットに上がっているものを活用させていただく程度の質問者です。 メインコンテンツ<wrapper>と<body>にかけて右角にラインの画像を斜めに貼り付けたサイトを作成しようと思っています。 今のところ下記のように書いているのですが、これだとlineのwidth=300pxのせいで、ブラウザに横スクロールが出来てしまいます。この横スクロールが出ないように設定したいのです。 例えば、ディスプレイのサイズを取得してlineのwidthを調整するとかlineを斜めにリピートするとか。 なにかよい方法がありましたら、お教え下さい。よろしくお願い致します。 *****html部分************************************ <body> <div id="wrapper"> <div id="header"> <div class="line"></div> </div> </body> ************************************************ *****css部分************************************ body{ width:auto; margin:0; padding:0; background:url(../images/body_bg.jpg) repeat; } div#wrapper{ width:850px; margin:0 auto; padding:0; background:url(../images/wrapper_bg.gif) repeat-y; } div#header{ width:850px; height:210px; margin:0 auto; background:url(../images/header_bg.gif) no-repeat;//ライン画像の一部 position:relative; } div#header div.line{ width:300px; height:200px; background:url(../images/line.jpg) repeat-x;//ライン画像 position:absolute; left:850px; top:0; } ************************************************

  • ディスプレイのサイズに合わせた背景画像

    html、cssは独学、javaはネットに上がっているものを活用させていただく程度の質問者です。 メインコンテンツ<wrapper>と<body>にかけて右角にラインの画像を斜めに貼り付けたサイトを作成しようと思っています。 今のところ下記のように書いているのですが、これだとlineのwidth=300pxのせいで、ブラウザに横スクロールが出来てしまいます。この横スクロールが出ないように設定したいのです。 例えば、ディスプレイのサイズを取得してlineのwidthをちょうせいする。とかlineを斜めにリピートするとか。 なにかよい方法がありましたら、お教え下さい。よろしくお願い致します。 *****html部分************************************ <body> <div id="wrapper"> <div id="header"> <div class="line"></div> </div> </body> ************************************************ *****css部分************************************ body{ width:auto; margin:0; padding:0; background:url(../images/body_bg.jpg) repeat; } div#wrapper{ width:850px; margin:0 auto; padding:0; background:url(../images/wrapper_bg.gif) repeat-y; } div#header{ width:850px; height:210px; margin:0 auto; background:url(../images/header_bg.gif) no-repeat; position:relative; } div#header div.line{ width:300px; height:200px; background:url(../images/line.jpg) repeat-x; position:absolute; left:850px; top:0; } ************************************************

    • 締切済み
    • CSS
  • 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
  • divで作成したレイアウトに背景画像を付けたいが付けられない

    divでレイアウト作り背景画像を入れたいのですが背景画像が思うように適用されません。 以下のようなサイトのように、作成したレイアウトのコンテンツ部分(真ん中白い背景色部分)に背景画像をつけたいのですが、色々やってみたのですが背景画像が適用されません。 参考サイト:http://www.realbit.net/rb_results/index.html 私のソースコードは以下です。 HTML <body> <div id="header"> <p>ヘッダー</p> <p>あああ</p> </div> <div id="container"> <div id="incontainer"> <div id="main"> <p>メイン</p> <p>あああ</p> <p>あああ</p> <p>あああ</p> </div> <div id="leftMenu"> <p>左メニュー</p> <p>あああ</p> <p>あああ</p> <p>あああ</p> <p>あああ</p> <p>あああ</p> </div> </div> <div id="rightMenu"> <p>右メニュー</p> <p>あああ</p> <p>あああ</p> <p>あああ</p> <p>あああ</p> <p>あああ</p> </div> </div> <div id="footer"> <p>フッター</p> <p>あああ</p> <p>あああ</p> </div> </body> CSS #header { background-color: #FF3; width: 920px; margin-right: auto; margin-left: auto; } #container { background-color: #F00; width: 920px; margin-right: auto; margin-left: auto; } #incontainer { float: left; width: 720px; } #main { float: right; width: 520px; background-color: #900; } #leftMenu { background-color: #00F; float: left; width: 180px; margin-left: 20px; } #rightMenu { float: right; width: 180px; background-color: #FF9; margin-right: 20px; } #footer { background-color: #F0F; clear: both; width: 920px; margin-right: auto; margin-left: auto; } 参考サイトのようにコンテンツ部分に背景画像を入れたい、私の場合container部分にフォトショップで作成した背景画像をいれたいのですが、まずは実験的に、上記のように背景画像を入れる前に赤い背景色を入れて見ましたが赤い背景が出てきません。背景画像もためしに入れてみましたが適用されません。 なにが間違っているのでしょうか?

    • ベストアンサー
    • HTML
  • div入れ子の背景画像

    【CSS】 #layout{ width:755px; margin:auto; background-color:#ffff00; background-image:url(img/back.gif); background-repeat:repeat-y;} #menu{ width:168px; margin:0px; padding:0px; float:left;} #main{ width:570px; background-color:#ffffff; padding:0px 0px 0px 10px; float:left;} 【html】 <div id="layout">  <div id="menu">メニュー</div>  <div id="main">メイン</div> </div> レイアウトで指定した背景画像を縦に繰り返し表示させたいのですが、 上記のCSSだとIEはOKなのですが、foxが表示されません。 メニューidにはデザイン上背景画像は設定できません。 また、 <div id="layout"> あああ </div> を試したら背景画像が表示されましたので、パスの間違いはありません。 どうすれば良いでしょうか? 知恵をお貸しいただけますでしょうか。 宜しくお願い致します。

    • ベストアンサー
    • HTML
  • IE6とFirefoxの表示の違い

    どうか教えてください。 IE6とFirefoxでの表示結果が違うのですが、同じにするには どうすればいいのですか? Firefoxでは文字の背景色の赤が上下にでてるし、IE6は左のボックスが 下にくっついているし、それと、A Bにかけた margin:10px;なのですが、10pxマージンとれてますかね? よろしければ教えてください。 【html】 <body> <div id="container"> <div id="A"> <p>いいいいいいいいいいいいいいいいいいいいいいいいいいいいいいい</p> </div> <div id="B"> <p>ああああああああああああああああああああああああああああああ</p> </div> </div> </body> 【CSS】 body{ font-size:20px; } #container{ background:#000; width:600px; overflow:auto; } #A{ float:left; width:200px; background:#ff0000; margin:10px; } #B{ width:200px; float:right; background: #ff0000; margin:10px; }

    • 締切済み
    • CSS
  • FireFoxで見るとdiv間に隙間が・・・

    divを3つ使い、CSSで指定した背景画像によって一つのボックスを作っています。 IE6で見たときは異常ないのですが、FireFoxで見ると、 それぞれ隙間が開いてしまい、背景画像が途切れて見えます。 同じような使い方をしている箇所にすべて同じ事が起きています。 Firefoxではマージン0の状態でdivの間に隙間が出来てしまうのでしょうか? 直す方法があればご指導よろしくお願い致します>< <div id="medi-top"> </div> <div id="media"> <p>何行かにわたり、画像や文章が入力されています</p> </div> <div id="medi-bottom"></div> #medi-top { background-image: url(img/media_01.jpg); background-repeat: no-repeat; height: 50px; width: 680px; margin-top: auto; margin-right: auto; margin-bottom: 0px; margin-left: auto; line-height: 0; } #media { width: 600px; background-image: url(img/media_03.jpg); background-repeat: repeat-y; margin-top: 0px; margin-right: auto; margin-bottom: 0px; margin-left: auto; padding-right: 40px; padding-left: 40px; } #medi-bottom { background-image: url(img/media_05.jpg); background-repeat: no-repeat; height: 35px; width: 680px; margin-top: 0px; margin-right: auto; margin-bottom: 50px; margin-left: auto; } 本や検索などで同じようなものを探して対処してみたのですが、 直らなかったため質問させていただきます。 よろしくお願い致します。

    • ベストアンサー
    • CSS

専門家に質問してみよう