texto - hover en css
hover en hijo sin efecto de hover en padre (2)
Esta pregunta ya tiene una respuesta aquí:
Así que tengo 2 div
''s están uno en el otro así como esto
<div class="parent">
<div class="child"></div>
</div>
y quiero cambiar el background
de .parent
cuando paso por encima de .parent
.
pero quiero que el background
vuelva a ser normal cuando me .child
sobre .child
.
así, por ejemplo: http://jsfiddle.net/k3Zdt/1/
Cuando me coloco sobre el área azul oscura, quiero que el área azul no tan oscura no se quede tan azul oscura en lugar de cambiar a blanco.
Me gustaría mantener esta estructura <div>
. y no quiero una solución de JavaScript (conozco la solución de JavaScript pero quiero mantenerla en formato CSS puro).
Básicamente, no puedes: ¿Cómo estilizar el elemento padre al mover un elemento secundario?
Pero un truco es usar un elemento hermano: http://jsfiddle.net/k3Zdt/8/
<div class="parent">
<div class="sibling"></div>
<div class="child"></div>
</div>
Puedes engañar a algo;)
Básicamente, use un :before
pseudo-elemento para el div niño, con su mismo tamaño;
cuando se desplaza sobre el div niño, amplíe el :before
pseudo-elemento para cubrir el área del div padre; esto hará que el efecto hover
del padre caiga y luego vuelva al estado original. Una combinación precisa de índice z está involucrada también.
Demostración: http://jsfiddle.net/gFu8h/
CSS Dark Magic (tm)
.parent {
width:100px;
height:100px;
padding:50px;
transition:background-color 1s;
background:#3D6AA2;
position: relative;
z-index: 1;
}
.parent:hover{
background:#FFF;
}
.child {
height:100px;
width:100px;
background:#355E95;
transition:background-color 1s;
position: relative;
}
.child:hover {
background:#000;
}
.child:before{
content: '''';
position: absolute;
top: 0;
bottom: 0;
right: 0;
left: 0;
z-index: -1;
transition:background-color 1s;
}
.child:hover:before{
top: -50px;
bottom: -50px;
left: -50px;
right: -50px;
background:#3D6AA2;
}