Bonjour,
je voudrais savoir si c'est possible de faire cet effet :
Est-il possible lorsque l'on survole un élément grâce au hover de mettre l'effet voulu sur un autre élément.
Exemple :

<div id="elementA"></div>
<div id="elementB"></div>

#elementA{opacity:0.5;}

Voilà je voudrais que lorsque que je survole #elementB et bien #elementA a une opacity=1.
Merci de votre aide.
PS: peut être que ce n'est pas la bonne section, en effet je ne sais pas si l'on peut le faire en css brut ou s'il faut du js.
2ème PS: j'ai mis la balise code et des retours de ligne, mais cela ne fonctionne pas. Dsl pour la présentation

11 réponses


stitox
Réponse acceptée

Bonjour,
Avec jQuery par exemple, tu peux faire :

$('#elementA').hover(function(){
    // add a class to Element B
    $('#elementB').addClass('opacityClass');    
},function(){
    // on supprime la classe lorsqu'on sort du rollHover 
    $('#elementB').removeClass('opacityClass');    
});

Plopation,

Je pense qu'en CSS c'est possible mais je ne pense pas avoir la solution après avoir réfléchi.
Par contre en JS ça reste assez basique avec la création d'un évènement avec
**

onMouseOver=

**

zenkiai
Auteur

Merci de ta réponse, je suis une bille en js, je suis allé voir sur le web pour ta fonction.
Mais le soucis c'est que je ne trouve pas le code qui correspond à mon problème.
Tous les exemples que je trouve, ne me conviennent pas, l’événement se fait sur la div où il y a la fonction.
En effet je ne trouve pas d'exemple, qui lorsque tu passes sur une div A c'est la div B qui se modifie.

il est possible ici au survol de l'élément A de modifier l'opacité de l'élément B avec ceci : #elementA:hover +#elementB... pour info c'est un sélecteur d'adjacence directe... il permet ici "d'agir" sur l'élément b qui est situé après l'élément A

sinon pour créer ton effet au survol de l'élément b modifier l'élément A je ne pense pas que se soit possible en css...

zenkiai
Auteur

Merci de votre aide mais je n'y arrive pas. Je vais transférais ce message dans la rubrique javascript. merci

zenkiai
Auteur

Merci Stitox, en effet ton code fonctionne bien.

zenkiai,

est ce que ta structure semble un peu comme ça :

<div class="img">
    <p class="text">Lorum koi</p>
</div>
<div class="img">
    <p class="text">Lorum koi</p>
</div>
<div class="img">
    <p class="text">Lorum koi</p>
</div>

Si oui, tu peux faire genre :

$('.img').hover(function(){
    // le $(this) ici vaudra l'élément Hoveré lol
    $(this).find('.text').addClass('opacityClass'); // ou $('.text',this).addClass('opacityClass');
},function(){
    $(this).find('.text').removeClass('opacityClass'); // ou $('.text',this).removeClass('opacityClass');
});
zenkiai
Auteur

Je te remercie mais j'ai résolu mon soucis avec une attribution d'id pour chaque article du style

id="img<?php echo $v'id']; ?>" et id="text<?php echo $v'id']; ?>"

ensuite j'ai fait un foreach dans mon jquery du style

<?php foreach ($posts as $k => $v): $v = current($v); ?>  
        $('#img<?php echo $v'id']; ?>').hover(function(){
            $('#text<?php echo $v'id']; ?>').addClass('opacityClass');   
        },function(){
            $('#text<?php echo $v'id']; ?>').removeClass('opacityClass');   
        });
        <?php endforeach; ?>

et cela fonctionne bien merci de ton aide !!

oui ça marche ta logique mais ce que je te recommande, c'est de chercher une solution js et pas php sauf par obligation.
sinon ton code deviendra du spaghetti :)

pour ce genre de cas, je pense que tu peux le faire seulement avec du js, pourquoi inclure du js dans la page ?
Enfin ça reste mon opinion :)

A++

zenkiai
Auteur

En faite, je pense que tu as raison, je voulais faire un effet simple en faite au début, mais cet effet est vite devenu problématique pour moi et mon petit niveau en js.
En faite j'ai deux div côte à côte une en float:left, l'autre en float:right. Je voulais juste en passant sur la div en float:right, enlever l'opacity de la div en float:left.
Je pensais cela simple et rapide à faire, et voilà une semaine que je bute dessus rahhhhh.
Ma solution n'ai vraiment pas belle, je le conçois et je m'en doute. Si tu as une solution plus propre, je suis preneur, dans ton ex ta dive text est dans la div img, pas dans mon cas elles sont côte à côte.
Merci de ton aide

En css j'ai ça à te proposer :

CSS

.a{
    width:100px;
    height:100px;
    background-color: #555;
}
.a .b{
    display: block;
    position:relative;
    left:110px;
    width:100px;
    height:100px;
    background-color: #000;
    opacity: 0.5;
}
.a:hover .b{
    opacity: 1;
}

HTML

<div class="a"><div class="b"></div></div>

Tiens un petit aperçu live

http://dabblet.com/gist/2371249