39 votes

Comment régler la hauteur d'un accordéon jQuery UI ?

Dans mon interface utilisateur, j'ai une configuration en accordéon comme ceci :

<div id="object_list">
    <h3>Section 1</h3>
    <div>...content...</div>

    // More sections
</div>

L'accordéon fonctionne correctement lorsqu'il est formé pour la première fois, et il semble bien s'adapter au contenu de chacune des sections. Toutefois, si j'ajoute du contenu supplémentaire dans l'accordéon après l'appel .accordion() (via ajax), la partie intérieure de la section finit par déborder.

Étant donné que l'accordéon est formé avec presque aucun contenu, toutes les divisions internes sont extrêmement petites, et donc le contenu déborde et vous obtenez des accordéons avec des barres de défilement à l'intérieur avec presque aucune zone de visualisation.

J'ai essayé d'ajouter des styles de hauteur minimale à la division object_list et aux divisions de contenu, sans succès. L'ajout de la hauteur minimale aux divisions internes a fonctionné, mais a perturbé les animations de l'accordéon, et l'ajout de la hauteur minimale à la division object_list n'a absolument rien donné.

Comment puis-je obtenir une taille raisonnable des sections de contenu même s'il n'y a pas assez de contenu pour remplir ces sections ?

74voto

Keerigan Points 612

AutoHeight a été déprécié dans 1.9 et supprimé en 1.10 .

Utilisez :

$('#id').accordion({heightStyle: 'content'});

pour dimensionner automatiquement votre div interne.

UPDATE :

Je vois que ce message est encore très actif, alors j'ai décidé de m'assurer que ma réponse est toujours valable. Il semble que cela ne fonctionne plus dans jQuery UI. 1.11 . Il indique que la propriété [content] a été supprimée et qu'il faut utiliser [panel] à la place. L'extrait de code ressemble maintenant à quelque chose comme ceci :

$('#id').accordion({heightStyle: 'panel'});

JE NE L'AI PAS ENCORE TESTÉ, JE VIENS DE LE DÉCOUVRIR, ET JE REVIENDRAI ET ENLÈVERAI CE COMMENTAIRE QUAND J'AURAI LE TEMPS DE LE TESTER

6 votes

Réponse correcte pour les dernières versions, je me demande pourquoi ce n'est pas le comportement par défaut...

0 votes

Je viens de commencer à utiliser ce plugin et cette option a résolu le problème que j'avais avec jqueryUI qui fixait la hauteur du contenu au panneau le plus haut. Merci

0 votes

Dans la version 1.11.4 j'avais encore besoin dans les définitions sous "options" : heightStyle: "content", pour fixer la hauteur standard de 500px. Merci !

35voto

ICodeForCoffee Points 1786

Lorsque vous déclarez la div de contrôle de l'accordéon, vous pouvez définir une hauteur dans la balise de style de la div. Vous pouvez ensuite définir la balise fillSpace : true pour obliger le contrôle accordéon à remplir cet espace div quoi qu'il arrive. Cela signifie que vous pouvez définir la hauteur qui convient le mieux à votre page. Vous pouvez ensuite modifier la hauteur de la division en ajoutant le code suivant

Si vous souhaitez que l'accordéon s'adapte dynamiquement au contenu qu'il contient en fonction des besoins, vous pouvez utiliser l'astuce suivante publié sur le site de jQuery UI .

//getter
var autoHeight = $( ".selector" ).accordion( "option", "autoHeight" );
//setter
$( ".selector" ).accordion( "option", "autoHeight", false );

Cela signifie que lorsque vous sélectionnez une zone contenant beaucoup de texte, l'accordéon la recalcule.

3 votes

Je ne comprends pas vraiment pourquoi autoHeight = false fait que cela fonctionne (il semble que cela devrait se comporter de manière opposée) mais cela a fonctionné. Merci !

0 votes

@ICodeForCoffee J'ai la même question... Où dois-je écrire le code //getter et setter ?

0 votes

@pradnya directement dans la partie javascript de votre accordéon. Il suffit de récupérer l'attribut/option autoHeight et de le mettre à false.

18voto

Ben Coppock Points 369

Extrait de la documentation il semble que tu doives mettre

clearStyle: true

...et aussi

autoHeight: false

Je pense que l'utilisation de clearStyle vous permet d'ajouter du contenu de manière dynamique sans que l'accordéon ne soit gênant.

Alors, essayez ceci...

$( ".selector" ).accordion({ clearStyle: true, autoHeight: false });

15voto

nullability Points 4590

Il semble que toutes les réponses ici utilisent maintenant des options obsolètes.

Avec la dernière version de jQuery UI (1.10.x), vous devez initialiser votre accordéon avec heightStyle: "fill" pour obtenir l'effet escompté

$(".selector").accordion({ heightStyle: "fill" });

Pour en savoir plus, consultez la documentation sur l'API jQuery UI ici : http://api.jqueryui.com/accordion/#option-heightStyle

Si les dimensions de votre page changent de façon dynamique et que vous devez recalculer la taille de votre accordéon, vous devez rafraîchir votre accordéon à l'aide de la commande refresh méthode :

$(".selector").accordion("refresh");

Cette solution est préférable car le resize est désormais obsolète.

0 votes

Celui de @nullability a fonctionné pour moi. L'attribut "heightStyle" est essentiel pour la version 1.10+.

0 votes

La solution "rafraîchir" a résolu mon problème car je chargeais du contenu dans l'accordéon après son initialisation.

4voto

Arun Banik Points 89

Le réglage de la hauteur du DIV fera l'affaire.

$(document).ready(function() {

    $("#accordion").show().accordion({
        autoHeight: false
    });

    $("#accordion div").css({ 'height': 'auto' });
});

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