
メインビジュアルとしてCSSで背景画像として指定したものの中にリンクエリアを作って、そこの部分だけにマウスをもってきた時に、リンク先に飛ぶようにしたいのですが、毎回firefox, IE7,IE6でのmargin, padding,の違いに四苦八苦してます。
大抵は、margin-topを違うブラウザ用にpadding-topにして、*htmlや、*:first-child+html等のハックでカバーしてたりするのですが、今回はそれでもうまくいかず、どなたか教えて頂けたらと質問させて頂きました。
以下CSSのソースです。
#main_visual {
background:url(../img/main_visual.jpg) no-repeat;
width:666px;
height:418px;
text-indent:-9999px;
}
#main_visual a{
display:block;
width:338px;
height:43px;
position:relative;
top:324px;
left:308px;
}
上のように、666 X 418の画像の中に、
上から324px 左から308pxの位置に大きさ338 X 43のリンクエリアをつくリたいのですが、、上記だと、IE7 IE6ではうまくいくみたいですが、
firefoxとsafariだと、positionが全くきかず左上の位置(top:0 left:0)にリンクエリアがきてしまってます。。
どのようにリンクエリアを指定するのが最もスマートな方法なのでしょうか? 毎回悩んでます。。ちなみに、*:first-child+html このIE7用のハックってまだ使えたりするんでしょうか?^^;
No.4ベストアンサー
- 回答日時:
ANo.2です。
お役に立てた様で良かったです。
> あと、htmlのほうは、
> <div id="main_visual"><!--MAIN VISUAL-->
> <a href="https://www.rink.com">ここに文言が入ってます。</a>
> </div><!--MAIN VISUAL-->
>
> これだけのシンプルなもんです。。
そうでしたか。であれば、他の方のご指摘にもありますが、マークアップはulでされた方が妥当でしょうね。
ANo.2でのスタイルを、ulでマークアップする場合はちょっとした変更を加えるだけでOKです。
---------------------------------------------------------------------
【HTML】
---------------------------------------------------------------------
(省略)
<body>
<p>リンクより上のブロック</p>
<ul id="main_visual">
<li><a href="#">ここに文言が入ってます。</a></li>
</ul>
<p>リンクより下のブロック</p>
</body>
(省略)
---------------------------------------------------------------------
【CSS】
---------------------------------------------------------------------
ul#main_visual {←"ul"はなくてもいいです(以下同)
position: relative;
background: url(../img/main_visual.jpg) no-repeat;
width: 666px;
height: 418px;
list-style: none;
margin: 0;
padding: 0;
}
ul#main_visual li {
position: absolute;
top: 324px;
left: 308px;
width: 338px;
height: 43px;
}
ul#main_visual a {
display: block;
width: 100%;
height: 100%;
text-indent: -9999px;
}
---------------------------------------------------------------------
ANo.2からの変更点は:
・#main_visualをulのマークアップに都合がよい様にディフォルトのリストスタイルや余白をリセット
・aをliの子要素とする為、位置決めや縦横サイズはliで指定
・aには親要素の幅と高さを継承させる
だけです。リンクエリアとしている背景画像の部分には当然リンク箇所である事がわかる様な文言が明示されているなり、クリックを誘導する様なボタン的デザインがされているものと想定しています。
この回答への補足
度々ご丁寧にご説明頂き、恐縮です><
ほんと、大変ためになりました!ありがとうございます!!
また、改めてCSSの奥深さというか、楽しさ?wに触れましたよー。
ありがとうございます!
No.3
- 回答日時:
この場合、#main_visuaという、祖先ブロック内でabsolute;で位置指定をすべきです。
その場合、祖先要素はposition:static以外でなければなりません。
また、アクセスビリティ・ユーザビリティの意味でポインターが乗ったときにリンクがあることを明示したほうがよいでしょう。
なお、これは余計かもしれませんが、画面表示のためだけに、わざわざ#main_visualという要素を作られているようですが、HTML/CSSの考え方からは、おかしいです。これは、単なるリンクですから、<ul><li><a href=""></a></li></ul>等とマークアップして、@mediaをスクリーン用に指定しておくと、携帯やサーチエンジン、読み上げブラウザにも問題ありません。
もちろん、スタイルシートを解除しても意味のあるソースになります。
★将来的(XHTML2.0)には、<nl>(Navigation List)という要素が加わるでしょう。
とりあえず、それらを含めてソースを示しておきます。
IEは、bodyやhtmlのmargin/paddingに対して解釈が異なるため、このブロック自体の位置は異なりますが、それは簡単にあわせることが出来ますので省きます。
<!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>Untitled</title>
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css">
<!--
@media screen{
ul#navigation_Link {
position:relative;
background:url(../img/navigation_Link.jpg) no-repeat;
width:666px;
height:418px;
padding:0px;
border: 1px solid red;
}
ul#navigation_Link li{
display:block;
width:338px;
height:43px;
position:absolute;
top:324px;
left:308px;
padding:0px;
border:1px solid green;
}
#navigation_Link li a{
position:relative;
top:-4px;
left:-4px;
display:block;
margin:0px;
border:4px solid transparent;
width:100%;
height:100%;
text-align:center;
text-decoration: none;
}
#navigation_Link li a:visited{
border-style:outset;
border-color:transparent;
}
#navigation_Link li a:hover {
border-style:outset;
border-color:gray;
}
#navigation_Link li a:active {
border-style:inset;
border-color:gray;
}
#navigation_Link li a span{
visibility:hidden;
}
}
-->
</style>
</head>
<body>
<h1>title</h1>
<h2>subTitle</h2>
<ul id="navigation_Link">
<li><a href="./index3.html"><span>トップページへ</span></a></li>
</ul>
</body>
</html>
ORUKAさん!教科書のようなご丁寧なアドバイス!!とってもためになりましたっ!!本当にありがとうございます!
>携帯やサーチエンジン、読み上げブラウザにも問題ありません。
なるほど。。そこまで考慮できて、一人前ですよね。。
今回は純粋にソース以外にもCSSに対して色々考えさせられました、ありがとうございました!
No.2
- 回答日時:
> firefoxとsafariだと、positionが全くきかず左上の位置(top:0 left:0)にリンクエリアがきてしまってます。
。※ちなみに、質問者様が提供されたCSSのソースの"#main_visual a"のプロパティ指定の中に全角スペースが入ってます。もしオリジナルのCSSから”そのまま”コピペされたのだとしたら、Firefox等で挙動がおかしいのはそのせいである可能性が高いです。この位置での全角スペースの記述は認められていませんので、プロパティの解釈が無効になります。
以下はオリジナルには全角スペースが入ってない、単なるコピペの際のミス、という前提で話をしています。
質問者様のソースでそのまま再現しても、Firefox2/3、Safari3共に「(top:0 left:0)にリンクエリアがきてしまって」という状況にはなりませんが(DOCTYPE等が不明ですので、一応HTML4.01 StrictとXML宣言付XHTML1.1の両方のサンプルで試してみましたがいずれも同じでした)?
ただ、リンクエリアが#main_visualのボックスに対し、正確に"top: 324px; left: 308px; width: 338px; height: 43px;"となっているかというと、微妙にずれている様です。それは、ちょっと現在のCSSの指定におかしなところがあるからです。
もしも、#main_visualのボックス(この場合はdivでマークアップしてあると仮定します)の中に、リンクエリア以外の要素も含まれるのであれば、positionやtext-indentを指定するポイントが相応しくないと思います。以下は、その点を考慮し、且つリンクエリアが質問者様ご希望の各環境でも"top: 324px; left: 308px; width: 338px; height: 43px;"で表示される様に修正してみたサンプルです。
---------------------------------------------------------------------
【HTML】
---------------------------------------------------------------------
(省略)
<body>
<div id="main_visual">
<p>リンクエリアより前に記述したブロック</p>
<a href="#">リンクエリア</a>
<p>リンクエリアより後ろに記述したブロック</p>
</div>
</body>
(省略)
---------------------------------------------------------------------
【CSS】
---------------------------------------------------------------------
#main_visual {
position: relative;←追加
background: url(../img/main_visual.jpg) no-repeat;
width: 666px;
height: 418px;
}
#main_visual a {
display: block;
position: absolute;←修正
top: 324px;
left: 308px;
width: 338px;
height: 43px;
text-indent: -9999px;←#main_visualではなくこちらに指定
}
---------------------------------------------------------------------
以上のサンプルで、IE6/7、Firefox2/3、Safari3で問題なくご希望通りの挙動になりますが。
本件程度のものであれば、ハックを駆使せずとも実現できるものと思います。ハックはあくまで最終手段なので…
abrilさん、とってもご丁寧なお答えありがとうございました!!
abrilさんのおかげで解決致しました!!!
全角は、、ハイ、コピペミスです^^;
あと、htmlのほうは、
<div id="main_visual"><!--MAIN VISUAL-->
<a href="https://www.rink.com">
ここに文言が入ってます。
</a>
</div><!--MAIN VISUAL-->
これだけのシンプルなもんです。。
なので、
>リンクエリア以外の要素も含まれるのであれば
入ってない、ことになりますよね?
なるほど、、、
relativeを親ボックスにかけておいて、
子ボックスに、absoluteで指定する。。。
よくよく考えてみれば、確かにそうですよね。。
あー、、、リンクエリア以外の、ボックスレイアウトではたまにこうやってレイアウトしてましたが、そうですよね、、リンクエリアもこうやって作ればクロスブラウザーのためにpaddingやら、marginやらで悩む必要や、ハックを使用する必要はないんですよね。。これからそうしようー!!
(以前、ハックは最終的手段だから、と同じことを言われました^^;)
今回は、本当にためになりました!!!質問させて頂いてよかったです。
本当にありがとうございました!
No.1
- 回答日時:
aは元々inline(block化してるけど)だから上位の text-indent:-9999px; の影響を受けてるだけじゃない?
一旦更にdivで囲ってみるか、文字を消したいなら visibility:hidden で対応してみるとか。
SAYKAさん、お答えありがとうございます。
visibility:hiddenだと、文言だけでなく、背景画像も消えてしまい。。。
text-indentってSEO的にも色々議論がわかれるところですけどね。。色々と研究してみたいと思いますー、ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- JavaScript vertical sliderをautoplayしたい 2 2022/08/25 14:47
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- HTML・CSS スクロールすると追従する画像のコードを書いているのですが、追従する画像の大きさの調節が上手くいきませ 2 2022/04/18 12:52
- オープンソース cssで中央寄せ 1 2023/05/19 06:25
- HTML・CSS img と p を縦中央に配置したいのですがうまくいきません。 2 2023/01/12 14:38
- HTML・CSS 吹き出し 下記の吹き出しのスタイルシートについて 下記のスタイルシートは左側にアイコンがでる使用にな 1 2022/11/12 17:55
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- HTML・CSS 下にスクロールしても、追従するボタンのコードを書いたのですが、ボタンの中の画像が半分しか表示されない 1 2022/04/16 21:31
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
htmlの文字が縦書きになる
-
表示倍率を変えるとレイアウト...
-
テーブル内の画像をマウスオー...
-
余分な縦スクロールバーが出て...
-
Media Queries 4 で 非推奨とな...
-
html/cssでembedとz-indexについて
-
テーブルのセル間に余白が空い...
-
form input テキストを上下中央...
-
widthやheightの数値に単位(px...
-
CSSがなぜかfont-sizeだけ効か...
-
ブログのテンプレート変更について
-
【HTML&CSS】フッター下部の余...
-
imgを含むliの高さが大きくなる...
-
W3Cのソースコードの検証サービ...
-
EXCELでHTMLのタグの入ったセル...
-
CSSでborderの指定を解除する記...
-
CSSの角丸での質問です。 今、C...
-
safariでの横並びリスト(List...
-
Chrome だと、画像が少し下に...
-
CSS:animation開始位置の設定
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
htmlの文字が縦書きになる
-
widthやheightの数値に単位(px...
-
form input テキストを上下中央...
-
余分な縦スクロールバーが出て...
-
画像イメージの上下左右、欲し...
-
CSSがなぜかfont-sizeだけ効か...
-
css初心者 フレックスボックス...
-
divで囲まれたpaddingの指定を...
-
表示倍率を変えるとレイアウト...
-
<div>と<div>の間の10px程の...
-
定義リストに下線をつけたいと...
-
【CSS】ヘッダーの高さが不明の...
-
W3Cのソースコードの検証サービ...
-
背景が下まで表示されないんです。
-
【HTML】【CSS】【Swiper】 元...
-
CSSでボックスのheightが0になる
-
div内に外部のurlを表示させたい
-
指定したborderの一部が表示さ...
-
div領域をウインドウサイズに合...
-
スクロールボックスを中央に配...
おすすめ情報