
お世話になります。
2枚のTOP画像(一枚は差し替え可能なJPG、もう一枚はその画像の上に位置するフレーム枠のような役割を果たすGIF画像)をぴったり重ね合わせて配置したいと考えています。
調べたところz-indexという方法があるらしく、position:relativeしてtop,left指定でいろいろ試してみたのですが、上に重なる画像の分だけ、下部コンテンツに空きが出ます。(添付画像のような現象です)
これはCMS化して画像を差し替える時のためにページなのですが、こういう現象をなくして普通のWebサイトページのように配置することはできないのでしょうか?
素人ゆえおかしな質問しているかもしれませんが、どうかご教授お願いします。
現時点のHTML/CSSはこんな感じです。
HTML---
<div id="contens">
<div id="top_img_a">
<p class="img_top"><img src="images/dammy_img02.jpg" alt="新規投稿ダミー画像" /></p>
<p class="flame"><img src="images/new_entries_img_flame.gif" alt="新規投稿フレーム枠" /></p>
</div>
CSS---(本意ではありませんが、やむなくtop,left調整で位置を作っている段階です。)
#top_img_a {
width:900px;
margin:0;
padding:0;
position:relative;
top:0px;
}
.img_top {
position:relative;
z-index:1;
top:0;
left:25px;
}
.flame {
position:relative;
z-index:2;
top:-216px;
left:25px;
}

No.4ベストアンサー
- 回答日時:
>調べているうちに気が付いたのですが、sectionプロパティもnavプロパティも
>HTML5のみの対応で、
きちんと正確に!!。
「sectionプロパティもnavプロパティ」じゃありません。
・section要素、nav要素はHTML5から採用される要素です。
文書は色々な要素で組み立てていて、それをタグを用いてどの要素かを示します。
p要素は、それでマークされていれば、囲まれた部分がp要素であることを示します。
・HTML4では、文書構造を示す要素が不足していたため、class名やIDをつけていました。
『DIV要素とSPAN要素は、id属性及び class属性と併用することで、文書に構造を付加するための一般機構を提供する。 ( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html4 … )』
・・・top_img_a,img_top,flameというclass名じゃ、おかしいでしょ。そもそも、まったく必要ないのですよ。
私は原則として、class名にHTML5で登場する要素名を使用しています。それは先でHTML5でページを作成するときに、スムーズに移項できるからですし、本来、HTML4でも望まれる名前だからです。
ですから、別にHTML4.01だろうが、XHTML1.0だろうが、class名として使うなら問題ありません。
ただし、HTML4.01であってもXHTML1.0であっても、必ずstrictで作らなきゃダメです。
もしくはXHTML1.1。なぜなら、HTML4.01の勧告(1999/12)以来、
『著者
・・・【中略】・・・
HTML文書を作る場合には、この仕様における、他のDTDセットではなく strict DTD に適合する文書を作るよう推奨する。 ( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html4 … )』
となっていたはずです。予告どおり、XHTML1.1HTML5では、transotinalな要素、属性は削除されています。
★Another HTML-lint gateway ( http://openlab.ring.gr.jp/k16/htmllint/htmllint. … )
★W3C CSS 検証サービス ( http://jigsaw.w3.org/css-validator/#validate_by_ … )
最後に、検証済みのソースを示しておきます。スタイルシートなしで表示してもよい。
<!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{margin:0;}
div.header,div.section,div.footer,div.footer div.nav{
_width:720px;margin:0 auto;
_border:solid 1px silver;
}
div.header{
_height:200px;
_margin-bottom:40px;
_background-color:silver;
_border-color:silver;
}
div.section{
_background-color:fuchsia;
_border-color:fuchsia;
}
div.footer div.nav{
_position:absolute;top:200px;height:40px;
_font-family:"MS Pゴシック", "ヒラギノ角ゴ Pro W3", sans-serif;
_line-height:40px;
_text-align:center;
_background-color:black;
}
div.footer ul,div.footer ul li{
_display:block;list-style:none;
_margin:0;padding:0;
}
div.footer ul li{
_width:118px;float:left;
_position:relative;
}
div.footer ul li a{
_display:block;
_width:100%;height:100%;
_text-decoration:none;
_color:#FFF;
}
div.footer ul li ul{
_font-size:75%;
_position:absolute;top:40px;left:0;
_display:none;
}
div.footer ul li ul li{
_height:60px;width:140px;
_background-image:url(../images/dawnmenu_button.gif);
}
div.footer ul li:hover{
_background-color:rgb(255,160,0);
}
div.footer ul li ul li:hover{
_background-color:transparent;
}
div.footer ul li ul li a{
_padding-top:20px;
}
div.footer ul li:hover ul{
_display:block;
}
div.footer{
_background-color:yellow;
_border-color:yellow;
}
div.section p,div.section h2,div.section dl{
_width:680px;margin:0 auto;
}
div.section p.sample img{
_display:block;
_margin:0 auto;padding:5px;
_background-image:url(images/new_entries_img_flame.gif)
}
-->
_</style>
</head>
<body>
_<div class="header">
__<h1>サンプル</h1>
_</div>
_<div class="section">
__<h1>サンプル2</h1>
__<div class="section">
___<p class="sample"><img src="images/dammy_img02.jpg" width="480" height="360" alt="サンプル画像"></p>
___<h2>用意する画像</h2>
___<dl>
____<dt>images/dammy_img02.jpg</dt>
____<dd>480px巾、360px高さの画像を用意する。</dd>
____<dt>images/new_entries_img_flame.gif</dt>
____<dd>内寸480×360pxが透明な枠用画像</dd>
____<dt>../images/dawnmenu_button.gif</dt>
____<dd>巾140,高60pxの吹き出し画像</dd>
___</dl>
__</div>
_</div>
_<div class="footer">
__<h2>文書情報</h2>
__<div class="nav">
___<ul>
____<li><a href="/">TOP</a></li>
____<li><a href="./profile">会社情報</a>
_____<ul>
______<li><a href="./profile/index.html">会社概要</a></li>
______<li><a href="./profile/office.html">営業所</a></li>
_____</ul>
____</li>
____<li><a href="./B">Bボタン</a></li>
____<li><a href="./C">Cボタン</a></li>
____<li><a href="./D">Dボタン</a></li>
____<li><a href="./E">Eボタン</a></li>
___</ul>
__</div>
_</div>
</body>
</html>
いつも詳しく検証用のソースも書いてくださり感謝します。
アドバイスをもとに思う通りに実装することができました。
基本から勉強していこうと思います。
ありがとうございました。
No.3
- 回答日時:
>そのドロップボタンが今回絶対は位置した2つの画像の下に表示され、隠れてしまいます。
一番良い解決方法は、
ドロップダウンメニューを作るこのCSSどこが変? - Webデザイン・CSS - 教えて!goo ( http://oshiete.goo.ne.jp/qa/7229595.html )
で示したように、ナビゲーションをページの最後に記述することです。
ナビゲーションは、HTMLの文書構造上、本文の前にあるのは変です。
今回のrelative内でabsoluteさせる方法も、本来の方法ではなくあくまで抜け道です。いずれの問題も、「文書構造に従ったHTMLを作成しない」「デザインのためにHTMLを書く」と言うのが、本当の原因なのです。
ドロップダウンメニューを作るこのCSSどこが変? - Webデザイン・CSS - 教えて!goo ( http://oshiete.goo.ne.jp/qa/7229595.html )で示した、サンプルソースの<div class="section">内に、先の回答の
<div class="section">
<p class="sample"><img src="images/dammy_img02.jpg" alt="新規投稿ダミー画像" width="480" height="360" alt="サンプル画像" /></p>
<h2>記事の見出し</h2>
<p>段落</p>
</div>
を入れた場合、問題は起きないはずです。
最初にHTMLを書くとき、デザインのことは一切考えずに、ひたすら文書構造をマークアップすることに徹して、その後スタイルシートでデザインするという開発方法にするのが良いです。
回答ありがとうございます。
調べているうちに気が付いたのですが、sectionプロパティもnavプロパティもHTML5のみの対応で、現在私が記述しているDOCTYPE宣言のXHTML1.0には非対応みたいですね。
うーん、困りましたね、そうしたらいいのでしょうか。
No.2
- 回答日時:
上に重ねる画像を、position:relative;の親コンテナブロック内でposition:absoluteで配置すれば良いですし、後から登場するものなのでz-indexも不要です。
#top_img_a{
width:900px;margin:0;padding:0;margin:0 auto;
position:relative;
}
#top_img_a p{margin:0;paddin:0;}
#top_img_a p.flame{
position:absolute;top:-5px;left:-5px;
}
★まず参考にすべきは仕様書です。
9.3.1 配置体系を選択する ( http://www.swlab.it.okayama-u.ac.jp/man/rec-css2 … )
のrelativeには、
「ボックスの位置はまず通常フローにて計算され(この計算で得られた位置を通常位置と呼ぼう)、その通常位置から相対的に配置される。なお、あるボックスBが相対配置される場合、それに後行するボックスの位置は、Bが相対配置されていないかのように計算される。」
★しかし、もっとも基本的な部分で間違っています。
HTMLは、あくまで文書構造を示すもので、スタイルシートはそのデザインをするためのものです。
【引用】____________ここから
文書の構造をプレゼンテーションと切り離すことで広汎なプラットフォームや多様なメディアでの文書提供コストを低下でき、文書の改訂も容易になるということが、経験的に知られている。
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ここまで[HTML4.01仕様書2.4.1 構造とプレゼンテーションの分離( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html4 … )]より
質問文だけでは、それぞれの文書内での構造的意味合いがわからないのですが、示された二つの画像は、文書内ではまったく意味のないもの、あるいは、最初の画像は単なるサンプルかもしれません。
後者だとするとHTML上は
<div class="section">
<p class="sample"><img src="images/dammy_img02.jpg" alt="新規投稿ダミー画像" width="480" height="360" alt="サンプル画像" /></p>
<h2>記事の見出し</h2>
<p>段落</p>
</div>
とかになるはずです。スタイルシートも画像も読み込まないユーザーエージェントや検索エンジンでも意味がわかるように記述すると言うことです。
★枠の画像は、線幅5pxとして画像サイズ+10pxのものを用意したとします。
そのうえでスタイルシートで
div.section{width:900px;margin:0 auto;}
p.sample img{
display:block;
margin:0 auto;padding:5px;
background-image:url(images/new_entries_img_flame.gif)
}
HTMLもCSSも極めてわかりやすく、書くのが簡単になるでしょう。
そしてなによりも、HTMLがデザインと独立していますから、先でどのようにもデザインを変えることが出来ます。
ためしに、最初のものをスタイルシートなしで表示したものと比べてみてください。これがまさにHTMLとCSSの役割分担です。
div.section{width:900px;margin:0 auto;}
p.sample img{
display:block;
margin:0 auto;padding:5px;
background-image:url(images/new_entries_img_flame.gif)
}
#top_img_a{
width:900px;margin:0;padding:0;margin:0 auto;
position:relative;
}
#top_img_a p{margin:0;paddin:0;}
#top_img_a p.flame{
position:absolute;top:-5px;left:-5px;
}
<body>
<h1>サンプル1</h1>
<div id="contens">
<div id="top_img_a">
<p class="img_top"><img src="images/dammy_img02.jpg" alt="新規投稿ダミー画像" /></p>
<p class="flame"><img src="images/new_entries_img_flame.gif" alt="新規投稿フレーム枠" /></p>
<h2>記事の見出し</h2>
<p>段落</p>
</div>
<h1>サンプル2</h1>
<div class="section">
<p class="sample"><img src="images/dammy_img02.jpg" alt="新規投稿ダミー画像" width="480" height="360" alt="サンプル画像" /></p>
<h2>記事の見出し</h2>
<p>段落</p>
</div>
</body>
いつも詳しく回答くださり本当に感謝致します。一番簡単なposition:relative;の親コンテナブロック内でposition:absoluteしたところ思う通りに配置できました。ありがとうございます。
ひとつ疑問なのですが、その上部のheaderのボタン類にはドロップダウンメニューが<ul><li>によって配置されhover時に表示されるようになっているのですが(その問題に関してもORUKA1951様に回答いただきありがとうございます)そのドロップボタンが今回絶対は位置した2つの画像の下に表示され、隠れてしまいます。ボタン類は画像の上部に表示させたいのですが...この問題の原因はなんでしょうか。
よければ教えてください。
No.1
- 回答日時:
これでどうですか?
(contents→containerにして、下の文章をcontentsにしてます。)
relative内でabsolute指定していくんだったと思いますが・・
【html】
<div id="container">
<div id="top_img_a">
<p class="img_top"><img src="images/dammy_img02.jpg" alt="新規投稿ダミー画像" /></p>
<p class="flame"><img src="images/new_entries_img_flame.gif" alt="新規投稿フレーム枠" /></p>
</div>
<div id="contents">
<p>下の文章</p>
</div>
</div>
【css】
#container{
position:relative;
margin:0 auto;
width:900px;
}
#top_img_a{
width:900px;
height:●px;//高さを入力
position:relative;
}
.img_top {
position:absolute;
z-index:1;
top:0px;
left:25px;
}
.flame {
position:absolute;
z-index:2;
top:0px;
left:25px;
}
#contents{
position:relative;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- HTML・CSS CSSのホバーエフェクト 1 2023/06/19 06:53
- HTML・CSS img と p を縦中央に配置したいのですがうまくいきません。 2 2023/01/12 14:38
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- HTML・CSS htmlとcssで吹き出しの中に文字を置きたいのですが、 html 〈div class bb〉 〈 3 2023/02/04 22:44
- HTML・CSS 吹き出し 下記の吹き出しのスタイルシートについて 下記のスタイルシートは左側にアイコンがでる使用にな 1 2022/11/12 17:55
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
htmlの文字が縦書きになる
-
横のTableタグのヘッダを...
-
ロールオーバーで画像がずれな...
-
W3Cのソースコードの検証サービ...
-
div領域をウインドウサイズに合...
-
レイヤーを画面の左右中央に重...
-
[CSS]<ul>タグのスタイル指定に...
-
CSSがなぜかfont-sizeだけ効か...
-
うまくスタイルが適応されない...
-
CSSと<dl><dd>で間隔をあけて1...
-
誤差!?
-
HTMLのiframeの入れ子について
-
この場合のCSSの記述を教えてく...
-
html、CSS共に初心者です。3段...
-
CSSで指定した背景画像にリンク...
-
borderをページの下まで伸ばしたい
-
3カラムレイアウトで隙間
-
Firefoxでheight:100%がきかない?
-
今の文字を4センチぐらい下げ...
-
Firefoxで一番下のstickyが上に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
htmlの文字が縦書きになる
-
widthやheightの数値に単位(px...
-
form input テキストを上下中央...
-
<div>と<div>の間の10px程の...
-
【CSS】ヘッダーの高さが不明の...
-
余分な縦スクロールバーが出て...
-
CSSがなぜかfont-sizeだけ効か...
-
css初心者 フレックスボックス...
-
W3Cのソースコードの検証サービ...
-
表示倍率を変えるとレイアウト...
-
div内に外部のurlを表示させたい
-
画像イメージの上下左右、欲し...
-
table周辺の隙間をなくしたい。
-
divで囲まれたpaddingの指定を...
-
CSSで背景画像を一番下にもって...
-
HTMLのiframeの入れ子について
-
footer を横幅いっぱいに広げる...
-
CSSでボックスのheightが0になる
-
テーブル内の画像をマウスオー...
-
スクロールボックスを中央に配...
おすすめ情報