<style type="text/css">
*{
margin:0;
padding:0;
color:#ffffff;
}
#global_nav_bg{
background:url(img/nav_area.gif) repeat-x 0 0;
}
#global_area{
background:url(img/nav_bg.gif) no-repeat top center;
}
#global_nav{
width:880px;
margin:0 auto;
}
</style>
</head>
<body>
<div id="global_nav_bg">
<div id="global_area">
<ul id="global_nav">
<li>aaa<br />aaaa<br />aaa</li>
</ul>
</div>
</div>
</body>
</html>
画面を縮小してもきちんと指定通り表示されるのですが、
画面を拡大すると横幅が880ピクセルの所で右端が切れてしまいます。
縮小画像を添付いたしました。
拡大すると一番外の背景に指定した赤い画像が表示されません。
[注意点]
・#navのwidthは外しません。
・背景は画像です。
拡大しても同じように、指定通り表示されるためにはどうすれば良いでしょうか?
ご教授願います。
No.1
- 回答日時:
デザインのためにHTMLをマークアップしようとするからそうなる。
HTMLをプレゼンテーションの負担から開放するためにスタイルシートはある。・・これ忘れてませんか?もっと重要かつ忘れてならないこと
それを忘れると不必要なリンク先でもないのに不必要なid--こうするとカスケーディングが使えなくてすべて指定しなくてはならない。
やったらめったら<div>ばっかりになってしまう。HTML5になったらどうするんでしょう。
*{margin:0;padding:0;color:#ffffff;}←こんなことするとブラウザデフォルトのすべてのmargin,paddingを指定しなおさなくてはならない。colorは継承されるプロパティなので全称セレクタではなく親要素に指定すべきです。たとえばbody{color:white;}とか。
<body>
<div class="header">
<h1>見出し</h1>
<div class="nav">
<ul>
<li><a href=""></a></li>
<li><a href=""></a></li>
</ul>
</div>
</div>
・・・・
とかになるはず・・・
body,htm{margin:0;padding:0}/* 詳細度1 */
body{background:url(img/nav_area.gif) repeat-x 0 0;}/* 詳細度1 */
div.header{background:url(img/nav_bg.gif) no-repeat top center;}/* 詳細度11 */
div.header div.nav{margin:0 auto;width:880px;}/* 詳細度22 */
div.header div.nav ul li{display:block;list-style:none;・・・}/* 詳細度24 */
とか、詳細度が高いと同じ要素であっても優先されますし、先で同じ要素が登場しても詳細度を上げればそこだけ上書きできる。id(一意セレクタ)のように詳細度を高くしすぎるとそれもままならず、いちいち設定しなきゃならない。
ORUKA1951さん
ご教授ありがとうございます。
赤い画像ですが、デザイン上、bodyに設定できません。
上記に記したのは、全てコードの一部のサンプルです。
たしかにbodyに赤い画像を設定すると縮小しても画像が途中で切れることがなくなるのですが、
あくまでもbody以外に設定しなければなりません。
※理由はbodyには別の背景画像を設定するからです。
No.2
- 回答日時:
>赤い画像ですが、デザイン上、bodyに設定できません。
・・・【中略】・・・
>※理由はbodyには別の背景画像を設定するからです。
なら全体を<div class="section">で囲む。
<body>
<div class="section">
<div class="header">
<h1>見出し</h1>
<div class="nav">
<ul>
<li><a href=""></a></li>
<li><a href=""></a></li>
</ul>
</div>
</div>
・・・・
</div><!-- body>div.section//end -->
body,htm{margin:0;padding:0}/* 詳細度1 */
body{
div.header{background:url(img/nav_bg.gif) no-repeat top center;}/* 詳細度11 */
div.header div.nav{margin:0 auto;width:880px;}/* 詳細度22 */
div.header div.nav ul li{display:block;list-style:none;・・・}/* 詳細度24 */
div.section{background:url(img/nav_area.gif) repeat-x 0 0;}/* 詳細度1 */
div.section div.section{margin:0;background-image:none;}
ひとつのbody内に複数の同じsectionが登場しても継承される。
HTMLはプレゼンテーションと切り離すと、先でメンテナンスのときCSSを見るだけで修正できる。いちいち一意セレクタで指定していたらたまりません。
HTMLを書くときはプレゼンテーションは一切考えないこと。CSSを書く段になってどうしても必要ならそのときに、今回のようにHTMLをちょっと手を加える。
プレゼンテーションとHTMLを切り分けることこそ、スタイルシートの最大の目的なのですから、プレゼンテーションにHTMLのマークアップを縛られていたらスタイルシートを使う意味がないです。
ORUKA1951さん
ご返事ありがとうございます。
画面を拡大すると、「nav_area.gif」が途中で途切れてしまいます。
◆画面通常
---------------------- (赤) ※画面いっぱい
---------------- (黒) ※画面いっぱい
◆画面縮小
---------------------- (赤) ※画面いっぱい
---------- (黒) ※画面いっぱい
◆画面拡大
----------- (赤) ※画面右側が途切れて残りは真っ白
----------- (黒) ※画面右側が途切れて残りは真っ白
拡大時は画像の右側が途中で切れてしまい、残りが真っ白になってしまいます。
これを拡大しても途切れないよう、画面いっぱいに表示できるようになればと思います。
No.3
- 回答日時:
やりたいこと一つ一つについて質問してそれをコピーペーストしていたら完成するまでに何年もかかる。
そして一つ変えようとしたら何をしたら良いかわからなくなる。あなたの画像名からはどれが黒くて赤いのかわからないのです。できるだけファイル名から画像が推測できるものにしておくと良いです。
最初の質問の意味がまったく理解できてないのです。ご自身で
width:880px;
margin:0 auto; /* 上下が0で左右は自動 */
と指定しておきながら「画面を拡大すると横幅が880ピクセルの所で右端が切れてしまいます。」と書かれている。これは問題ないということですね。だとしたら次の「拡大しても同じように、指定通り表示されるためにはどうすれば良いでしょうか?」の答えは
div.header div.nav{margin:0 auto;width:880px;}/* 詳細度22 */
とかになる。
第三者には「拡大しても同じように、指定通り表示されるためにはどうすれば良いでしょうか?」と言われてもあなたの指定したいことと指定されていることが聖子ヴうしているので?????になる。
まず、HTMLの正しい文書構造をお示しください。
【例】
<body>
<div class="header"><!-- ヘッダー部分 -->
<h1>見出し</h1>
<div class="nav">!-- ナビゲーション -->
</div>
<div class="section">
<h2>本文見出し</h2>
<p>・・・段落・・・</p>
</div>
<div class="footer">
<h2>文書情報(フッター見出し)</h2>
</div>
</body>
その上で、
・本文は幅広のウィンドウでは両サイドを空けて最大幅1000pxで表示したい
・red_bar_880_10.gif(赤い880px×10pxの画像)を<h1>の背景としてウインドウの幅いっぱいに置きたい
とか具体的に誰でもわかるように書いてください。
でないと、何度繰り返しても期待のものは得られません。
ただ、
★HTMLは文書構造だけを記述すること--デザインは一切考えない--必要なら回答時に言います。
プレゼンテーションをHTMLから解き放つことがスタイルシートの目的ですから、プレゼンテーションのためにHTMLを書くと失敗する。
ORUKA1951さん
ご返答ありがとうございます。
上記確認いたしました、
順序が悪く申し訳ありません。
一度話を整理いたします。
------------------------------
◆html
<body>
<div class="section">
<div class="header">
<h1>見出し</h1>
</div>
</div>
</body>
◆css
body,htm{margin:0;padding:0}/* 詳細度1 */
div.header{background:url(img/black.gif) no-repeat top center;width:880px;margin:0 auto;}/* 詳細度11 */
div.header h1{ color:#ffffff;margin:0;}
div.section{background:url(img/red.gif) repeat-x 0 0;width:100%;}/* 詳細度1 */
sectionの背景に設定した「red.gif」をheaderの背景としてウィンドウの幅いっぱいに置きたいです。
現在、上記コーディングでは、通常時・縮小時はウィンドウの幅いっぱいに表示されるのですが、
画面を拡大した時、sectionの背景画像が右端で切れて真っ白になってしまいます。
その際、headerの背景に設定した「black.gif」は逆にウィンドウの幅いっぱいに表示されています。
headerにはwidth:880pxを設定しているのでそのせいだと思いますが。
sectionにposition:fixを設定すると、拡大しても「red.gif」もウィンドウの幅いっぱに表示されるようになるのですが、他の文字などと被さってしまう恐れがあるため得策ではありません。
または、sectionの背景をflashで表示させてしまい、headerの背景をpositionでその上に置くという方法もありますが、できればflashなしで解決したく思います。
以上、長々と申し訳ありませんでした。
No.4ベストアンサー
- 回答日時:
まず、わかりやすいようにDOMで考えて見ます。
firefoxをお使いならデフォルトでインストールしていればDOM Inspectorが入っていますので、[ツール]→[Dom Inspector]を起動します。すると
body
div section
div header
h1
#TEXT
div section
などと見えるはずです。幅やborderは継承されないプロパティですが、親となるブロックの内寸を基準にしますから、
div.sectionで880pxにしていると、その下位にあるdiv.headerは100%といわれると880pxのdiv.sectionのborder辺の内側いっぱいの幅を取ります。
しかし、
div.header{/* 詳細度11 */
background:url(img/black.gif) no-repeat top center;
width:880px;margin:0 auto;
}
div.section{/* 詳細度1 */
background:url(img/red.gif) repeat-x 0 0;
width:100%;
}
というCSSの場合、あなたの下の現象にはなりません。逆ではないですか?
>現在、上記コーディングでは、通常時・縮小時はウィンドウの幅いっぱいに
表示されるのですが、????何が????
>画面を拡大した時、sectionの背景画像が右端で切れて真っ白になってしまいます。
ということは起きないはずです。
div.section>div.sectionは880pxになりますけど・・
>その際、headerの背景に設定した「black.gif」は逆にウィンドウの幅いっぱいに表示されています。
これもおかしい。width800pxと指定しているので880pxより広くならない。
★W3C CSS 検証サービス ( http://jigsaw.w3.org/css-validator/#validate_by_ … )でCSSをチェックすると記述間違いが指摘されるかも・・
書かれているCSSとHTMLだと、あなたが言われる形にはならないはずです。もう一度HTMLとCSSを見直してください。
ちょっとだけテクニックを・・
HTMLが出来上がったら、CSSに
div{border:solid 1px blue;}
div.section{border-color:red;}
div.section{border-color:green;}
div.section div.section{border:color:purple;}
とか指定して、配置を見てみると良いです。
>sectionにposition:fixを設定すると、拡大しても「red.gif」もウィンドウの
>幅いっぱに表示されるようになるのですが、
fixやabsoluteは使いにくいので極力使わないほうが良いでしょう。
★背景を前面黒
画像のみ中心に880px;
内容も中心部860px程度
★ヘッダー部分も100%幅
でしたら
注意・・読みやすいようにタブを全角スペースに置換してあります(以下同様)
<body>
<div class="header">
<h1>見出し</h1>
<p>文章</p>
</div>
<div class="section">
<h2>見出し</h2>
<p>・・・・</p>
</div>
</body>
だけでも良いのです。h1もpもブロックですから実質divと同じですよ!!
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
この場合、
body{
background:url(img/black.gif) no-repeat top center;
}
div.header{
background:url(img/red.gif) repeat-x 0 0;width:100%;
padding-top:4px; /* 赤画像をh1と重ねたくない場合は画像高さ */
}
div.header h1,div.header p,div.section{
width:860px;margin:0 auto;
}
で背景は黒、背景画像は中心に画像の幅
red.gifも画面いっぱい
しかし、div.header h1とdiv.header p、div.sectionは860px幅で表示される。
★不必要にdivを書く事はないように・・・
ORUKA1951さん
ご返事ありがとうございます。
>div.header{/* 詳細度11 */
> background:url(img/black.gif) no-repeat top center;
> width:880px;margin:0 auto;
>}
>div.section{/* 詳細度1 */
> background:url(img/red.gif) repeat-x 0 0;
> width:100%;
>}
>というCSSの場合、あなたの下の現象にはなりません。逆では>ないですか?
逆ではなく上記の通りです。
W3C的にも問題ないようでした。
ただ、
>body{
> background:url(img/black.gif) no-repeat top center;
>}
>div.header{
> background:url(img/red.gif) repeat-x 0 0;width:100%;
> padding-top:4px; /* 赤画像をh1と重ねたくない場合は画>像高さ */
>}
>div.header h1,div.header p,div.section{
> width:860px;margin:0 auto;
>}
上記でわかったことですが、
bodyの背景に置いた画像は画面をズームしても、縮小しても、
いつでもウィンドウの幅いっぱに表示されるということでした。
これらをふまえて、横幅いっぱいに表示したいものをbodyに置くことで解決しようと思います。
ためになることを教えていただきありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- HTML・CSS テキストを画面の真ん中に配置したいです。 2 2022/11/25 16:11
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
- HTML・CSS cssの display: flex;で横並びにならずに困ってます 1 2022/12/04 13:18
- HTML・CSS スクロールすると追従する画像のコードを書いているのですが、追従する画像の大きさの調節が上手くいきませ 2 2022/04/18 12:52
- HTML・CSS PCサイズで赤い画像2つと、青い画像2つがそれぞれ横に2つずつ並んでいるのですが、これをスマホサイズ 5 2022/04/11 12:01
- オープンソース cssで中央寄せ 1 2023/05/19 06:25
- HTML・CSS アコーディオンメニューが思うように動作しません。 1 2023/08/20 16:48
- HTML・CSS 下にスクロールしても、追従するボタンのコードを書いたのですが、ボタンの中の画像が半分しか表示されない 1 2022/04/16 21:31
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
htmlのolやulなどlistにtitleや...
-
HTML属性での「""」 「''」違い
-
<div id="container">の使いか...
-
div要素が重なってします
-
複数のボタンを等間隔に、かつ...
-
スペースを使わず文字位置を揃...
-
divを横に並べる方法
-
ヘッダーとフッターだけ背景を...
-
フッタの背景画像をリピートxで...
-
セクションをdivで囲むと見出し...
-
サルワカさんの吹き出しのスタ...
-
SSIを利用してCSSレイアウトを...
-
画面を拡大すると横幅が切れる
-
開閉式の隠し要素が一瞬表示さ...
-
3カラムレイアウトで「常に残り...
-
img と p を縦中央に配置したい...
-
音声ブラウザ、スクリーンリー...
-
【html】iframeを使用したmp4の...
-
WEBサイト制作の図面作成ソフト...
-
HTML5 iframe の代わり
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
htmlのolやulなどlistにtitleや...
-
HTML属性での「""」 「''」違い
-
div要素が重なってします
-
<div id="container">の使いか...
-
複数のボタンを等間隔に、かつ...
-
html の divとtable の役割
-
divとpの使いわけ
-
ヘッダーとフッターだけ背景を...
-
min-heightとheightの違いについて
-
セクションをdivで囲むと見出し...
-
画面を縮小するとカラムが落ち...
-
ヘッダーを左右に二分割する方...
-
1時間30分を簡単に表したいで...
-
スペースを使わず文字位置を揃...
-
CSSで、contentsがfooterに重な...
-
h1に自分自身へのリンクを張...
-
divの中に外部のHTMLを埋め込む
-
divを横に並べる方法
-
hタグの右横に画像を表示
-
h1のテキストサイズよりh2の方...
おすすめ情報