Je n'étais pas sûr si cela est possible ou non. Je travaille actuellement dans des animations CSS3 et je dois survoler un lien qui affectera un autre élément div (non-enfant) de la page. Je n'étais pas sûr s'il y avait un travail autour ou pas.
<style type="text/css">
#header {
background-color:red;
}
#header:hover .element {
background-color:blue;
}
.element {
background-color:green;
}
</style>
-
<header id="header">
<li><a href="#">Hover</a></li>
</header>
<div class="element" >
<p>hello world </p>
</div>
Comme il s'agit de frères et soeurs adjacents, vous pouvez utiliser le sélecteur frère/soeur adjacent : +
.
#header:hover + .element {
background-color:blue;
}
Ceci est bien pris en charge dans la plupart des navigateurs modernes *. IE7 peut être buggé. IE6 et inférieur ne le supporte pas.
* Une des autres réponses mentionne le sélecteur de frères et sœurs général, qui ne fonctionne pas dans Webkit lorsqu'il est utilisé avec une pseudo-classe dynamique telle que :hover
en raison de ce bogue . Notez que ce même bogue causera des problèmes dans Webkit si vous essayez d'empiler des sélecteurs frères adjacents avec une pseudo-classe dynamique. Par exemple, #this:hover + sibling + sibling
ne fonctionnera pas dans Webkit.
Il y a le sélecteur général de frères et soeurs _ (~
) qui sélectionne les éléments frères.
Ainsi, avec le code HTML que vous avez publié, #header:hover ~ .element
sélectionnerait <div class="element">
lorsqu’il est un frère ultérieur de l’en-tête survolé.
Même IE 7 le supporte }, vous êtes donc sur un terrain relativement solide.
En ce qui concerne le bug du kit de sélection de frères et soeurs, cet article propose une solution de contournement css:
Citant:
body { -webkit-animation: bugfix infinite 1s; }
@-webkit-keyframes bugfix { from { padding: 0; } to { padding: 0; } }
Ci-dessus crée une animation sur la page et cela semble résoudre le problème comme par magie. Ce qui précède peut être ajouté directement au fichier css principal ou à une feuille de style de création de kit Web uniquement pour accompagner votre hacks.
Je recommanderais à la feuille de style Webkit uniquement quelque chose comme:
<link rel="stylesheet" media="only screen and (-webkit-min-device-pixel-ratio:0)" href="webkit.css"/>
car il le cache des autres navigateurs et peut être plus facilement supprimé à l'avenir une fois le bogue corrigé.
Malheureusement, cela ne fonctionnera que si votre classe .element est comprise dans l'élément .bgchange. C'est la nature de la cascade: vous ne pouvez pas (via CSS uniquement) affecter des éléments DOM qui sont structurellement/hiérarchiquement séparés les uns des autres.