Выпадающее окно Bootstrap, обрезанное переполнением: скрытый контейнер, как изменить контейнер? - программирование
Подтвердить что ты не робот

Выпадающее окно Bootstrap, обрезанное переполнением: скрытый контейнер, как изменить контейнер?

Используя bootstrap, у меня есть раскрывающееся меню (s) внутри div с overflow:hidden, которое необходимо для этого. Это привело к тому, что выпадающие окна были обрезаны контейнером.

Мой вопрос, как я могу решить эту проблему отсечения, например. изменить контейнер всех выпадающих списков внутри моего проекта на body, с минимальными затратами?

это пример кода: http://jsfiddle.net/0y3rk8xz/

4b9b3361

Ответ 1

если кто-то заинтересован в том, чтобы обойти это, выпадающий список начальной загрузки имеет событие show.bs.dropdown, которое вы можете использовать для перемещения выпадающего элемента за пределы контейнера overflow:hidden.

$('.dropdown').on('show.bs.dropdown', function() {
  $('body').append($('.dropdown').css({
    position: 'absolute',
    left: $('.dropdown').offset().left,
    top: $('.dropdown').offset().top
  }).detach());
});

также есть событие hidden.bs.dropdown, если вы предпочитаете переместить элемент обратно туда, где он находится после закрытия раскрывающегося списка:

$('.dropdown').on('hidden.bs.dropdown', function() {
  $('.bs-example').append($('.dropdown').css({
    position: false,
    left: false,
    top: false
  }).detach());
});

Вот рабочий пример:

http://jsfiddle.net/qozt42oo/32/

Ответ 2

Измените свойство div на overflow:visible; или установите Position:absolute; на класс .dropdown, например

.bs-example .dropdown{position:absolute;}

См. Рабочий код: http://jsfiddle.net/guruWork/3x1f8ng5/

Ответ 3

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

Вот простой код, который я использовал. Попробуйте, если это поможет.

$('.dropdown-toggle').click(function (){
     dropDownFixPosition($('button'),$('.dropdown-menu'));
 });
 function dropDownFixPosition(button,dropdown){
    var dropDownTop = button.offset().top + button.outerHeight();
    dropdown.css('top', dropDownTop + "px");
    dropdown.css('left', button.offset().left + "px");
  }

Ответ 4

У меня была какая-то проблема с прокруткой с большинством решений в этом и других вопросах, которые я видел на SO. Что сработало для меня, это сделать выпадающее положение inherit:

.dropdown {
  position: inherit;
}

И затем установите позицию dropdown-menu с помощью JavaScript:

$(document).on("show.bs.dropdown", function () {
  var dropdownToggle = $(this).find(".dropdown-toggle");
  var dropdownMenu = $(this).find(".dropdown-menu");
  dropdownMenu.css({
    "top": (dropdownToggle.position().top + dropdownToggle.outerHeight()) + "px",
    "left": dropdownToggle.position().left + "px"
  });
});

Вот рабочий пример: http://jsfiddle.net/ck66ee9q/

Ответ 5

Мое решение состояло в том, чтобы использовать статическое позиционирование в раскрывающемся списке. У меня было выпадающее меню внутри загрузочной таблицы с скрытым переполнением.

<div class="table" style="overflow: hidden;">
  <div class="dropdown" style="position: static;">
    <div class="dropdown-menu">...</div>
  </div>
</div>
Тем не менее, это не сработало с вашей скрипкой. Поэтому я не уверен, что мое решение имеет какое-то отношение к столам начальной загрузки. Независимо, возможно, это даст кому-то новое попробовать.

Ответ 6

Я столкнулся с той же проблемой, когда мне нужно установить overflow:hidden, но при этом выпадающее меню не будет обрезано.

Однако моя ситуация связана с Bootstrap Carousel, поэтому я решил, что действительное решение сделает переполнение видимым только тогда, когда раскрывающийся список открыт, и когда он закрывается, переполнение может вернуться к скрытому. Это решение может работать для других, поэтому я делюсь им.

$('.dropdown-toggle').click(function() {
  var $container = $(this).parent('.carousel-inner');
  $container.css('overflow','visible');
  $(document).one('click', function() {
      $container.css('overflow','');
  });        
});

Обратите внимание: это не проверяет ключ Esc, который используется для закрытия раскрывающегося списка, но в моем случае это не было проблемой. Моя собственная версия использует класс для применения стиля, который некоторые разработчики могут предпочесть вместо изменения встроенного CSS.

Ответ 7

У меня был элемент div с классом panel Bootstrap, содержащим DevExpress ComboBoxes содержащиеся в элементах div с классами Bootstrap col-lg.

У меня была проблема с цветом фона panel или окраской границы цвета в div выше. Чтобы решить эту проблему, я добавил overflow:hidden; к panel но это вызвало отключение выпадающего списка ComboBox. Я добавил style="position: inherit" к тем элементам div на panel содержат ComboBox, и это решило проблему.

<div class="col-sm-12" style="position: inherit">
<div class="col-sm-4" style="position: inherit">
 <dx:aspxComboBox></dx:aspxComboBox>
</div>
</div>

Это решение я нашел здесь.

Ответ 8

У всех предложений, которые были сделаны здесь, есть какие-то недостатки, и я не мог заставить их работать должным образом. Так что я сделал это на основе всех предложений и прекрасно работает для меня.

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

$(document).on("show.bs.dropdown", ".dropdown.my-body-dropdown", function () {

    //original dropdown element
    var thisDropdown = $(this);

    //make a deep clone
    var thisDropdownCopy = thisDropdown.clone(true, true);

    //append to the body with a different class which is my-modified-dropdown here 
    //and open which will make dropdown menu show up
    $("body").append( thisDropdownCopy.addClass("my-modified-dropdown open").css({ "position": "absolute", "left": thisDropdown.offset().left, "top": thisDropdown.offset().top }).detach() );

    //hide the original dropdown element
    $(this).hide();

})
.on("hidden.bs.dropdown", ".dropdown.my-body-dropdown", function() {

    //remove modified dropdowns
    $(".dropdown.my-body-dropdown.my-modified-dropdown").remove();

    //show original dropdowns
    $(".dropdown.my-body-dropdown").show();

});

Ответ 9

Вы также можете попробовать это, заменив yourDivId идентификатором вашего div.

$('.dropdown').on('show.bs.dropdown', function() {
    $('#yourDivId').css('overflow-x', 'visible');
});

$('.dropdown').on('hidden.bs.dropdown', function() {
    $('#yourDivId').css('overflow-x', 'hidden');
});

Ответ 10

Изменение контейнера возможно с помощью jQuery, например. $(".dropdown").insertAfter(".bs-example");

Смотрите этот код, например: https://jsfiddle.net/SolveItSimply/pwmyvsw6/

Я не рекомендую это, поскольку, поскольку вы потеряете какую-либо полезность позиционирования Bootstrap и сохраните выпадающие элементы в порядке, будет беспорядочно.

Вместо этого вы можете использовать overflow:visible вместе со "скрытым" классом в своих интересах, скрывая любой элемент, который переполняется JavaScript. Вот пример: http://jsfiddle.net/SolveItSimply/z14c210x/

Вам нужно будет проверить содержащиеся элементы, когда div будет сначала видимым и всякий раз, когда высота контейнера изменится, что я пытался продемонстрировать в моем примере.

Ответ 11

Я не мог установить контейнер overflow:visible, но вставка

<div class="clearfix" />

ниже блока, содержащего Dropdown, решена проблема для меня.

Ответ 12

Просто измените значение переполнения на visible.