Centrar una columna usando Twitter Bootstrap 3


1146

¿Cómo centro un div de un tamaño de columna dentro del contenedor (12 columnas) en Twitter Bootstrap 3 ?

.centered {
  background-color: red;
}
<body class="container">
  <div class="col-lg-1 col-offset-6 centered">
    <img data-src="holder.js/100x100" alt="" />
  </div>
</body>

Quiero un div, con una clase .centeredcentrada dentro del contenedor. Puedo usar una fila si hay múltiples divs, pero por ahora solo quiero una divcon el tamaño de una columna centrada dentro del contenedor (12 columnas).

Tampoco estoy seguro de que el enfoque anterior sea lo suficientemente bueno, ya que la intención no es compensarlo a la divmitad. No necesito espacios libres fuera divy el contenido del divencogimiento en proporción. Quiero vaciar el espacio fuera del div para distribuirlo uniformemente (reducir hasta que el ancho del contenedor sea igual a una columna).

Respuestas:


1963

Hay dos enfoques para centrar una columna <div>en Bootstrap 3:

Enfoque 1 (compensaciones):

El primer enfoque utiliza las propias clases de desplazamiento de Bootstrap, por lo que no requiere ningún cambio en el marcado ni CSS adicional. La clave es establecer un desplazamiento igual a la mitad del tamaño restante de la fila . Entonces, por ejemplo, una columna de tamaño 2 se centraría agregando un desplazamiento de 5, eso es (12-2)/2.

En marcado esto se vería así:

<div class="row">
    <div class="col-md-2 col-md-offset-5"></div>
</div>

Ahora, hay un inconveniente obvio para este método. Sólo funciona para los tamaños de las columnas, incluso , por lo que sólo .col-X-2, .col-X-4, col-X-6, col-X-8, y col-X-10son compatibles.


Enfoque 2 (el viejo margin:auto)

Puede centrar cualquier tamaño de columna utilizando la margin: 0 auto;técnica probada . Solo necesita cuidar la flotabilidad que agrega el sistema de cuadrícula de Bootstrap. Recomiendo definir una clase CSS personalizada como la siguiente:

.col-centered{
    float: none;
    margin: 0 auto;
}

Ahora puede agregarlo a cualquier tamaño de columna en cualquier tamaño de pantalla, y funcionará perfectamente con el diseño receptivo de Bootstrap:

<div class="row">
    <div class="col-lg-1 col-centered"></div>
</div>

Nota: Con ambas técnicas, puede omitir el .rowelemento y tener la columna centrada dentro de a .container, pero notará una diferencia mínima en el tamaño real de la columna debido al relleno en la clase de contenedor.


Actualizar:

Desde v3.0.1 Bootstrap tiene una clase incorporada llamada center-blockque usa margin: 0 auto, pero falta float:none, puede agregarla a su CSS para que funcione con el sistema de cuadrícula.


1
Creo que no hay flotante: ninguno en la regla de bloque central porque hay una regla independiente de corrección clara que puede agregar a los elementos para borrar flotantes.
Diego Fernando Murillo Valenci

77
@DiegoFernandoMurilloValenci .clearfixno funcionaría en este caso porque no elimina la propiedad flotante de los elementos (que se necesita para centrar el uso margin: 0 auto), solo hace que un contenedor envuelva cualquier elemento flotante dentro
koala_dev

44
no puedo usar esto en una columna, porque nofloat:none;
airtonix

2
Si desea centrar más de una columna en una sola línea, consulte esta respuesta stackoverflow.com/questions/28683329/…
Conor Svensson

3
La sintaxis para el desplazamiento cambió en Bootstrap4 (a partir de la última versión). Usando esta respuesta como ejemplo: la clase col-md-offset-5 ahora debería ser offset-md-5.
lgants

296

El método preferido de centrado de columnas es el uso de "compensaciones" (es decir: col-md-offset-3)

Ejemplos de centrado de Bootstrap 3.x

Para centrar elementos , hay una center-block clase auxiliar .

También puede usar text-centerpara centrar texto (y elementos en línea).

Demostración : http://bootply.com/91632

EDITAR : como se menciona en los comentarios,center-blockfunciona en los contenidos ydisplay:blockelementos de lacolumna, pero no funcionará en la columna en sí (col-*divs) porque usa Bootstrapfloat.


Actualización 2018

Ahora con Bootstrap 4 , los métodos de centrado han cambiado.

  • text-centertodavía se usa para display:inlineelementos
  • mx-autoreemplaza center-blocka los display:blockelementos centrales
  • offset-* o mx-auto puede usarse para centrar columnas de cuadrícula

mx-auto(márgenes de auto-eje X) se centrarán display:blocko display:flexelementos que tienen una anchura definida , ( %, vw, px, etc ..). Flexbox se usa por defecto en las columnas de la cuadrícula, por lo que también hay varios métodos de centrado de flexbox.

Demo Bootstrap 4 Centrado horizontal

Para el centrado vertical en BS4, consulte https://stackoverflow.com/a/41464397/171456


31
Lamentablemente, esta clase auxiliar no funciona con el sistema de columnas, ya que no se ocupa de la propiedad flotante. Vea esta demostración por ejemplo.
koala_dev

13
Eso solo requiere un bloque central {float: none; }, y funciona. bootply.com/122268
Matias Vad

55
No estoy seguro sobre el OP, pero llegué aquí buscando los text-centerdetalles, que ninguna de las otras respuestas proporcionó. Éste tiene mi voto.
domoarigato

1
no puedo usar esto en una columna, porque nofloat:none;
airtonix

98

Ahora está trabajando Bootstrap 3.1.1 .center-block, y esta clase auxiliar funciona con el sistema de columnas.

Bootstrap 3 Helper Class Center .

Por favor, compruebe esta DEMO jsfiddle :

<div class="container">
    <div class="row">
        <div class="center-block">row center-block</div>
    </div>
    <div class="row">
        <div class="col-md-6 brd">
            <div class="center-block">1 center-block</div>
        </div>
        <div class="col-md-6 brd">
            <div class="center-block">2 center-block</div>
        </div>
    </div>
</div>
<div class="row">
    <div class="col-xs-2 col-center-block">row col-xs-2 col-center-block</div>
</div>

Centro de clases de ayuda

Centro de columna de fila usando col-center-blockclase auxiliar.

.col-center-block {
    float: none;
    display: block;
    margin: 0 auto;
    /* margin-left: auto; margin-right: auto; */
}

Lo hice funcionar sin agregar, float:noneasegurándome de que el bloque central div tenga el style="width : ?px"estilo aplicado. Por ejemplo, un ancho de imagen. Funciona con 3.2.2
Piotr Kula

margen: 0 automático; - suficiente margen-izquierda + margen-derecha
mmike

57

Simplemente agregue lo siguiente a su archivo CSS personalizado. No se recomienda editar directamente archivos CSS de Bootstrap y cancela su capacidad de usar un CDN .

.center-block {
    float: none !important
}

¿Por qué?

Bootstrap CSS (versión 3.7 y versiones anteriores) utiliza el margen: 0 automático; , pero se invalida por la propiedad flotante del contenedor de tamaño.

PD :

Después de agregar esta clase, no olvide establecer las clases en el orden correcto.

<div class="col-md-6 center-block">Example</div>

1
¡Estoy usando Bootstrap 3.3.7y este es el único método que funciona para mí!
illagrenan

1
esto funciona. pero no creo que !importantsea necesario
Gianfranco P.

1
@GianfrancoP. P. Tiene razón, pero ... eso depende del orden de carga y quería proporcionar un método infalible.
Sagive SEO

39

Bootstrap 3 ahora tiene una clase incorporada para esto.center-block

.center-block {
  display: block;
  margin-left: auto;
  margin-right: auto;
}

Si todavía usa 2.X, simplemente agregue esto a su CSS.


Esto probablemente le daría el efecto deseado más fácil. También agregue ancho en la clase .centrado o agregue una segunda clase si desea un enfoque más modular
Matt Lambert el

2
Agregar flotador: ninguno; to .centered te permite mover la clase a un contenedor. mantiene el código más limpio
Adam Patterson

77
no se puede usar esto en una columna, porque nofloat:none;
airtonix

37

Mi enfoque para centrar columnas es usar display: inline-blockpara columnas y text-align: centerpara el contenedor primario.

Solo tiene que agregar la clase CSS 'centrada' al row.

HTML:

<div class="container-fluid">
  <div class="row centered">
    <div class="col-sm-4 col-md-4">
        Col 1
    </div>
    <div class="col-sm-4 col-md-4">
        Col 2
    </div>
    <div class="col-sm-4 col-md-4">
        Col 3
    </div>
  </div>
</div>

CSS:

.centered {
   text-align: center;
   font-size: 0;
}
.centered > div {
   float: none;
   display: inline-block;
   text-align: left;
   font-size: 13px;
}

JSFiddle: http://jsfiddle.net/steyffi/ug4fzcjd/


2
Esta es la única respuesta que funcionó el 100% del tiempo: los demás funcionaron, pero no cuando bootstrap cambió a su vista móvil (los elementos se movieron hacia el lado izquierdo).
Levi Fuller

Este fue el único que también me funcionó, .center-block solo funciona para una columna y necesito centrar todas las columnas independientemente de cuántas sean.
cjohansson

La única solución que funcionó para mí también. Otros solo funcionaban cuando el navegador era una ventana (no a pantalla completa).
kiwicomb123

26

Oreja versión 3 tiene una clase .text-center.

Solo agrega esta clase:

text-center

Simplemente cargará este estilo:

.text-center {
    text-align: center;
}

Ejemplo:

<div class="container-fluid">
  <div class="row text-center">
     <div class="col-md-12">
          Bootstrap 4 is coming....
      </div>
  </div>
</div>   

¿Aclara dónde se agregará esta clase?
aksu

Hola @aksu, no tienes que agregar ningún .css. Mira el ejemplo proporcionado.
JoshYates1980


15

Esto funciona. Una manera hackear probablemente, pero funciona muy bien. Fue probado para responder (Y).

.centered {
    background-color: teal;
    text-align: center;
}

Escritorio

Sensible


funciona solo porque el elemento tiene diplay en línea. Un imgpuede establecerse como un bloque.
ProfileTwist

Quizás en su caso de prueba aislado. Añadiría .centered img { display: inline; }a su respuesta y, en su lugar, merecería un voto positivo.
ProfileTwist

No hay problema. Estoy seguro de que el OP encontrará su respuesta :)
Ali Gajani

en bootstrap 3, la clase .text-center hace lo mismo de forma nativa, como aprendí anteriormente.
domoarigato

7
<div class="container-fluid">
    <div class="row">
        <div class="col-lg-4 col-lg-offset-4">
            <img src="some.jpg">
        </div>
    </div>
</div>

6

Para centrar el col- necesitamos usar el siguiente código. Los cols son elementos flotantes además del margen automático. También lo configuraremos para que no flote ninguno,

<body class="container">
    <div class="col-lg-1 col-md-4 centered">
        <img data-src="holder.js/100x100" alt="" />
    </div>
</body>

Para centrar el col-lg-1 anterior con la clase de centrado, escribiremos:

.centered {
    float: none;
    margin-left: auto;
    margin-right: auto;
}

Para centrar el contenido dentro del div, use text-align:center,

.centered {
    text-align: center;
}

Si desea centrarlo solo en el escritorio y la pantalla más grande, no en el móvil, utilice la siguiente consulta de medios.

@media (min-width: 768px) {
    .centered {
        float: none;
        margin-left: auto;
        margin-right: auto;
    }
}

Y para centrar el div solo en la versión móvil, use el siguiente código.

@media (max-width: 768px) {
    .centered {
        float: none;
        margin-left: auto;
        margin-right: auto;
    }
}

6

Simplemente configure su columna que muestra el contenido en col-xs-12 (mobile-first ;-) y configure el contenedor solo para controlar qué tan ancho desea que sea su contenido centrado, por lo tanto:

.container {
  background-color: blue;
}
.centered {
    background-color: red;
}
<body class="container col-xs-offset-3 col-xs-6">
    <div class="col-xs-12 centered">
        <img data-src="holder.js/100x100" alt="" />
    </div>
</body>

<body class="container col-xs-offset-1 col-xs-10">
    <div class="col-xs-12 centered">
        <img data-src="holder.js/100x100" alt="" />
    </div>
</body>

Para una demostración, consulte http://codepen.io/Kebten/pen/gpRNMe :-)


6

Otro enfoque de compensación es tener dos filas vacías, por ejemplo:

<div class="col-md-4"></div>
<div class="col-md-4">Centered Content</div>
<div class="col-md-4"></div>

1
2 divs inútiles, col-md-offset- * es mejor
ymakux

1
Estoy de acuerdo. Usé ese método porque realmente funciona bien y lo probé.
LeRoy

6

Puede usar text-centerpara la fila y puede asegurarse de que los div internos tengan display:inline-block(con no float).

Como:

<div class="container">
    <div class="row text-center" style="background-color : black;">
        <div class="redBlock">A red block</div>
        <div class="whiteBlock">A white block</div>
        <div class="yellowBlock">A yellow block</div>
    </div>
</div>

Y CSS:

.redBlock {
    width: 100px;
    height: 100px;
    background-color: aqua;
    display: inline-block
}
.whiteBlock {
    width: 100px;
    height: 100px;
    background-color: white;
    display: inline-block
}
.yellowBlock {
    width: 100px;
    height: 100px;
    background-color: yellow;
    display: inline-block
}

El violín: http://jsfiddle.net/DTcHh/3177/


6

Con Bootstrap 4 simplemente puedes probar justify-content-md-centercomo se menciona aquí

<div class="container">
    <div class="row justify-content-md-center">
        <div class="col col-lg-2">
              1 of 3
        </div>
        <div class="col-md-auto">
            Variable width content
        </div>
        <div class="col col-lg-2">
              3 of 3
        </div>
    </div>
    <div class="row">
        <div class="col">
             1 of 3
        </div>
        <div class="col-md-auto">
                Variable width content
        </div>
        <div class="col col-lg-2">
              3 of 3
        </div>
    </div>
</div>

ingrese la descripción de la imagen aquí


1
@AdamErickson La pregunta formulada específicamente para una solución bootstrap 3. Como esta respuesta es probablemente el camino a seguir en BS4, en 2019 algunos programas todavía usan bootstrap 3.
A1rPun

5

Probablemente esta no sea la mejor respuesta, pero hay una solución creativa más para esto. Como señaló koala_dev, la compensación de columnas funciona solo para tamaños de columna pares. Sin embargo, al anidar filas también puede lograr centrar columnas desiguales.

Para seguir con la pregunta original donde desea centrar una columna de 1 dentro de una cuadrícula de 12.

  1. Centre una columna de 2 al compensarla 5
  2. Haga una fila anidada, para obtener 12 columnas nuevas dentro de sus 2 columnas.
  3. Como desea centrar una columna de 1, y 1 es "la mitad" de 2 (lo que centramos en el paso 1), ahora necesita centrar una columna de 6 en su fila anidada, lo que se hace fácilmente al compensarla 3.

Por ejemplo:

<div class="container">
  <div class="row">
    <div class="col-md-offset-5 col-md-2">
      <div class="row">
        <div class="col-md-offset-3 col-md-6">
          centered column with that has an "original width" of 1 col
        </div>
      </div>
    </div>
  </div>
</div>

Vea este violín , tenga en cuenta que debe aumentar el tamaño de la ventana de salida para ver también el resultado; de lo contrario, las columnas se ajustarán.


5

Este no es mi código, pero funciona perfectamente (probado en Bootstrap 3) y no tengo que perder el tiempo con col-offset.

Manifestación:

/* centered columns styles */

.col-centered {
  display: inline-block;
  float: none;
  /* inline-block space fix */
  margin-right: -4px;
  background-color: #ccc;
  border: 1px solid #ddd;
}
<div class="container">
  <div class="row text-center">
    <div class="col-xs-6 col-centered">Column 6</div>
    <div class="col-xs-6 col-centered">Column 6</div>
    <div class="col-xs-3 col-centered">Column 3</div>
    <div class="col-xs-3 col-centered">Column 3</div>
    <div class="col-xs-3 col-centered">Column 3</div>
  </div>
</div>


4

Podemos lograr esto usando el mecanismo de diseño de la tabla:

El mecanismo es:

  1. Envuelva todas las columnas en un div.
  2. Haga ese div como una tabla con un diseño fijo.
  3. Haga cada columna como una celda de tabla.
  4. Use la propiedad de alineación vertical para controlar la posición del contenido.

La demostración de muestra está aquí

Ingrese la descripción de la imagen aquí


4

Agregue el siguiente fragmento dentro de su .row o su .col. Esto es para Bootstrap 4 *.

d-flex justify-content-center

3

Como koala_dev usó en su enfoque 1, preferiría el método de compensación en lugar del bloque central o los márgenes que tienen un uso limitado, pero como mencionó:

Ahora, hay un inconveniente obvio para este método, solo funciona para tamaños de columna uniformes, por lo que solo .col-X-2, .col-X-4, col-X-6, col-X-8 y col-X- 10 son compatibles.

Esto se puede resolver utilizando el siguiente enfoque para columnas impares.

<div class="col-xs-offset-5 col-xs-2">
    <div class="col-xs-offset-3">
        // Your content here
    </div>
</div>

3

Puede utilizar la solución flexible Flexbox para su Bootstrap.

justify-content: center;

Puede centrar su columna.

Echa un vistazo a flex .


2

Como nunca tengo la necesidad de centrar solo uno .col-dentro de a .row, configuro la siguiente clase en el ajuste .rowde mis columnas de destino.

.col-center > [class*="col-"] {
    float: none;
    margin-left: auto;
    margin-right: auto;
}

Ejemplo

<div class="full-container">
    <div class="row col-center">
        <div class="col-xs-11">
            Foo
        </div>
        <div class="col-xs-11">
            Bar
        </div>
    </div>
</div>

2

Para aquellos que buscan centrar los elementos de la columna en la pantalla cuando no tienen el número exacto para llenar su cuadrícula, he escrito un pequeño fragmento de JavaScript para devolver los nombres de las clases:

function colCalculator(totalNumberOfElements, elementsPerRow, screenSize) {
    var arrayFill = function (size, content) {
        return Array.apply(null, Array(size)).map(String.prototype.valueOf, content);
    };

    var elementSize = parseInt(12 / elementsPerRow, 10);
    var normalClassName = 'col-' + screenSize + '-' + elementSize;
    var numberOfFittingElements = parseInt(totalNumberOfElements / elementsPerRow, 10) * elementsPerRow;
    var numberOfRemainingElements = totalNumberOfElements - numberOfFittingElements;
    var ret = arrayFill(numberOfFittingElements, normalClassName);
    var remainingSize = 12 - numberOfRemainingElements * elementSize;
    var remainingLeftSize = parseInt(remainingSize / 2, 10);
    return ret.concat(arrayFill(numberOfRemainingElements, normalClassName + ' col-' + screenSize + '-push-' + remainingLeftSize));
}

Si tiene 5 elementos y desea tener 3 por fila en una mdpantalla, haga esto:

colCalculator(5, 3, 'md')
>> ["col-md-4", "col-md-4", "col-md-4", "col-md-4 col-md-push-2", "col-md-4 col-md-push-2"]

Tenga en cuenta que el segundo argumento debe ser divisible por 12.


2

Para centrar más de una columna en una fila Bootstrap, y el número de columnas es impar, simplemente agregue esta cssclase a todas las columnas de esa fila:

.many-cols-centered {  // To horizontally center bootstrap odd cols, eg col-lg-9, col-md-3, works well in lg
  display:inline-block;
  float:none;
}

Entonces en tu HTML tienes algo como:

<div class="row text-center"> <!-- text-center centers all text in that row -->
    <div class="col-lg-3 col-md-3 col-sm-3 col-xs-12 many-cols-centered">
        <img src='assets/image1.jpg'>
        <h3>You See</h3>
        <p>I love coding.</p>
    </div>
    <div class="col-lg-3 col-md-3 col-sm-3 col-xs-12 many-cols-centered">
        <img src='assets/image2.jpg'>
        <h3>You See</h3>
        <p>I love coding.</p>
    </div>
    <div class="col-lg-3 col-md-3 col-sm-3 col-xs-12 many-cols-centered">
        <img src='assets/image3.jpg'>
        <h3>You See</h3>
        <p>I love coding.</p>
    </div>
</div>

2

Prueba esto

<div class="row">
    <div class="col-xs-2 col-xs-offset-5"></div>
</div>

Puedes usar otros colcomo col-md-2, etc.


2

Sugiero simplemente usar la clase text-center:

<body class="container">
    <div class="col-md-12 text-center">
        <img data-src="holder.js/100x100" alt="" />
    </div>
</body>

2

Prueba este código.

<body class="container">
    <div class="col-lg-1 col-lg-offset-10">
        <img data-src="holder.js/100x100" alt="" />
    </div>
</body>

Aquí he usado col-lg-1, y el desplazamiento debería ser 10 para centrar adecuadamente el div en dispositivos grandes. Si necesita que se centre en dispositivos medianos a grandes, simplemente cambie lg a md y así sucesivamente.


2

Solución Bootstrap 4 :

<div class="container">
  <div class="row">
    <div class="col align-self-center">
      Column in the middle, variable width
    </div>
  </div>
</div>

1

Si coloca esto en su fila, todas las columnas dentro estarán centradas:

.row-centered {
    display: flex;
    justify-content: space-between;
}

hizo que el elemento no respondiera.
gfivehost

1

Para ser más precisos, el sistema de cuadrícula de Bootstrap contiene 12 columnas y para centrar cualquier contenido, digamos, por ejemplo, el contenido ocupa una columna. Será necesario ocupar dos columnas de la cuadrícula de Bootstrap y colocar el contenido en la mitad de las dos columnas ocupadas.

<div class="row">
   <div class="col-xs-2 col-xs-offset-5 centered">
      ... your content / data will come here ...
   </div>
</div>

'col-xs-offset-5' le dice al sistema de cuadrícula dónde comenzar a colocar el contenido.

'col-xs-2' le dice al sistema de cuadrícula cuántas columnas sobrantes debería ocupar el contenido.

'centrado' será una clase definida que centrará el contenido.

Así es como se ve este ejemplo en el sistema de cuadrícula de Bootstrap.

Columnas:

1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12

....... desplazamiento ....... datos. .......no utilizado........

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.