2013-06-27 25 views
5

A volte si desidera trasformare un intero div (o altro elemento) in un collegamento cliccabile. Ecco un esempio.Come rendere un intero div cliccabile con i CSS

Ecco un modo cross-browser per farlo usando CSS puro:

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 */ 
} 

In primo luogo, dare la posizione div contenitore. In questo modo, quando applichiamo "position: absolute;" al link (vedi il prossimo paragrafo) si posizionerà rispetto al div contenente.

Successivamente, posizionare il collegamento in posizione assoluta e le dimensioni e la profondità complete del div contenitore. Lo z-index del link fa sì che sia sopra ogni altra cosa nel div, quindi non importa dove clicchi, stai facendo clic sul link.

IE, naturalmente, ha qualche stranezza. In questo caso, IE richiede un colore di sfondo per tale link per essere cliccabile, quindi gli diamo un colore di sfondo (bianco), impostiamo l'opacità su 0, quindi diamo un'opacità solo IE dell'1% usando la proprietà proprietaria del filtro di IE .

Infine, inserisci il contenuto desiderato nel div. Se hai intenzione di sovrapporre il contenuto usando z-index, assicurati di non dare a nessun elemento uno z-index più alto del link.

+2

Nice. Quale è la domanda? – bbill

+1

Quindi qual è la domanda? Stackoverflow non è un forum, è porre domande, non pubblicare soluzioni. – MOTIVECODEX

+3

Se si desidera pubblicare sia una domanda sia una risposta, va bene, ma il modo per farlo è postare la domanda come una domanda e postare la risposta come risposta. Puoi quindi accettare la tua risposta come corretta. La FAQ dice "È anche perfettamente corretto chiedere e rispondere alla propria domanda di programmazione" (ma ci si aspetta che lo formatti come una domanda e una risposta). – RichieHindle

risposta

25

È possibile racchiudere un div in un collegamento ed è HTML5 valido.

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

FWIW: Il wrapping degli elementi a livello di blocco nell'elemento 'A' può causare problemi in alcuni vecchi browser (pre-HTML5) a causa dei loro obsoleti algoritmi di correzione degli errori che trattano il collegamento di un elemento a livello di blocco come errore di sintassi. Non posso fornire versioni esatte (probabilmente IE7/8), ma l'ultima volta ho provato a racchiudere un elemento a livello di blocco (come 'DL') nell'elemento' A' (come '

...
...
'), non ero in grado di adattarlo in modo coerente attraverso i browser, quindi sono stato costretto a sostituire 'DL/DT/DD' con più elementi' SPAN' inline-by-nature inseriti all'interno di link. –

Problemi correlati