367 votes

Lors d'un événement de survol CSS, puis-je changer le style d'une autre div ?

Quand je survole une div ou une classe ayant un id de "a", puis-je obtenir le changement de couleur de fond d'une div ou d'une classe avec l'id de "b" ?

0 votes

En utilisant flexbox, vous pouvez survoler d'autres éléments même s'ils (semblent) être placés avant celui survolé dans le DOM. Consultez mon widget de notation en pur CSS.

607voto

thirtydot Points 114021

Oui, vous pouvez le faire, mais seulement si #b est après #a dans le HTML.

Si #b vient immédiatement après #a: http://jsfiddle.net/u7tYE/

#a:hover + #b {
    background: #ccc
}

Div A
Div B

Cela utilise le combinateur de frères adjacents (+).

Si d'autres éléments se trouvent entre #a et #b, vous pouvez utiliser ceci: http://jsfiddle.net/u7tYE/1/

#a:hover ~ #b {
    background: #ccc
}

Div A
autres éléments aléatoires
autres éléments aléatoires
autres éléments aléatoires
Div B

Cela utilise le combinateur de frères généraux (~).

Les deux + et ~ fonctionnent dans tous les navigateurs modernes et IE7+

Si #b est un descendant de #a, vous pouvez simplement utiliser #a:hover #b.

ALTERNATIVE : Vous pouvez utiliser uniquement du CSS pur pour cela en positionnant le deuxième élément avant le premier. Le premier div est le premier dans le balisage, mais positionné à droite ou en dessous du second. Cela fonctionnera comme s'il s'agissait d'un précédent frère.

5 votes

Il convient de noter que le sélecteur de sibling (+) ne fonctionne pas correctement dans IE8 et les versions antérieures.

0 votes

@thirtydot, veuillez ajouter quelques explications sur la manière et la raison pour lesquelles.

0 votes

@Brock Adams: Quelqu'un d'autre a inexplicablement ajouté la balise javascript : stackoverflow.com/posts/6910049/revisions

35voto

Ben Rowe Points 15269

Cela ne peut pas être fait uniquement avec du css. Il s'agit d'un comportement qui affecte le style de la page.

Avec jquery, vous pouvez rapidement implémenter le comportement de votre question :

$(function() {
  $('#a').hover(function() {
    $('#b').css('background-color', 'yellow');
  }, function() {
    // sur mouseout, réinitialiser la couleur de fond
    $('#b').css('background-color', '');
  });
});

10 votes

Oui, c'est possible, bien que seulement dans des situations relativement limitées. Mais cela peut certainement être fait avec CSS.

5 votes

@David oui seulement dans des situations limitées où #b est un enfant ou un frère de #A, etc. L'OP n'a pas précisé la relation entre les deux, donc j'ai supposé que ce n'était pas le cas.

1 votes

En utilisant flexbox, vous pouvez survoler d'autres éléments même s'ils (semblent) être placés avant celui survolé dans le DOM. Consultez mon widget de notation en pur CSS.

10voto

kongr45gpen Points 151

Une solution pure sans jQuery:

Javascript (Head)

function chbg(color) {
    document.getElementById('b').style.backgroundColor = color;
}   

HTML (Body)

Ceci est l'élément a
Ceci est l'élément b

JSFiddle: http://jsfiddle.net/YShs2/

1 votes

Vous n'avez même pas besoin de `onmouseover`. Voir mon widget de notation en CSS pur.

2 votes

@DanDascalescu c'est exactement ce que je cherchais, merci !

1 votes

Comment utiliser cela sur SCSS ?

7voto

Curt Points 42871

L'exemple suivant est basé sur jQuery mais il peut être réalisé en utilisant n'importe quel ensemble d'outils JS ou même du bon vieux JS

$(document).ready(function(){
     $("#a").mouseover(function(){
         $("#b").css("background-color", "red");
     });
});

25 votes

css pas jquery (ou javascript).

1 votes

Jquery est la solution la plus adéquate ici.

7 votes

Ensuite, proposez au moins une explication de pourquoi le CSS est insuffisant, et quelles sont les autres options plus appropriées. Je ne pense pas que proposer simplement une solution jQuery dans la question soit particulièrement utile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X