Подтвердить что ты не робот

Как вы можете настроить высоту аккордеона UQuery UI?

В моем пользовательском интерфейсе у меня есть настройка аккордеона:

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

    // More sections
</div>

Аккордеон работает правильно, когда он сначала формируется, и, похоже, он хорошо настраивается для содержимого внутри каждого из разделов. Однако, если я затем добавляю больше контента в аккордеон после вызова .accordion() (через ajax), внутренняя часть раздела заканчивается переполнением.

Поскольку аккордеон формируется практически без содержимого, все внутренние divs чрезвычайно малы, и, таким образом, содержимое переполняется, и вы получаете аккордеоны с полосами прокрутки внутри, почти без области просмотра.

Я попытался добавить стили min-height в div object_list, а div div содержимого - безрезультатно. Добавление min-height к внутреннему типу обработанного, но оно перепутало аккордеонные анимации, и добавление его в object_list div ничего не делало.

Как я могу получить разумный размер из разделов контента, даже если для заполнения этих разделов недостаточно контента?

4b9b3361

Ответ 1

Когда вы объявляете элемент управления аккордеона, вы можете поместить высоту в тег стиля для div. Затем вы можете установить свойство fillSpace: true, чтобы заставить элемент управления аккордеоном заполнить это пространство Div независимо от того, что. Это означает, что вы можете установить высоту в соответствии с тем, что лучше всего подходит для вашей страницы. Затем вы можете изменить высоту div при добавлении кода

Если вы хотите, чтобы аккордеон динамически изменял размер содержимого, содержащегося в нем, вы можете сделать следующий трюк размещенный на веб-сайте jQuery UI.

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

Это означает, что при выборе области с большим количеством текста аккордеон пересчитает ее.

Ответ 2

autoHeight устарел в 1.9 и удален в 1.10.

Использование:

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

чтобы авто размер вашего внутреннего div.

UPDATE:

Я вижу, что это все еще довольно активный пост, поэтому я решил убедиться, что мой ответ по-прежнему действителен. Похоже, что это может больше не работать в пользовательском интерфейсе jQuery 1.11. Он отмечает, что свойство [content] устарело, и вместо этого использовать [панель]. Создание фрагмента кода теперь выглядит примерно так:

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

Я НЕ ИСПЫТАЛ ЭТО, ТОЛЬКО НАЙДЕНЫ, И ВОЗВРАЩАЮТСЯ И УДАЛЯЮТ ДАННЫЙ КОММЕНТАРИЙ, КОГДА Я ИМЕЮТ ВРЕМЯ ИСПЫТАТЬ

Ответ 3

Из документов кажется, что вам нужно установить

clearStyle: true

... а также

autoHeight: false

Я считаю, что использование clearStyle позволяет динамически добавлять контент, не мешая Accordion.

Итак, попробуйте это...

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

Ответ 4

Похоже, что все ответы здесь используют устаревшие параметры.

С последней версией jQuery UI (1.10.x) вы должны инициализировать свой аккордеон с помощью heightStyle: "fill", чтобы получить предполагаемый эффект.

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

Подробнее о документах API jQuery API можно прочитать здесь: http://api.jqueryui.com/accordion/#option-heightStyle

Если ваши параметры страницы изменяются динамически, и вам нужно пересчитать размер аккордеона, вы должны обновить свой аккордеон, используя метод refresh:

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

Это предпочтительнее, поскольку метод resize теперь устарел.

Ответ 5

Настройка высоты DIV сделает трюк.

$(document).ready(function() {

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

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

Ответ 6

В вашем jquery-ui.js найдите следующий раздел и измените heightstyle: "auto" на heightstyle: "content", чтобы обновленный файл выглядел следующим образом.

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
},

Ответ 8

Недавно я настроил аккордеон, который извлекает содержимое через ajax при активации вкладки и сталкивается с той же проблемой. Я попытался использовать некоторые из предложений, размещенных здесь, но они никогда не поднимали панель правильно, пока я не установил heightStyle в контент.

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

Я использую jQuery-UI версии 1.10.4.

Ответ 9

чтобы я выполнял точно выполненную работу.

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

});