Esta es una pregunta de dos partes:
¿Cómo puede colocar el modal verticalmente en el centro cuando no conoce la altura exacta del modal?
¿Es posible tener el modal centrado y tener overflow: auto en el modal-body, pero solo si el modal excede la altura de la pantalla?
He intentado usar esto:
.modal-dialog {
height: 80% !important;
padding-top:10%;
}
.modal-content {
height: 100% !important;
overflow:visible;
}
.modal-body {
height: 80%;
overflow: auto;
}
Esto me da el resultado que necesito cuando el contenido es mucho más grande que el tamaño de pantalla vertical, pero para contenidos modales pequeños es prácticamente inutilizable.
css
twitter-bootstrap
modal-dialog
center
scooterlord
fuente
fuente
Respuestas:
Y ajuste un poco la clase .fade para asegurarse de que aparezca fuera del borde superior de la ventana, en lugar del centro
fuente
1. ¿Cómo puede colocar el modal verticalmente en el centro cuando no conoce la altura exacta del modal?
Para centrar absolutamente el modo Bootstrap 3 sin declarar una altura, primero deberá sobrescribir el CSS de Bootstrap agregando esto a su hoja de estilo:Esto colocará la esquina superior izquierda de los cuadros de diálogo modales en el centro de la ventana.
Tenemos que agregar esta consulta de medios o el margen izquierdo modal es incorrecto en dispositivos pequeños:
Ahora necesitaremos ajustar su posición con JavaScript. Para hacer eso, le damos al elemento un margen negativo superior e izquierdo igual a la mitad de su altura y anchura. En este ejemplo usaremos jQuery ya que está disponible con Bootstrap.
Actualización (01/10/2015):
Añadiendo la respuesta de Finik . Créditos para centrarse en lo desconocido .
Observe el margen negativo derecho? Esto elimina el espacio agregado por inline-block. Ese espacio hace que el modal salte al final de la página @media width <768px.
2. ¿Es posible tener el modal centrado y tener overflow: auto en el modal-body, pero solo si el modal excede la altura de la pantalla?
Esto es posible dando al cuerpo modal un desbordamiento-y: auto y una altura máxima. Esto requiere un poco más de trabajo para que funcione correctamente. Comience agregando esto a su hoja de estilo:Usaremos jQuery nuevamente para obtener la altura de la ventana y establecer primero la altura máxima del contenido modal. Luego tenemos que establecer la altura máxima del cuerpo modal, restando el contenido modal con el encabezado modal y el pie de página modal:
Puede encontrar una demostración funcional aquí con Bootstrap 3.0.3: http://cdpn.io/GwvrJEDIT: recomiendo usar la versión actualizada en su lugar para una solución más receptiva: http://cdpn.io/mKfCcActualización (30/11/2015):
(Actualizado el 30/11/2015 http://cdpn.io/mKfCc con la edición anterior)
fuente
Mi solución
fuente
Simplemente se puede arreglar con
display: flex
Con prefijo
fuente
¡Se me ocurrió una solución CSS pura! Sin embargo, es css3, lo que significa que ie8 o inferior no es compatible, pero aparte de esto, se ha probado y funciona en ios, android, ie9 +, chrome, firefox, safari de escritorio ...
Estoy usando el siguiente CSS:
Aquí hay un violín. http://codepen.io/anon/pen/Hiskj
... seleccionando esto como la respuesta correcta ya que no hay javascript extra pesado que ponga de rodillas al navegador en caso de más de un modales.
fuente
Si está de acuerdo con el uso de flexbox, esto debería ayudar a resolverlo.
fuente
pointer-events: none
a.modal-dialog
ypointer-events: auto
para.modal-content
. Porque.modal-dialog {height: 100%}
cubrimos toda la columna arriba y debajo de un modal y deshabilitamos a los usuarios para que hagan clic en el fondo de esa área.Mi solución:
fuente
Todo lo que hice en mi caso es configurar el Top en mi CSS sabiendo la altura del modal
<div id="myModal" class="modal fade"> ... </div>
en mi css puse
fuente
Agregar este simple CSS también funciona.
fuente
Hay una manera más fácil de hacer esto usando css:
Eso es. Tenga en cuenta que solo es necesario aplicarlo al
.modal-dialog
contenedor div.Demostración: https://jsfiddle.net/darioferrer/0ueu4dmy/
fuente
Ampliando la excelente respuesta de @ Finik, esta solución solo se aplica a dispositivos no móviles. Probé en IE8, Chrome y Firefox 22, funciona con contenido muy largo o corto.
fuente
La solución más universal que escribí. Calcula dinámicamente con la altura del diálogo. (El siguiente paso podría ser volver a calcular la altura de los cuadros de diálogo al cambiar el tamaño de la ventana).
JSfiddle: http://jsfiddle.net/8Fvg9/3/
fuente
Encontré la solución perfecta desde aquí
fuente
fuente
@$modal = $('.fade.in'); modalBox = @$modal.find('.modal-content'); initModalHeight = modalBox.outerHeight(); userScreenHeight = @$modal.outerHeight()
Aquí hay otro método css único que funciona bastante bien y se basa en esto: http://zerosixthree.se/vertical-align-anything-with-just-3-lines-of-css/
hablar con descaro a:
fuente
transform
soluciones, el problema surge cuando el modal tiene contenido desplazable (más contenido del que cabe en la ventana)He descargado bootstrap3-dialog desde el siguiente enlace y he modificado la función de abrir en bootstrap-dialog.js
https://github.com/nakupanda/bootstrap3-dialog
Código
Css
fuente
Esto funciona para mi:
fuente
Intenta algo como esto:
fuente
Es posible que desee consultar esta colección de métodos para centrar absolutamente un div: http://codepen.io/shshaw/full/gEiDt
fuente
Una manera simple Trabaja para mi. Gracias rensdenobel :) http://jsfiddle.net/rensdenobel/sRmLV/13/
fuente
otra solución que establecerá una posición válida para cada modal visible en el
window.resize
evento y enshow.bs.modal
:fuente
fuente
Sé que es un poco tarde, pero estoy agregando una nueva respuesta para que no se pierda entre la multitud. Es una solución de navegador móvil de escritorio cruzado que funciona en todas partes correctamente como debería.
Solo necesita
modal-dialog
estar envuelto dentro de unamodal-dialog-wrap
clase y debe tener las siguientes adiciones de código:El cuadro de diálogo comienza centrado y, en casos de gran contenido, simplemente crece verticalmente hasta que aparece una barra de desplazamiento.
¡Aquí hay un violín de trabajo para tu placer!
https://jsfiddle.net/v6u82mvu/1/
fuente
Esto es bastante antiguo y específicamente pide una solución usando Bootstrap 3, pero para cualquiera que se pregunte: desde Bootstrap 4 en adelante hay una solución incorporada llamada
.modal-dialog-centered
. Aquí está el problema: https://github.com/twbs/bootstrap/issues/23638Entonces, usando v4 solo necesita agregar
.modal-dialog-centered
a.modal-dialog
para centrar verticalmente el modal:fuente
Considere usar el complemento bootstrap-modal que se encuentra aquí: https://github.com/jschr/bootstrap-modal
El complemento centrará todos tus modales
fuente
Para el centrado, no entiendo qué hay con las soluciones demasiado complicadas. bootstrap ya lo centra horizontalmente para usted, por lo que no necesita meterse con esto. Mi solución es establecer un margen superior solo con jQuery.
He usado el evento loaded.bs.modal ya que estoy cargando contenido de forma remota, y usar el evento shown.ba.modal hace que el cálculo de altura sea incorrecto. Por supuesto, puede agregar un evento para cambiar el tamaño de la ventana si necesita que responda de esa manera.
fuente
Una forma muy fácil de lograr este concepto y obtendrá modal siempre en el modelo de su pantalla mediante css como fllow: http://jsfiddle.net/jy0zc2jc/1/
solo tiene que
modal
mostrar la clase como tabla siguiendo css:y
modal-dialog
comodisplay:table-cell
ver ejemplo de trabajo completo en violín dado
fuente
No es tan complicado.
por favor intente esto:
fuente
Use este script simple que centra los modales.
Si lo desea, puede establecer una clase personalizada (por ejemplo: .modal.modal-vcenter en lugar de .modal) para limitar la funcionalidad solo a algunos modales.
Agregue también esta corrección de CSS para el espacio horizontal del modal; mostramos el pergamino en los modales, Bootstrap oculta automáticamente los pergaminos del cuerpo:
fuente
En la forma de planta móvil puede parecer un poco diferente, aquí está mi código.
fuente