2012-08-10 19 views
25

código Ejemplo:Bootstrap: en un diálogo modal, ¿cómo hago que el menú desplegable se expanda fuera del cuadro de diálogo?

http://jsfiddle.net/vpg5g/

me gustaría tener el menú que se despliega desde el botón de ampliar las fronteras de la modales. Como puede ver, el estado actual no se puede usar. ¿Hay alguna forma de lograr esto?

+1

¿Por qué no hacer que el diálogo modal más grande? –

+1

La cantidad de elementos en el menú desplegable es dinámica, por lo que tendré que calcular el espacio que necesito. Si hago eso, también podría simplemente escribir los enlaces directamente al diálogo, que no es realmente lo que quiero. – flyx

Respuesta

27

El modal no permite que ningún desbordamiento, lo puede solucionar mediante el uso de:

.modal { overflow: visible; } 
.modal-body { overflow-y: visible; } 

Working demo

Es posible que desee agregar una clase a aplicar dichas normas sólo para los modales que realmente lo necesitan, en caso de que esta solución crea errores.

+1

Si tiene diálogos que tienen contenido que normalmente haría que el diálogo se desplace (en otras palabras, una carga de contenido), entonces el contenido que normalmente se desplazará desbordará el diálogo. – villecoder

+0

@villecoder Puede que tenga que ajustar la altura del modal en algún punto y desencadenar el desplazamiento de la ventana en lugar del desplazamiento dentro del modal. – Sherbrow

+0

@Sherbrow ¿cómo activar el desplazamiento de la ventana? –

3

Si no puede quitar el overflow: auto Usted puede hacer algo como esto

$('.drop-down-inside-modal').on('click' , '.dropdown-toggle', function(event){ 
     var self = $(this); 
     var selfHeight = $(this).parent().height(); 
     var selfWidth = $(this).parent().width(); 
     var selfOffset = $(self).offset(); 
     var selfOffsetRigth = $(document).width() - selfOffset.left - selfWidth; 
     var dropDown = self.parent().find('ul'); 
     $(dropDown).css({position:'fixed', top: selfOffset.top + selfHeight , left: 'auto', right: selfOffsetRigth , width: '160px'}); 
    }); 

    function fixDropdownPosition(){ 
     var openDropdownButton = $('.drop-down-inside-modal.open'); 
     if($(openDropdownButton).length){ 
      var selfHeight = $(openDropdownButton).height(); 
      var selfWidth = $(openDropdownButton).width(); 
      var openDropdownButtonOffset = $(openDropdownButton).offset(); 
      var openDropdownButtonOffsetRigth = $(document).width() - openDropdownButtonOffset.left - selfWidth; 
      var openDropdown = $(openDropdownButton).find('ul'); 
      $(openDropdown).css({position:'fixed', top: openDropdownButtonOffset.top + selfHeight , left: 'auto' , right: openDropdownButtonOffsetRigth, width: '160px'}); 
     }; 
    }; 

    $(".modal-body").unbind("scroll"); 
    $(".modal-body").scroll(function(){ 
     fixDropdownPosition(); 
    }); 

    $(window).resize(function() { 
     fixDropdownPosition(); 
    }); 
+0

¡Gracias por el voto popular! contenta de que alguien encuentre un uso para esto =) – ppollono

+0

Esta es una solución bastante hacky y requiere una gran cantidad de arreglos para ser utilizable, pero en última instancia, fue el único enfoque que hizo el trabajo por nosotros. – minexew

+0

¡Sé que es hacky! pero funciona bien, probablemente podría actualizarlo con un ejemplo en vivo. – ppollono

Cuestiones relacionadas