Поле сортировки пользовательского интерфейса jQuery всегда имеет высоту: 0

#jquery #css #jquery-ui

#jquery #css #jquery-ui

Вопрос:

У меня есть ul, установленный в качестве виджета для сортировки пользовательского интерфейса jQuery: его высота всегда вычисляется равной 0, что приводит к тому, что он не помещается в родительский div. Смотрите скриншот:

Визуализация проблемы

jQuery для построения сортируемого:

     $(function() {
        $("#sortable").sortable({
            stop: function(event, ui) {
                // Code
            }
        });
        $( "#sortable" ).disableSelection();
    });
 

Стиль ul:

     #sortable { 
        list-style-type: none; 
        margin: 0 auto; 
        padding: 0; 
        width: 800px; 
    }
    #sortable li {
        margin: 3px 3px 3px 0;
        padding: 4px;
        float: left;
        width: 100px;
        height: 90px;
        font-size: 4em;
        background: white;
        text-align: center;
    }
 

Ответ №1:

Это связано с тем, что содержимое внутри #sortable находится в плавающем состоянии, что означает, что родительский контейнер #sortable не расширяется для хранения этого содержимого (высота равна нулю, потому что она по существу пуста для родительского элемента). Плавающее содержимое не влияет на другое содержимое вокруг него обычным способом, но добавление переполнения заставляет родительский контейнер распознавать плавающие дочерние элементы как содержащиеся внутри него, и дает ему высоту для размещения (поскольку ему необходимо определить, видны они или нет).

Добавьте overflow: hidden или overflow: auto #sortable , чтобы его высота соответствовала содержимому.

Однако, если вы хотите, чтобы поток страницы был растянут до размеров сортируемого объекта, вам следует добавить clearfix, например, micro clearfix #sortable . Это должно решить проблему с потоком.

Комментарии:

1. Хотя это решает проблему, это приводит к нежелательному поведению пользовательского интерфейса. Можно ли настроить его так, чтобы вся высота страницы была расширена? Это снижает удобство использования, если пользователю приходится прокручивать внутри этого div…

2. Попробуйте вместо этого использовать взлом Gallagher micro clearfix — у него не так много непредвиденных последствий, как overflow часто делают трюки.

3. Трюк с микро-очисткой сработал!! dropbox.com/s/u5yq16tdqgx0omk/… Большое, очень, очень большое вам спасибо!! Если вы дадите мне счет paypal / dwolla, я дам вам чаевые.

Ответ №2:

Добавить overflow:auto в #sortable .

Комментарии:

1. Плавающие дочерние элементы приводят к коллапсу родительского элемента. Добавление правила переполнения восстанавливает ожидаемое поведение.

2. @TheodoreR.Smith Смотрите мой ответ для объяснения

3. Как говорит MDN : «Если очистка плавающих элементов для элемента под ними невозможна, другой подход заключается в ограничении контекста форматирования блока контейнера с плавающими элементами. Мы можем установить для свойства overflow для этого P значение hidden или auto, чтобы заставить его расширяться, чтобы содержать их, но не позволять им выпадать из нижней части »

4. Это работает и является подходящим ответом для людей, которые хотят простоты изменения одного атрибута CSS. Спасибо.