<a> es un elemento de línea por lo que no debes poner un elemento de bloque como <div> dentro de él, según normas de la w3c está mal y al estar mal cada navegador lo puede interpretar como mejor hayan pensado sus programadores que tu querías que se comportara.
Por otro lado sobre tu problema ya te han comentado, puedes hacer algo como:
index.html
style.css
Código CSS:
Ver originaldiv.bloque {
position: relative;
cursor: pointer;
background: #HEX;
...
}
div.bloque:hover {
background: #HEX;
box-shadow: ...;
...
}
a.enlace {
display: block;
position: relative;
width: 100%;
height: 100%;
}
span.texto {
position: absolute;
top: #px;
left: #px;
color: #HEX;
...
}
o usar javascript para hacer clickeables tus divs