2010-05-15 21 views
35

En mi interfaz de usuario que tienen una configuración de acordeón como esto:¿Cómo se puede ajustar la altura de un acordeón jQuery UI?

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

    // More sections 
</div> 

El acordeón funciona correctamente cuando se formó por primera vez, y parece ajustarse bien para el contenido dentro de cada una de las secciones. Sin embargo, si luego agrego más contenido en el acordeón después de la llamada .accordion() (a través de ajax), el interior de la sección termina desbordando.

Dado que el acordeón se está formando casi sin contenido, todos los divs internos son extremadamente pequeños, y por lo tanto el contenido se desborda y se obtiene acordeones con barras de desplazamiento dentro con casi ningún área de visualización.

He intentado agregar estilos min-height a la div object_list, y el contenido divs en vano. Agregar el min-height al divs interno funcionó, pero estropeó las animaciones del acordeón, y al agregarlo al object_list div no hizo absolutamente nada.

¿Cómo puedo obtener un tamaño razonable de las secciones de contenido incluso cuando no hay suficiente contenido para llenar esas secciones?

Respuesta

34

Cuando declara el div de control de acordeón, puede poner un alto en la etiqueta de estilo para el div. A continuación, puede configurar fillSpace: verdadero propiedad para forzar el control del acordeón para llenar ese espacio div sin importar nada. Esto significa que puede establecer la altura de lo que mejor funcione para su página. A continuación, puede cambiar la altura del div al agregar el código

Si desea que el acordeón cambie el tamaño dinámicamente del contenido que contiene según sea necesario, puede realizar el siguiente truco posted on the jQuery UI website.

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

Esto significa que cuando seleccione un área con mucho texto, el acordeón lo volverá a calcular.

+3

Realmente no entiendo por qué autoHeight = false lo hace funcionar (parece que debería comportarse de manera opuesta) pero funcionó. ¡Aclamaciones! – KallDrexx

+0

@ICodeForCoffee Tengo la misma consulta ... ¿dónde debo escribir // getter y setter code –

+0

@pradnya directamente en la parte javascript de su acordeón. Acabas de obtener el atributo/opción autoHeight y lo configuras como falso. –

0

Simplemente llame al método acordeones .resize(), esto recalculará su tamaño. http://docs.jquery.com/UI/Accordion#method-resize

+0

Aún debe configurar fillSpace: true y cambiar la altura del contenedor para que el trabajo .resize() funcione. – ICodeForCoffee

+1

Gracias, esto funcionó para mí, pero necesitaba usar '.accordion (" resize ")' en lugar de '.resize()' – Rachel

+0

Tenga en cuenta que este método estaba [obsoleto en 1.9] (http://jqueryui.com/upgrade -guide/1.9/# deprecated-resize-method-renamed-to-refresh) y ha sido [eliminado en 1.10] (http://jqueryui.com/upgrade-guide/1.10/#removed-resize-method-use- refrescar). Ahora debería usar '.accordion (" refresh ")' en su lugar. – nullability

18

From the docs parece que usted tendrá que establecer

... y también

autoHeight: false 

creo que el uso de clearStyle le permite añadir de forma dinámica contenido sin acordeón en el camino .

Así que trate de esto ...

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

¡esta funcionó para mí! :) –

+0

funcionó como un campeón –

+0

funcionó muy bien. Gracias. – Mythul

15

Parece que todas las respuestas aquí ahora están utilizando las opciones obsoletas.

Con la última versión de jQuery UI (1.10.x), debe inicializar su acordeón con heightStyle: "fill" para obtener el efecto deseado.

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

Usted puede leer más en los documentos de la API jQuery UI aquí: http://api.jqueryui.com/accordion/#option-heightStyle

Si las dimensiones de la página cambian de forma dinámica y hay que volver a calcular el tamaño de su acordeón, debe actualizar su acordeón utilizando el método refresh:

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

Esto se prefiere porque el método resize ahora está en desuso.

+0

La solución de "actualización" resolvió mi problema ya que estaba cargando contenido en el acordeón después de que se había inicializado. – jyoseph

+0

@ nullability funcionó para mí. El atributo "heightStyle" es clave para v1.10 + – Andrew

62

autoHeight está en desuso en 1.9, y eliminado en 1.10.

Uso:

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

para auto tamaño de su div interior.

ACTUALIZACIÓN:

veo que esto sigue siendo todo un puesto activo, por lo que decidí asegurarme de que mi respuesta sigue siendo válida. Parece que esto ya no funciona en jQuery UI 1.11. Toma nota de que la propiedad [content] ha quedado en desuso, y de usar [panel] en su lugar. Haciendo que el fragmento de código ahora mira algo más parecido a esto:

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

que aún no hemos comprobado esto, sólo ENCONTRADO, y volverá a eliminar este comentario cuando tengo tiempo para probar

+5

respuesta correcta para las últimas versiones, me pregunto por qué este no es el comportamiento predeterminado ... – redaxmedia

+0

Acabo de empezar a usar este complemento y esta opción solucionó el problema que estaba teniendo con jqueryUI establece la altura del contenido en el panel más alto. Gracias – AntonioCS

+0

en la versión 1.11.4 Todavía necesitaba las definiciones en "opciones": 'heightStyle:" content ",' para arreglar la altura estándar 500px. ¡Gracias! – Silvan

4

Ajuste de la década de los DIV la altura hará el truco.

$(document).ready(function() { 

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

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

Recientemente he creado un acordeón que recupera el contenido a través de AJAX cuando una ficha se activa y se encontró con el mismo problema. Intenté usar algunas de las sugerencias publicadas aquí, pero nunca crecieron el panel correctamente hasta que configuré heightStyle para el contenido.

$("#myaccordion").accordion({ 
    heightStyle: "content", 
    activate: function(event ui) { 
    //use ajax to retrieve content here. 
    } 
}); 

Estoy usando jQuery-UI versión 1.10.4.

0

para mí haciendo lo siguiente trabajado con precisión.

$("#accordion").accordion({ 
    autoHeight: false, 

});

1

En su búsqueda jquery-ui.js para la siguiente sección y cambie heightstyle: "auto" a heightstyle: "content" para que el archivo actualizado se vea así.

var accordion = $.widget("ui.accordion", { 
    version: "1.11.4", 
    options: { 
    active: 0, 
    animate: {}, 
    collapsible: false, 
    event: "click", 
    header: "> li > :first-child,> :not(li):even", 
    heightStyle: "content", 
    icons: { 
     activeHeader: "ui-icon-triangle-1-s", 
     header: "ui-icon-triangle-1-e" 
    }, 

    // callbacks 
    activate: null, 
    beforeActivate: null 
}, 
0

Apagado automático funcionará ... (con cualquier cadena, además de automóviles o de relleno), tales como la solución decirle a utilizar "panel". Pero ...

Eso es lo mismo que poner cualquier cadena de basura para "heightStyle". El "heightStyle" que está buscando es "content".

(valores para la opción "heightStyle" en jQuery UI 1,12)

  • "auto": Todos los paneles se ajustará a la altura de los más altos panel.
  • "fill": amplía a la altura disponible en función de la altura principal del acordeón.
  • "content": Cada panel tendrá la misma altura que su contenido.

Ejemplo: https://jsfiddle.net/qkxyodpq/5/

Espero que ayude.

Cuestiones relacionadas