2013-06-27 20 views
5

div(または他の要素)全体をクリック可能なリンクにしたいことがあります。ここに例があります。CSS全体でdivをクリック可能にする方法

はここで、純粋なCSSを使用してそれを行うには、クロスブラウザの方法です:

HTML: 

<div class="clickable"> 
    <a href="URL_OF_LINK_TARGET"> </a> 
    Rest of div content goes here 
</div> 
CSS: 

div.clickable { /* Containing div must have a position value */ 
    position:relative; 
} 
div.clickable a { 
    position:absolute; 
    width:100%; 
    height:100%; 
    top:0; 
    left:0; 
    text-decoration:none; /* Makes sure the link doesn't get underlined */ 
    z-index:10; /* raises anchor tag above everything else in div */ 
    background-color:white; /*workaround to make clickable in IE */ 
    opacity: 0; /*workaround to make clickable in IE */ 
    filter: alpha(opacity=1); /*workaround to make clickable in IE */ 
} 

まず、含むdivの位置を与えます。そのようにして、リンクに "position:absolute;"を適用すると(次の段落を参照)、それは包含divに対して相対的に位置します。

次に、リンクを完全に配置し、含まれるdivのフルサイズと深さを設定します。リンクのZインデックスは、div内の他のすべての項目の上にあることを確認します。したがって、クリックした場所に関係なく、リンクをクリックしています。

IEは当然のことながら、癖があります。この場合、IEはそのようなリンクをクリック可能にするためにバックグラウンドカラーを必要とするため、背景色(白)を与え、不透明度を0に設定し、IEの独自のフィルタプロパティを使用してIEのみの不透明度を1% 。

最後に、必要なコンテンツをdivに入れてください。 z-indexを使用してコンテンツをレイヤー化する場合は、リンクよりも上位のz-indexを指定しないようにしてください。

+2

ニース。質問はなんですか? – bbill

+1

何が質問ですか? Stackoverflowはフォーラムではない、それは解決策を投稿するのではなく、質問することです。 – MOTIVECODEX

+3

質問と回答の両方を投稿したい場合は、問題ありませんが、それを行う方法は質問を質問として投稿し、回答を回答として投稿することです。自分の答えを正しいものとして受け入れることができます。 FAQには、「自分のプログラミングの質問に尋ねたり答えることはまったくうまくいきます」と述べています(しかし、あなたは質問と答えとして書式を設定することになっています)。 – RichieHindle

答えて

25

リンク内にdivをラップすることができます。有効なHTML5です。

<a href="#"> 
     <div></div> 
</a> 
+3

FWIW: 'A'要素のブロックレベルの要素をラップすると、ブロックレベルの要素を構文エラーとしてラッピングする古くなったエラー修正アルゴリズムが原因で、古い(HTML5以前の)ブラウザで問題が発生する可能性があります。私は正確なバージョン(おそらくIE7/8)を提供することはできませんが、最後に 'A'要素('

...
...
')にブロックレベルの要素(' DL'など)をラップしようとしましたが、ブラウザ間で一貫してスタイルを設定することができるので、 'DL/DT/DD'をリンク内に配置された複数のインライン・タイプの' SPAN'要素に置き換えなければなりませんでした。 –

関連する問題