要素(div)の重なり。〜リンク<A>タグの有効範囲?〜[PC関係]
(2009-06-10 21:21:04) by くろひつじ


ベネフィットホームページのソースを表示してみてもらうとわかると思うけれど、だいたい50行目くらいかな〜?
同じリンクの同じ画像が2つあります。

このバナーの画像はheader要素のバックグラウンドとして表示されているのですが、この画像の一部、つまり「BENEFIT」の部分だけにindexページへのリンクを入れる場合、僕がする方法は(まぁ古いか新しいか、はたまた良いのか悪いのか知りませんが)透過率100%の透明のgif画像を絶対配置などでリンクしたい場所に置き、その画像にリンクを貼るというもの。

いつもならわざわざ二枚画像を設置する事など必要ないのですが、今回はこうしなければこの方法を使ってリンクをさせる事ができなさそうだったからなんですね。
というのは背景の「BENEFIT」の文字がheader要素(div id="header")とheader-inner要素(div id="header-inner")の二つの要素の範囲にまたがっていたからなんです。

最初はheaderだけに画像とリンクを設置してやってみたのですが(位置を合わせるために最初は完全に透明ではなく白い画像で位置を確かめながら設置した)画像は間違いなく表示されているけど、リンクがなぜか「B」の部分にしか効かない。
なんだこりゃ?と思い、ためしに今度はheader-innerだけに画像とリンクを設置。
やはり同じように画像はちゃんと表示されているけど、今度は「ENEFIT」の部分にしかリンクが効かない。
これはとても単純で簡単なことなんですが、一人でやっていてはまるとなかなか単純なことでも気がつかなかったりして無駄に時間を使ってしまったりするんですが。
そうするに例えるならば、大きな透明な入れ物とそれより小さな透明な入れ物があるとします。
まぁ料理用のガラスのボウルとかを想像していただければいいかな?
大きい入れ物を「header要素」小さい入れ物を「header-inner要素」としてバナー画像はheader要素のバックグラウンドとして設定してあるので、たとえとしては大きい入れ物の外側にプリントされた柄を内側から見ているような感じですかね?
で、その柄の一部にリンクを貼る画像を設置しますね。
たとえるならばまぁ何かしら食材なんかをボウルに入れる感じ?
最初に僕がしたのは大きい入れ物に食材をいれて、その上に小さい入れ物を重ねた状態。
入れ物はどっちも透明なので、大きい入れ物の柄の上に食材があるのがそのまま見えます。
だけど、もし箸でその食材を取ろうとしても大きい入れ物と小さい入れ物の隙間からしか食材に触ることができません。
この箸で触るという事がリンク<a>ということと考えてみてください。
次に僕がしたのは大きい入れ物には何もいれず小さい入れ物を重ねて、その小さい入れ物に食材を入れた状態。
小さい入れ物の中では箸は触れられますが、大きい入れ物(入れ物と入れ物の隙間)からは食材に触れる事ができません。
見た目では同じように食材が入っていても、箸で触れるようにするには二つの入れ物にそれぞれ食材
、つまりリンク付き画像を設置しなければならないという。

非常に当たり前のことなんですが、リンクタグ(<a>)などはそれを記述した同じ要素(div)内にしか効かないということです。
それに対して見た目というのは透けたりするのでリンクの範囲と同じとは限らないという事ですね。
というわけで今回は2枚画像をいれて(それぞれ同じように重なっているので見た目は一枚ですが)それぞれでリンクをさせるという処理をしたというわけ。

<画像:ヘッダーの画像リンクについて>

下は実際の状態、透明のgif画像は見た目は一枚ですが2枚あります。

<画像:divの重なりについて>

まぁこんなメンドクサイ事をしなくても、普通ならheaderのバックグラウンドには「BENEFIT」のロゴを除いた柄だけを指定して、header-innerに「BENEFIT」ロゴの画像を入れ、その画像にindexページへのリンクをすればいいと思います。(その場合「BENEFIT」の位置がもっと右、上の画像での緑の線から右に表示されることになります)
コメント投稿
次の記事へ >
< 前の記事へ
TOPへ戻る

Powered by
MT4i 3.0.8