html vertical dentro - ¿Cómo centrar horizontalmente un <div>?





15 Answers

Si no desea establecer un ancho fijo en la div interna, podría hacer algo como esto:

#outer {
  width: 100%;
  text-align: center;
}

#inner {
  display: inline-block;
}
<div id="outer">  
    <div id="inner">Foo foo</div>
</div>

Eso convierte a la div interna en un elemento en línea que puede centrarse con text-align .

otro verticalmente css

¿Cómo puedo centrar horizontalmente un <div> dentro de otro <div> usando CSS?

<div id="outer">  
  <div id="inner">Foo foo</div>
</div>



Supongamos que tu div es de 200px ancho:

.centered {
  position: absolute;
  left: 50%;
  margin-left: -100px;
}

Asegúrese de que el elemento padre esté positioned es decir, relativo, fijo, absoluto o pegajoso.

Si no sabes el ancho de tu div, puedes usar transform:translateX(-50%); En lugar del margen negativo.

https://jsfiddle.net/gjvfxxdj/




Algunos carteles han mencionado la forma de centrar CSS 3 usando display:box .

Esta sintaxis está desactualizada y no debe usarse más. [Véase también este post] .

Así que, para completar, aquí está la última forma de centrarse en CSS 3 utilizando el Módulo de diseño de caja flexible .

Así que si tienes un marcado simple como:

<div class="box">
  <div class="item1">A</div>
  <div class="item2">B</div>
  <div class="item3">C</div>
</div>

... y desea centrar sus elementos dentro del cuadro, esto es lo que necesita en el elemento primario (.box):

.box {
    display: flex;
    flex-wrap: wrap; /* Optional. only if you want the items to wrap */
    justify-content: center; /* For horizontal alignment */
    align-items: center; /* For vertical alignment */
}

.box {
  display: flex;
  flex-wrap: wrap;
  /* Optional. only if you want the items to wrap */
  justify-content: center;
  /* For horizontal alignment */
  align-items: center;
  /* For vertical alignment */
}
* {
  margin: 0;
  padding: 0;
}
html,
body {
  height: 100%;
}
.box {
  height: 200px;
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: center;
  border: 2px solid tomato;
}
.box div {
  margin: 0 10px;
  width: 100px;
}
.item1 {
  height: 50px;
  background: pink;
}
.item2 {
  background: brown;
  height: 100px;
}
.item3 {
  height: 150px;
  background: orange;
}
<div class="box">
  <div class="item1">A</div>
  <div class="item2">B</div>
  <div class="item3">C</div>
</div>

Si necesita admitir navegadores más antiguos que usan sintaxis anterior para flexbox, here's un buen lugar para buscar.







Centrando un div de altura y anchura desconocidas.

Horizontal y verticalmente. Funciona con navegadores razonablemente modernos (Firefox, Safari / WebKit, Chrome, Internet Explorer 10, Opera, etc.)

.content {
  position: absolute;
  left: 50%;
  top: 50%;
  -webkit-transform: translate(-50%, -50%);
  transform: translate(-50%, -50%);
}
<div class="content">This works with any content</div>

Tinker con él más adelante en Codepen o en JSBin .




Hace poco tuve que centrar un div "oculto" (es decir, mostrar: ninguno;) que tenía una forma de tabla dentro que necesitaba estar centrado en la página. Escribí el siguiente jQuery para mostrar el div oculto y luego actualicé el CSS al ancho generado automáticamente de la tabla y cambié el margen para centrarlo. (La alternancia de visualización se activa al hacer clic en un enlace, pero este código no era necesario mostrar).

NOTA: Estoy compartiendo este código porque Google me trajo a esta solución de desbordamiento de pila y todo hubiera funcionado, excepto que los elementos ocultos no tienen ningún ancho y no se pueden redimensionar / centrar hasta después de que se muestren.

$(function(){
  $('#inner').show().width($('#innerTable').width()).css('margin','0 auto');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="inner" style="display:none;">
  <form action="">
    <table id="innerTable">
      <tr><td>Name:</td><td><input type="text"></td></tr>
      <tr><td>Email:</td><td><input type="text"></td></tr>
      <tr><td>Email:</td><td><input type="submit"></td></tr>
    </table>
  </form>
</div>




Para Firefox y Chrome:

<div style="width:100%;">
  <div style="width: 50%; margin: 0px auto;">Text</div>
</div>

Para Internet Explorer, Firefox y Chrome:

<div style="width:100%; text-align:center;">
  <div style="width: 50%; margin: 0px auto; text-align:left;">Text</div>
</div>

La propiedad text-align: es opcional para los navegadores modernos, pero es necesaria en el modo Internet Explorer Quirks para el soporte de los navegadores antiguos.




Otra solución para esto sin tener que establecer un ancho para uno de los elementos es usar el atributo de transform CSS 3.

#outer {
  position: relative;
}

#inner {
  position: absolute;
  left: 50%;

  transform: translateX(-50%);
}

El truco es que translateX(-50%) establece el elemento #inner 50 por ciento a la izquierda de su propio ancho. Puedes usar el mismo truco para la alineación vertical.

Aquí hay un Fiddle muestra la alineación horizontal y vertical.

Más información está en Mozilla Developer Network .




Me doy cuenta de que llego bastante tarde al juego, pero esta es una pregunta muy popular, y recientemente encontré un enfoque que no he visto mencionado en ningún lugar aquí, así que pensé que lo documentaría.

#outer {
    position: absolute;
    left: 50%;
}

#inner {
    position: relative;
    left: -50%;
}

EDITAR: ambos elementos deben tener el mismo ancho para funcionar correctamente.




Centrado solo horizontalmente

En mi experiencia, la mejor manera de centrar una caja horizontalmente es aplicar las siguientes propiedades:

El contenedor:

  • debe tener text-align: center;

El cuadro de contenido:

  • debe tener display: inline-block;

Manifestación:

.container {
  width: 100%;
  height: 120px;
  background: #CCC;
  text-align: center;
}

.centered-content {
  display: inline-block;
  background: #FFF;
  padding: 20px;
  border: 1px solid #000;
}
<div class="container">
  <div class="centered-content">
    Center this!
  </div>
</div>

Véase también este violín !

Centrado tanto horizontal como verticalmente.

En mi experiencia, la mejor manera de centrar una caja tanto vertical como horizontalmente es usar un contenedor adicional y aplicar las siguientes propiedades:

El contenedor exterior:

  • debe tener display: table;

El contenedor interior:

  • debe tener display: table-cell;
  • debe tener vertical-align: middle;
  • debe tener text-align: center;

El cuadro de contenido:

  • debe tener display: inline-block;

Manifestación:

.outer-container {
  display: table;
  width: 100%;
  height: 120px;
  background: #CCC;
}

.inner-container {
  display: table-cell;
  vertical-align: middle;
  text-align: center;
}

.centered-content {
  display: inline-block;
  background: #FFF;
  padding: 20px;
  border: 1px solid #000;
}
<div class="outer-container">
  <div class="inner-container">
    <div class="centered-content">
      Center this!
    </div>
  </div>
</div>

Véase también este violín !




Esto es lo que quieres en el camino más corto.

JSFIDDLE

#outer {
    margin - top: 100 px;
    height: 500 px; /* you can set whatever you want */
    border: 1 px solid# ccc;
}

#inner {
    border: 1 px solid# f00;
    position: relative;
    top: 50 % ;
    transform: translateY(-50 % );
}



Alineación de texto: centro

Aplicando text-align: center los contenidos en línea se centran dentro del cuadro de línea. Sin embargo, como el div interno tiene un width: 100% predeterminado width: 100% , debe establecer un ancho específico o usar uno de los siguientes:

#inner {
  display: inline-block;
}

#outer {
  text-align: center;
}
<div id="outer">
  <div id="inner">Foo foo</div>
</div>

Margen: 0 auto

Usar margin: 0 auto es otra opción y es más adecuado para la compatibilidad de navegadores antiguos. Trabaja en conjunto con display: table .

#inner {
  display: table;
  margin: 0 auto;
}
<div id="outer">
  <div id="inner">Foo foo</div>
</div>

Flexbox

display: flex comporta como un elemento de bloque y presenta su contenido de acuerdo con el modelo flexbox. Funciona con justify-content: center .

Tenga en cuenta: Flexbox es compatible con la mayoría de los navegadores, pero no con todos. Consulte here completa y actualizada de compatibilidad de navegadores.

#inner {
  display: inline-block;
}

#outer {
  display: flex;
  justify-content: center;
}
<div id="outer">
  <div id="inner">Foo foo</div>
</div>

Transformar

transform: translate permite modificar el espacio de coordenadas del modelo de formato visual CSS. Usándolo, los elementos se pueden traducir, rotar, escalar y sesgar. Para centrar horizontalmente se requiere position: absolute e left: 50% .

#inner {
  position: absolute;
  left: 50%;
  transform: translate(-50%, 0%);
}
<div id="outer">
  <div id="inner">Foo foo</div>
</div>

<center> (Desaprobado)

La etiqueta <center> es la alternativa HTML a text-align: center . Funciona en navegadores más antiguos y en la mayoría de los nuevos, pero no se considera una buena práctica ya que esta función está obsolete y se ha eliminado de los estándares web.

#inner {
  display: inline-block;
}
<div id="outer">
  <center>
    <div id="inner">Foo foo</div>
  </center>
</div>




Este método también funciona bien:

div.container {
   display: flex;
   justify-content: center; /* for horizontal alignment */
   align-items: center;     /* for vertical alignment   */
}

Para el <div> interno, la única condición es que su height y width no deben ser mayores que las de su contenedor.




Flex tiene más del 97% de cobertura de soporte del navegador y podría ser la mejor manera de resolver este tipo de problemas en pocas líneas:

#outer {
  display: flex;
  justify-content: center;
}



Si se desconoce el ancho del contenido, puede utilizar el siguiente método . Supongamos que tenemos estos dos elementos:

  • .outer - ancho completo
  • .inner : no se establece el ancho (pero se puede especificar un ancho máximo)

Supongamos que el ancho computado de los elementos es 1000px y 300px respectivamente. Proceder de la siguiente:

  1. Envolver .inner dentro .center-helper
  2. Haga .center-helper un bloque en línea; se convierte en el mismo tamaño que .inner por lo que tiene 300px de ancho.
  3. Presione .center-helper 50% en relación con su padre; esto coloca su izquierda a 500px wrt. exterior.
  4. Empuje .inner 50% a la izquierda con respecto a su padre; esto coloca su izquierda en -150px wrt. ayudante central, lo que significa que su izquierda está en 500 - 150 = 350px wrt. exterior.
  5. Configure el desbordamiento en .outer en oculto para evitar la barra de desplazamiento horizontal.

Manifestación:

body {
  font: medium sans-serif;
}

.outer {
  overflow: hidden;
  background-color: papayawhip;
}

.center-helper {
  display: inline-block;
  position: relative;
  left: 50%;
  background-color: burlywood;
}

.inner {
  display: inline-block;
  position: relative;
  left: -50%;
  background-color: wheat;
}
<div class="outer">
  <div class="center-helper">
    <div class="inner">
      <h1>A div with no defined width</h1>
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.<br>
          Duis condimentum sem non turpis consectetur blandit.<br>
          Donec dictum risus id orci ornare tempor.<br>
          Proin pharetra augue a lorem elementum molestie.<br>
          Nunc nec justo sit amet nisi tempor viverra sit amet a ipsum.</p>
    </div>
  </div>
</div>

.outer {
    overflow: hidden;
}
.center-helper {
    float: left;
    position: relative;
    left: 50%;
}
.inner {
    float: left;
    position: relative;
    left: -50%;
}





Related