html - verticalmente - centrar un div bootstrap




¿Cómo centrar horizontalmente un<div>? (20)

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

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

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>


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 !


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.


Bueno, logré encontrar una solución que quizás se ajuste a todas las situaciones, pero usa JavaScript:

Aquí está la estructura:

<div class="container">
  <div class="content">Your content goes here!</div>
  <div class="content">Your content goes here!</div>
  <div class="content">Your content goes here!</div>
</div>

Y aquí está el fragmento de JavaScript:

$(document).ready(function() {
  $('.container .content').each( function() {
    container = $(this).closest('.container');
    content = $(this);

    containerHeight = container.height();
    contentHeight = content.height();

    margin = (containerHeight - contentHeight) / 2;
    content.css('margin-top', margin);
  })
});

Si desea utilizarlo en un enfoque receptivo, puede agregar lo siguiente:

$(window).resize(function() {
  $('.container .content').each( function() {
    container = $(this).closest('.container');
    content = $(this);

    containerHeight = container.height();
    contentHeight = content.height();

    margin = (containerHeight - contentHeight) / 2;
    content.css('margin-top', margin);
  })
});

Esta es mi respuesta.

#outerDiv {
  width: 500px;
}

#innerDiv {
  width: 200px;
  margin: 0 auto;
}
<div id="outerDiv">
  <div id="innerDiv">Inner Content</div>
</div>


Establezca el width y establezca el margin-left y margin-right a auto . Eso es solo para horizontal , sin embargo. Si quieres de las dos maneras, solo lo harás de las dos maneras. No tengas miedo de experimentar; No es como si rompieras algo.


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 % );
}

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;
}

He creado este example para mostrar cómo align vertical y horizontalmente .

El código es básicamente este:

#outer {
  position: relative;
}

y...

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

y permanecerá en el center incluso cuando redimensione su pantalla.


Intenta jugar con

margin: 0 auto;

Si también quiere centrar su texto, intente usar:

text-align: center;

La forma más fácil:

#outer {
  width: 100%;
  text-align: center;
}
#inner {
  margin: auto;
  width: 200px;
}
<div id="outer">
  <div id="inner">Blabla</div>
</div>


Los mejores enfoques son con CSS 3 .

Modelo de caja:

#outer{
    width: 100%;

    /* Firefox */
    display: -moz-box;
    -moz-box-pack: center;
    -moz-box-align: center;

    /* Safari and Chrome */
    display: -webkit-box;
    -webkit-box-pack: center;
    -webkit-box-align: center;

    /* W3C */
    display: box;
    box-pack: center;
    box-align: center;
}
#inner{
    width: 50%;
}

De acuerdo con su facilidad de uso, también puede utilizar las propiedades box-orient, box-flex, box-direction .

Flexión :

#outer {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    justify-content: center;
    align-items: center;
}

Leer más sobre centrar los elementos secundarios.

Y esto explica por qué el modelo de caja es el mejor enfoque :


No puede centrarse si no le da un ancho, de lo contrario tomará, por defecto, todo el espacio horizontal.


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 .


Por ejemplo, vea este enlace y el fragmento a continuación:

div#outer {
  height: 120px;
  background-color: red;
}

div#inner {
  width: 50%;
  height: 100%;
  background-color: green;
  margin: 0 auto;
  text-align: center; /* For text alignment to center horizontally. */
  line-height: 120px; /* For text alignment to center vertically. */
}
<div id="outer" style="width:100%;">
  <div id="inner">Foo foo</div>
</div>

Si tiene muchos hijos bajo un padre, entonces su contenido CSS debe ser como este ejemplo en el violín .

El aspecto del contenido HTML le gusta esto:

<div id="outer" style="width:100%;">
    <div class="inner"> Foo Text </div>
    <div class="inner"> Foo Text </div>
    <div class="inner"> Foo Text </div>
    <div class="inner"> </div>
    <div class="inner"> </div>
    <div class="inner"> </div>
    <div class="inner"> </div>
    <div class="inner"> </div>
    <div class="inner"> Foo Text </div>
</div>

Entonces ve este ejemplo en el violín .


Puedes aplicar este CSS al <div> interno:

#inner {
  width: 50%;
  margin: 0 auto;
}

Por supuesto, no es necesario establecer el width en 50% . Cualquier ancho menor que el contenido de <div> funcionará. El margin: 0 auto es lo que hace el centrado real.

Si está apuntando a IE8 +, podría ser mejor tener esto en su lugar:

#inner {
  display: table;
  margin: 0 auto;
}

Hará que el elemento interno se centre horizontalmente y funciona sin establecer un width específico.

Ejemplo de trabajo aquí:

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


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 .


Si no desea establecer un ancho fijo y no desea un margen adicional, agregue display: inline-block a su elemento.

Puedes usar:

#element {
    display: table;
    margin: 0 auto;
}

Una opción que encontré fue:

Todos dicen usar:

margin: auto 0;

Pero hay otra opción. Establezca esta propiedad para el div padre. Funciona perfectamente en cualquier momento:

text-align: center;

Y verás, niño va al centro.

Y finalmente CSS para ti:

#outer{
     text-align: center;
     display: block; /* Or inline-block - base on your need */
}

#inner
{
     position: relative;
     margin: 0 auto; /* It is good to be */
}





centering