Pregunta ¿Cómo centrar el elemento absolutamente posicionado en div?


Necesito colocar un div (con position:absolute;) elemento en el centro de mi ventana. Pero estoy teniendo problemas para hacerlo, porque el ancho es desconocido.

Intenté esto. Pero debe ajustarse ya que el ancho es sensible.

.center {
  left: 50%;
  bottom:5px;
}

¿Algunas ideas?


867
2017-11-21 21:56


origen


Respuestas:


<body>
  <div style="position: absolute; left: 50%;">
    <div style="position: relative; left: -50%; border: dotted red 1px;">
      I am some centered shrink-to-fit content! <br />
      tum te tum
    </div>
  </div>
</body>


1164
2017-11-22 00:21



Esto funciona para mí:

#content {
  position: absolute; 
  left: 0; 
  right: 0; 
  margin-left: auto; 
  margin-right: auto; 
  width: 100px; /* Need a specific value to work */
}
<body>
  <div>
    <div id="content">
      I'm the content
    </div>
  </div>
</body>


1633
2017-11-25 20:07



Solución receptiva

Aquí hay una buena solución para un diseño receptivo o dimensiones desconocidas en general si no necesitas soportar IE8 e inferior.

.centered-axis-x {
    position: absolute;
    left: 50%;
    transform: translate(-50%, 0);
}

.outer {
    position: relative; /* or absolute */
    
    /* unnecessary styling properties */
    margin: 5%;
    width: 80%;
    height: 500px;
    border: 1px solid red;
}

.inner {
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
    
    /* unnecessary styling properties */
    max-width: 50%;
    text-align: center;
    border: 1px solid blue;
}
<div class="outer">
    <div class="inner">I'm always centered<br/>doesn't matter how much text, height or width i have.<br/>The dimensions or my parent are irrelevant as well</div>
</div>

Aquí hay un JS Fiddle

La clave es que left: 50% es relativo al padre mientras el translate la transformación es relativa a los elementos ancho / alto.

De esta forma, tiene un elemento perfectamente centrado, con un ancho flexible tanto para el hijo como para el padre. Bonificación: esto funciona incluso si el niño es más grande que el padre.

También puede centrarlo verticalmente con esto (y de nuevo, el ancho y la altura del padre y el hijo pueden ser totalmente flexibles (y / o desconocidos)):

.centered-axis-xy {
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%,-50%);
}

Tenga en cuenta que puede necesitar transform el proveedor también tiene un prefijo. Por ejemplo -webkit-transform: translate(-50%,-50%);


552
2018-04-30 09:54



Muy buena publicación .. Solo quería agregar si alguien quiere hacerlo con una sola etiqueta div, aquí está la salida:

Tomando width como 900px.

#styleName {
    position: absolute;
    left: 50%;
    width: 900px;
    margin-left: -450px;
}

En este caso uno debe saber el width antemano.


45
2017-08-31 09:56



Centro Absoluto 

HTML:

<div class="parent">
  <div class="child">
    <!-- content -->
  </div>
</div>

CSS: 

.parent {
  position: relative;
}

.child {
  position: absolute;

  top: 0;
  right: 0;
  bottom: 0;
  left: 0;

  margin: auto;
}

Manifestación: http://jsbin.com/rexuk/2/

Probado en Google Chrome, Firefox e IE8

Espero que esto ayude :)


30
2018-01-30 02:29



este trabajo para vertical y horizontal

  #myContent{
        position: absolute;
        left: 0;
        right: 0;
        top:0;
        bottom:0;
        margin: auto;
   }

y si desea hacer que el elemento sea el centro del elemento principal, establezca la posición del pariente

 #parentElement{
      position:relative
  }

editar:

  • para el centro vertical, alinee la altura del conjunto con su elemento. gracias a @Raul

  • si quiere hacer el elemento centro de la matriz, establezca la posición del padre en relación


28
2017-12-07 09:26



Buscando una solución obtuve las respuestas anteriores y podría hacer contenido centrado en Matthias Weiler responde pero usa text-align.

#content{
  position:absolute;
  left:0;
  right:0;
  text-align: center;
}

Trabajó con Chrome y Firefox.


17
2018-05-29 01:36



Hasta donde yo sé, esto es imposible de lograr para un ancho desconocido.

Podría - si eso funciona en su escenario - posicionar un elemento invisible con 100% de ancho y alto, y tener el elemento centrado allí usando margin: auto y posiblemente vertical-align. De lo contrario, necesitarás Javascript para hacer eso.


9
2017-11-21 22:00