ma cible slideToggle () div doit être display:inline-block
au lieu de display:block
quand il est ouvert. Y a-t-il un moyen de changer le comportement jquery ici?
Éditer:
j'utilise jQuery 1.7.0 pour le moment. Également <div>
est initialement à display:none
et devrait s'étendre à display:inline-block
après un clic sur un lien; mais apparemment, l'état par défaut de slideToggle () dans cette situation est display:block
...
Un petit oiseau m'a dit ...
$('#my-block').slideToggle('medium', function() {
if ($(this).is(':visible'))
$(this).css('display','inline-block');
});
Essayez simplement de masquer votre bloc via des scripts (dont display:none
via les styles)
HTML
<div class="ib">inline-block</div> <a href="#" class="toggle">toggle this</a>
CSS
.ib{
display:inline-block;
background:red;
}
Javascript
$(".ib").hide();
$(".toggle").bind("click", function(){
$(".ib").slideToggle();
return false;
})
J'avais besoin de l'affichage : flex pour réorganiser les éléments avec la propriété order . Passer à l'affichage : flex a fonctionné mais il a fallu attendre la fin de l'animation pour réorganiser les éléments, donc il y a eu un moment où tout semblait clairement désordonné.
Qu'est-ce que l'astuce pour moi a été d'utiliser l'option de démarrage ( voir doc ):
$("your-selector").slideToggle({
duration: 200,
easing: "easeOutQuad",
start: function() {
jQuery(this).css('display','flex');
}
});
Si vous voyez un "Flash de contenu non stylisé" indésirable, vous pouvez également utiliser un style en ligne. La sagesse habituelle de "ne pas mettre de style en ligne" est vraiment destinée à votre style principal, pas aux effets visuels (les effets JS ajoutent tous des styles en ligne après tout).
Bien sûr, le contenu ne sera pas vu par les araignées des moteurs de recherche désactivés JS, si cela est important. Si ce n'est pas important, c'est bon!
Mise à jour du violon de @ fliptheweb: http://jsfiddle.net/GregP/pqrdS/3/
Êtes-vous sur une ancienne version de jQuery? Cela aurait déjà dû être corrigé, voir la discussion ici: