Changer l'enfant de l'élément CSS lorsque le parent est planait
Tout d'abord, je suppose que c'est trop complexe pour CSS3, mais si il y a une solution, quelque part, j'aimerais aller à la place.
Le HTML est assez simple.
<div class="parent">
<div class="child">
Text Block 1
</div>
</div>
<div class="parent">
<div class="child">
Text Block 2
</div>
</div>
L'enfant div est fixé à display:none; par défaut, mais alors display:block; lorsque la souris survole le div parent. Le problème est que cette balise apparaît à plusieurs endroits sur mon site, et je veux seulement que l'enfant sera affiché que si la souris est au-dessus de la mère, et non pas si la souris est au-dessus de tout les autres parents (ils ont tous le même nom de classe et aucune Id).
J'ai essayé d'utiliser $(this)
et .children()
en vain.
$('.parent').hover(function(){
$(this).children('.child').css("display","block");
}, function() {
$(this).children('.child').css("display","none");
});
Vous devez vous connecter pour publier un commentaire.
Pourquoi ne pas simplement utiliser le CSS?
puis ajouter JS pour IE6 (à l'intérieur d'un commentaire conditionnel, par exemple) qui ne prend pas en charge :placez correctement:
Voici un exemple rapide: Violon
:hover
est celui de la "Dynamique des pseudo-classes", définies par le CSS2 (voici les spec). Voici un petit exemple: http://jsfiddle.net/5FLr4/. il fonctionne pour moi..parent:not(:hover) .child { display: none; }
semble bien fonctionner pour moi, si je ne suis pas inquiet sur IE6. Mais de cette façon, je peux l'utiliser sur des éléments que je ne veux pas avoir un uniformedisplay
de la propriété.Pas besoin d'utiliser le JavaScript ou jquery, CSS est assez:
VOIR DÉMO
Utilisation
toggleClass()
.où
color
est la classe. Vous pouvez définir le style de la classe que vous le souhaitez pour obtenir le comportement que vous souhaitez. L'exemple montre comment la classe est ajouté et retiré à la souris dans et hors.Vérifier exemple de Travail ici.
J'ai ce que je pense est une meilleure solution, car il est adaptable à plusieurs niveaux, autant que voulu, pas seulement deux ou trois.
- Je utiliser des frontières, mais il peut également être fait avec whateever style voulu, comme couleur d'arrière-plan.
Avec la frontière, l'idée est de:
Vous pouvez le tester à: http://jsbin.com/ubiyo3/13
Et voici le code:
Stephen réponse est correct, mais voici mon adaptation de sa réponse:
HTML
CSS
jQuery
Vous pouvez voir cet exemple travail sur à jsFiddle.
Si vous utilisez Twitter Bootstrap style et de la base de JS pour un menu déroulant:
C'est la pièce manquante pour créer collant-des listes déroulantes (qui ne sont pas ennuyeux)
Ne sais pas si c'est terrible de raisons de le faire ou pas, mais il semble pour travailler avec moi sur la dernière version de Chrome/Firefox sans aucun visibles des problèmes de performances avec pas mal d'éléments sur la page.
Mais de cette façon, vous n'avez besoin que d'appliquer
parent-hover-show
à un élément et le reste est pris en charge, et vous pouvez garder ce que par défaut le type d'affichage que vous voulez sans être toujours "à bloc" ou de faire plusieurs classes pour chaque type.De changer de css, vous n'avez même pas besoin de mettre l'enfant en classe