Estoy centrando un DIV dentro de otro DIV usando un flexbox. Piense en una ventana de diálogo que aparece en el centro de la pantalla cuando sea necesario.
Funciona bien, sin embargo, se vería mucho mejor si el espacio arriba y abajo del diálogo no fuera exactamente igual, teniendo el 40% del espacio restante arriba y el 60% debajo del diálogo. Se vuelve complicado porque la altura del diálogo varía con la cantidad de texto dentro.
Entonces, por ejemplo, si la altura del navegador es de 1000 px, y la altura de la ventana de diálogo es de 400 px, quiero que el espacio vertical restante (600 px) sea de 240 px arriba y 360 px debajo del cuadro de diálogo. Podría hacerlo con Javascript, pero tengo curiosidad por saber si hay alguna manera inteligente con CSS. Intenté agregar un margen inferior al #dialogBox DIV, pero eso no funciona cuando la altura del diálogo se acerca a la altura del navegador.
#dialogBoxPanel
{
position:absolute;
display:flex;
align-items:center;
justify-content:center;
left:0px;
top:0px;
width:100%;
height:100%;
}
#dialogBox
{
width:350px;
}
<div id="dialogBoxPanel">
<div id="dialogBox">Text</div>
</div>
Respuestas:
Use el pseudo elemento y la dirección de la columna para simular el espacio en blanco. Simplemente ajuste el
flex-grow
del pseudo elemento para controlar cuánto espacio libre debería ocupar cada uno. Igual flex-grow dará igual espacio:Mostrar fragmento de código
También puedes usar
2
y3
. Simplemente necesitamos mantener la misma proporción:Mostrar fragmento de código
Otra idea es usar el valor superior igual
40%
y rectificar la posición con la traducción (la misma lógica con50%
cuando se centra)fuente
Esta solución utiliza
display: grid
, es una función nueva, así que asegúrese de consultar el soporte del navegador y haga clic aquí para obtener más información.Esta es la línea que controla los espacios superior e inferior:
grid-template-rows: 40fr [content-start] auto [content-end] 60fr;
El contenido del texto del fragmento se puede editar para que verifique que el cuadro se mantenga centrado incluso si la altura cambia.
fuente
4fr auto 6fr
. Lo que tiene funciona pero con algo de desbordamiento ya que 40% + 60% + 1fr siempre será mayor que 100% y está centrado, por lo que el overlow se dividirá en partes iguales desde la parte superior e inferior: jsfiddle.net/cobutn0e/2 . También notará que no es 100% como se esperaba1fr=minmax(auto,1fr)
y en su caso, le corresponderá aauto
ya que no hay espacio libre ya que el 40% + 60% = 100% (es por eso que siempre tendrán desbordamiento)Puede agregar espaciadores divs y establecer el crecimiento flexible con una relación de 4: 6.
fuente
De manera simple usando la posición y el margen, supuse que la altura de su diálogo siempre es el 40% de la altura del navegador.
HTML
fuente