2016-04-14 21 views
6

Ecco il semplice esempio da codepen CodepenCome usare puro CSS per controllare altri elementi sotto lo stesso genitore?

Sto cercando di fare un paio di zona che appartengono allo stesso elemento genitore,
e quando mi passa il mouse uno di loro, l'opacità degli altri diminuirà, o qualcosa del genere altro stile che cambia.

Ad esempio, quando si passa il secondo elemento al passaggio del mouse, il primo elemento che ha lo stesso padre cambierà il suo background-color.

uso la parola zona al primo comma, significa che il bambino non deve veramente essere un div, potrebbe essere un li o un p o di altri elementi.
per risolvere questo problema, potrebbe essere qualsiasi tipo di elemento.

html assomiglia a questo:

<!-- html --> 
<div class="parent"> 
    <div class="one"></div> 
    <div class="two"></div> 
    <div class="three"></div> 
    <div class="four"></div> 
</div> 

ho cercato E ~ F regola per risolvere questo problema, e ho già noto che funzionerà solo al primo div, che è il primo figlio di genitore.

tranne javascript, esiste un altro modo per rendere questa funzionalità con puro css?
thx

+0

u vuole cambiare css di tutti gli altri elementi tranne il aleggiava once..or precedente solo? –

+0

È possibile utilizzare il selettore di fratelli "+", per riferimento: https://css-tricks.com/almanac/selectors/a/adjacent-sibling/ –

+0

È possibile selezionare l'elemento precedente tramite CSS. Dovrai usare Javascript per questo. Un'altra opzione che puoi considerare è posizionarli e poi usare la regola hover –

risposta

2

Quando si passa il .parent, cambiare lo stile di tutti i bambini che non sono aleggiavano come pure (pen):

.parent { 
    width: 100px; /** limit the width of the parent, so you can't hover it, without hovering one of the children as well **/ 
    margin:10px; 

    &:hover > div:not(:hover) { /** only change the background of divs you don't hover as well **/ 
    background: red; 
    } 

    div{ 
    width:100px; 
    height:100px; 
    border:1px solid black; 
    } 
} 
+0

Questo è quello che voglio! molte grazie ! – FlyC

+0

Suppongo che si possa usare 'display: inline-block' al padre, invece di dargli una larghezza definita (la larghezza diventa basata sui figli) – Aziz

+0

In effetti. Questa è stata la mia idea iniziale. Tuttavia, non ero chiaro sul tuo layout generale. Puoi anche usare la posizione: assoluta, per gli stessi motivi. –

1

a fare una applicando doppie stati hover:

.parent:hover div { 
 
    opacity:0.5; 
 
} 
 

 
.parent:hover div:hover { 
 
    opacity:1; 
 
} 
 

 
.parent div { 
 
    border:1px dashed #CCC; 
 
    padding:1em; 
 
    margin:1em; 
 
    background:#666; 
 
    color:#FFF; 
 
}
<div class="parent"> 
 
    <div class="one">One</div> 
 
    <div class="two">Two</div> 
 
    <div class="three">Three</div> 
 
    <div class="four">Four</div> 
 
</div>

+0

che è vicino, se l'opacità non diminuirà mentre il mouse non ha toccato l'elemento figlio sarà fantastico. ma gli stati "double hover" mi danno davvero un'idea per risolvere questo problema, grazie! – FlyC

+0

l'opacità non cambia se non si passa il mouse sopra il genitore ... in quale altro modo si desidera questo? – Aziz

+0

l'opacità non cambierà se non al passaggio del mouse sul bambino. una volta che aleggi il bambino, l'opacità dell'altro bambino cambierà. qualcosa del genere ... thx – FlyC

Problemi correlati