¿Centrar un ‘div’ en el medio de la pantalla, incluso cuando la página se desplaza hacia arriba o hacia abajo?

3 minutos de lectura

avatar de usuario
tania

Tengo en mi página un botón que cuando se hace clic muestra un div (estilo emergente) en el medio de mi pantalla.

Estoy usando el siguiente CSS para centrar el div en medio de la pantalla:

.PopupPanel
{
    border: solid 1px black;
    position: absolute;
    left: 50%;
    top: 50%;
    background-color: white;
    z-index: 100;

    height: 400px;
    margin-top: -200px;

    width: 600px;
    margin-left: -300px;
}

Este CSS funciona bien siempre que la página no se desplace hacia abajo.

Pero, si coloco el botón en la parte inferior de mi página, cuando se hace clic en él, el div se muestra en la parte superior, y el usuario tiene que desplazarse hacia arriba para ver el contenido de la div.

me gustaria saber como mostrar div en el medio de la pantalla, incluso cuando la página se ha desplazado.

  • pregunta pregunta ¿Por qué estás restando margin-top: (200) y margin-left? Siento que este es el medio de la altura y el ancho, pero ¿por qué tenemos que hacer eso para obtener el centro absoluto? ¿No deberían funcionar el 50% izquierdo y el 50% superior?

    – jmoon90

    6 de junio de 2016 a las 0:07

  • @jmoon90 El left: 50%; top: 50% mueve el Esquina superior izquierda del .PopupPanel al centro de la pantalla. Luego lo movemos la mitad del ancho y la altura hacia atrás para centrar su centro. Ver Centrado en css-tricks.com

    – kub1x

    30 de marzo de 2017 a las 10:55

avatar de usuario
braedenp

Cambiar el position atribuir a fixed en vez de absolute.

  • ¿Qué sucede si necesita desplazar el div emergente y es más grande que la pantalla?

    – Barra de dardos

    27 de febrero de 2012 a las 15:32


  • Tenga en cuenta que esta no es la solución más receptiva (pero es una solución perfecta para el problema anterior). Controlar getbootstrap.com/javascript/#modals y mire con sus DevTools para obtener algunas buenas ideas sobre cómo trabajar con sus ventanas emergentes/modales.

    – Cas Bloem

    13 de junio de 2014 a las 9:02


Cambio position:absolute; a position:fixed;

avatar de usuario
chispeante

Cotizar: Me gustaría saber cómo mostrar el div en el medio de la pantalla, ya sea que el usuario se haya desplazado hacia arriba o hacia abajo.

Cambio

position: absolute;

A

position: fixed;

especificaciones W3C para position: absolute y para position: fixed.

avatar de usuario
SequenceDigitale.com

Acabo de encontrar un nuevo truco para centrar un cuadro en el medio de la pantalla aunque no tengas dimensiones fijas. Digamos que le gustaría una caja de 60% de ancho / 60% de alto. La forma de hacerlo centrado es creando 2 cuadros: un cuadro de “contenedor” que se coloca a la izquierda: 50% superior: 50%, y un cuadro de “texto” en el interior con la posición inversa a la izquierda: -50%; arriba :-50%;

Funciona y es compatible con varios navegadores.

Mira el siguiente código, probablemente obtengas una mejor explicación:

jQuery('.close a, .bg', '#message').on('click', function() {
  jQuery('#message').fadeOut();
  return false;
});
html, body {
  min-height: 100%;
}

#message {
  height: 100%;
  left: 0;
  position: fixed;
  top: 0;
  width: 100%;
}

#message .container {
  height: 60%;
  left: 50%;
  position: absolute;
  top: 50%;
  z-index: 10;
  width: 60%;
}

#message .container .text {
  background: #fff;
  height: 100%;
  left: -50%;
  position: absolute;
  top: -50%;
  width: 100%;
}

#message .bg {
  background: rgba(0, 0, 0, 0.5);
  height: 100%;
  left: 0;
  position: absolute;
  top: 0;
  width: 100%;
  z-index: 9;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="message">
  <div class="container">
    <div class="text">
      <h2>Warning</h2>
      <p>The message</p>
      <p class="close"><a href="#">Close Window</a></p>
    </div>
  </div>
  <div class="bg"></div>
</div>

El método correcto es

.PopupPanel
{
    border: solid 1px black;
    position: fixed;
    left: 50%;
    top: 50%;
    background-color: white;
    z-index: 100;
    height: 400px;
    margin-top: -200px;

    width: 600px;
    margin-left: -300px;
}

¿Ha sido útil esta solución?