Por supuesto, usted no tiene que establecer el widtha 50%. Cualquier ancho menor que el que contenga <div>funcionará. El margin: 0 autoes lo que hace el centrado real.
Si está apuntando a Internet Explorer 8 (y posterior), podría ser mejor tener esto en su lugar:
#inner {display: table;margin:0 auto;}
Hará que el elemento interno se centre horizontalmente y funcione sin establecer un elemento específico width.
Para el centrado vertical, generalmente uso "line-height" (line-height == height). Esto es simple y agradable, pero solo funciona con un texto de contenido de una línea :)
Nicolas Guillaume
98
Debe usar la etiqueta! DOCTYPE en su página html para que funcione bien en IE.
Fabio
15
Tenga en cuenta que puede ser necesario agregar "float: none;" para el #inner.
Mert Mertce
15
También establece los márgenes superior e inferior en 0, lo que no está relacionado. Mejor puesta margin-left: auto; margin-right: autocreo.
Emmanuel Touzery
13
No necesariamente margin:0 auto: puede ser el margin: <whatever_vertical_margin_you_need> autosegundo margen horizontal.
YakovL
1247
Si no desea establecer un ancho fijo en el interior div, puede hacer algo como esto:
@SabaAhang la sintaxis correcta para eso sería float: none;y, probablemente, sólo es necesario porque #interno ha heredado una floatde cualquiera lefto rightde algún otro sitio en el CSS.
Doug McLean
8
Esta es una buena solución. Hemos de tener en cuenta que heredará interior text-alignpor lo que puede configurar de interiores text-aligna initialo algún otro valor.
Asegúrese de leer esta respuesta primero antes de implementar esta solución.
cimmanon
44
Safari, a partir de ahora, todavía requiere -webkitbanderas para FlexBox ( display: -webkit-flex;y -webkit-align-items: center;, y -webkit-justify-content: center;)
Joseph Hansen
Siempre pienso que usar código de lotes es una mala práctica, por ejemplo, con este código centro mi div: display: table; margen: auto; simple y fácil
simon
Soy yo o este fragmento de código no está centrado
No me gusta esta solución porque cuando el elemento interno es demasiado ancho para la pantalla, no puede desplazarse horizontalmente por todo el elemento. margen: 0 automático funciona mejor.
Aloso
margen izquierdo: auto; margen derecho: auto; centra un elemento de nivel de bloque
mata pantalla
El ancho predeterminado para la mayoría de los elementos de nivel de bloque es automático, que llena el área disponible en la pantalla. Simplemente estar centrado lo coloca en la misma posición que la alineación izquierda. Si desea que esté centrado visualmente, debe establecer un ancho (o un ancho máximo, aunque Internet Explorer 6 y versiones anteriores no lo admiten, e IE 7 solo lo admite en modo estándar).
Killscreen
228
He creado este ejemplo para mostrar cómo hacerlo vertical y horizontalmentealign .
+1 para este método, estaba a punto de responder con él. Tenga en cuenta que debe declarar un ancho en el elemento que desea centrar horizontalmente (o altura si se centra verticalmente). Aquí hay una explicación completa: codepen.io/shshaw/full/gEiDt . Uno de los métodos más versátiles y ampliamente admitidos para centrar elementos vertical y / u horizontalmente.
stvnrynlds
66
No puede usar relleno dentro del div, pero si desea dar la ilusión use un borde del mismo color.
Squirrl
Creo que para que este método funcione, debe establecer el tamaño y la altura del div interno
Nicolas S.Xu
212
Algunos carteles han mencionado la forma de centrar CSS 3 usando display:box.
Esta sintaxis está desactualizada y ya no debería usarse. [Ver también esta publicación] .
... 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:010px;width:100px;}.item1 {height:50px;background: pink;}.item2 {background: brown;height:100px;}.item3 {height:150px;background: orange;}
¿Qué quiere decir con "la sintaxis está desactualizada", está en desuso?
Konga Raju
66
La especificación Flexbox ha pasado por 3 revisiones principales. El borrador más reciente es de septiembre de 2012, que oficialmente desprecia todos los borradores anteriores. Sin embargo, el soporte del navegador es irregular (particularmente los navegadores Android antiguos): stackoverflow.com/questions/15662578/…
cimmanon
Esto funcionó para mí en Chrome cuando la versión de Justin Poliey no.
Vern Jensen
¿No es el "justify-content: center;" para la alineación vertical y los "elementos de alineación: centro;" para la alineación horizontal?
Wouter Vanherck
3
@WouterVanherck depende del flex-directionvalor. Si es 'fila' (el valor predeterminado), entonces justify-content: center; es para la alineación horizontal (como mencioné en la respuesta) Si es 'columna', entonces justify-content: center;es para la alineación vertical.
Danield
140
Si no desea establecer un ancho fijo y no desea el margen adicional, agregue display: inline-blocka su elemento.
Asegúrese de leer esta respuesta primero antes de implementar esta solución.
cimmanon
88
Establecer widthy establecer margin-lefty margin-rightpara auto. Sin embargo, eso es solo horizontal . Si quieres en ambos sentidos, lo harías en ambos sentidos. No tengas miedo de experimentar; No es que rompas nada.
Recientemente tuve que centrar un div "oculto" (es decir, display:none;) que tenía una forma de tabla dentro que debía centrarse en la página. Escribí el siguiente código jQuery para mostrar el div oculto y luego actualizar el contenido CSS al ancho generado automáticamente de la tabla y cambiar el margen para centrarlo. (La alternancia de visualización se activa al hacer clic en un enlace, pero este código no era necesario para mostrar).
NOTA: Estoy compartiendo este código, porque Google me trajo a esta solución de desbordamiento de pila y todo habría funcionado, excepto que los elementos ocultos no tienen ningún ancho y no pueden redimensionarse / centrarse hasta que se muestran.
La text-align:propiedad es opcional para los navegadores modernos, pero es necesaria en el modo Quirks de Internet Explorer para la compatibilidad con navegadores heredados.
No hay necesidad de propiedad de alineación de texto. Es completamente innecesario.
Touhid Rahman
text-align es realmente necesario para que funcione en el modo rápido de IE, por lo que si no le importa agregar una pequeña expresión para admitir navegadores más antiguos, manténgalo allí. (IE8 IE8 con IE7 gobierna y rige tanto trabajo sin text-align, así que puede ser que es sólo IE6 y más antiguas que se refiere)
El truco es que translateX(-50%)establece el #innerelemento 50 por ciento a la izquierda de su propio ancho. Puedes usar el mismo truco para la alineación vertical.
Aquí hay un violín que muestra la alineación horizontal y vertical.
Uno también puede necesitar prefijos de proveedor:-webkit-transform: translate(-50%,0); -moz-transform: translate(-50%,0); -ms-transform: translate(-50%,0); -khtml-transform: translate(-50%,0); -o-transform: translate(-50%,0);
Skippy le Grand Gourou
45
Chris Coyier, quien escribió una excelente publicación sobre 'Centrarse en lo desconocido' en su blog. Es un resumen de múltiples soluciones. Publiqué uno que no está publicado en esta pregunta. Tiene más soporte para el navegador que la solución Flexbox , y no está utilizando lo display: table;que podría romper otras cosas.
/* This parent can be any width and height */.outer {
text-align: center;}/* The ghost, nudged to maintain perfect centering */.outer:before {
content:'.';
display:inline-block;
height:100%;
vertical-align: middle;
width:0;
overflow: hidden;}/* The element to be centered, can
also be of any width and height */.inner {
display:inline-block;
vertical-align: middle;
width:300px;}
Sólo tienes que configurar esta regla para #innersolamente: #inner { position:relative; left:50%; transform:translateX(-50%); }. Esto funciona para cualquier ancho.
Jose Rui Santos
33
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. */}
Si tiene muchos hijos con un padre, entonces su contenido CSS debe ser como este ejemplo en Fiddle .
El contenido HTML se ve así:
<divid="outer"style="width:100%;"><divclass="inner"> Foo Text </div><divclass="inner"> Foo Text </div><divclass="inner"> Foo Text </div><divclass="inner"></div><divclass="inner"></div><divclass="inner"></div><divclass="inner"></div><divclass="inner"></div><divclass="inner"> Foo Text </div></div>
En mi experiencia, la mejor manera de centrar una caja tanto vertical como horizontalmente es usar un contenedor adicional y aplicar las siguientes propiedades:
Como señala su violín, #inner debe tener un ancho establecido.
Michael Terry
#outerno necesita ninguno, width:100%;ya que <div>por defecto siempre lo ha hecho width:100%. y text-align:centertampoco es necesario en absoluto.
Mobarak Ali
27
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)
Suponga que el ancho calculado de los elementos es de 1000 píxeles y 300 píxeles respectivamente. Proceder de la siguiente:
Envuelva .inneradentro.center-helper
Haz .center-helperun bloque en línea; tiene el mismo tamaño .innerque 300 píxeles de ancho.
Empuje .center-helper50% a la derecha en relación con su padre; Esto coloca su izquierda en 500 píxeles wrt. exterior.
Empuje el .inner50% restante en relación con su padre; Esto coloca su izquierda en -150 píxeles wrt. centro de ayuda, lo que significa que su izquierda está en 500 - 150 = 350 píxeles wrt. exterior.
Establezca el desbordamiento en .outeroculto 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;}
<divclass="outer"><divclass="center-helper"><divclass="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>
#container {
display: table;
width:<width of your container>;
height:<height of your container>;}#inner {
width:<width of your center div>;
display: table-cell;
margin:0auto;
text-align: center;
vertical-align: middle;}
Esto también alineará #innerverticalmente. Si no quiere, elimine las propiedades displayy vertical-align;
La aplicación text-align: centerdel contenido en línea se centra en el cuadro de línea. Sin embargo, dado que el div interno tiene por defecto width: 100%, debe establecer un ancho específico o utilizar uno de los siguientes:
display: flexse 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 aquí para obtener una lista completa y actualizada de compatibilidad de navegadores.
transform: translatele permite modificar el espacio de coordenadas del modelo de formato visual CSS. Al usarlo, los elementos se pueden traducir, rotar, escalar y sesgar. Para centrar horizontalmente requiere position: absolutey left: 50%.
La etiqueta <center>es la alternativa HTML a text-align: center. Funciona en navegadores antiguos y en la mayoría de los nuevos, pero no se considera una buena práctica ya que esta característica es obsoleta y se ha eliminado de los estándares web.
trabajo de alineación de texto para alineación de texto en su contenedor, no para su contenedor a su padre.
Lalit Kumar Maurya
lo pruebo, tengo un problema con establecer hijo en el centro, debe cuando tiene más un hijo, más veces el margen: 0 respuesta automática de fuente, pero, centro de alineación de texto, para los padres hacen que este hijo sea el centro, incluso si son elementos y no ser texto, probar y ver qué pasa
Pnsadeghy
alinear texto solo en el texto central. Tienes razón en este momento, pero cuando escribes un contenedor CSS que contiene un hijo con diferente ancho y color, tu código no funciona. ¡Pruébalo de nuevo!
Respuestas:
Puede aplicar este CSS al interior
<div>
:Por supuesto, usted no tiene que establecer el
width
a50%
. Cualquier ancho menor que el que contenga<div>
funcionará. Elmargin: 0 auto
es lo que hace el centrado real.Si está apuntando a Internet Explorer 8 (y posterior), podría ser mejor tener esto en su lugar:
Hará que el elemento interno se centre horizontalmente y funcione sin establecer un elemento específico
width
.Ejemplo de trabajo aquí:
fuente
margin-left: auto; margin-right: auto
creo.margin:0 auto
: puede ser elmargin: <whatever_vertical_margin_you_need> auto
segundo margen horizontal.Si no desea establecer un ancho fijo en el interior
div
, puede hacer algo como esto:Eso convierte el interior
div
en un elemento en línea con el que se puede centrartext-align
.fuente
float: none;
y, probablemente, sólo es necesario porque #interno ha heredado unafloat
de cualquieraleft
oright
de algún otro sitio en el CSS.text-align
por lo que puede configurar de interiorestext-align
ainitial
o algún otro valor.Los mejores enfoques son con CSS 3 .
Modelo de caja:
Según su usabilidad, también puede usar las
box-orient, box-flex, box-direction
propiedades.Flex :
Lea más sobre centrar los elementos secundarios
Enlace 2
Enlace 3
Enlace 4
Y esto explica por qué el modelo de caja es el mejor enfoque :
fuente
-webkit
banderas para FlexBox (display: -webkit-flex;
y-webkit-align-items: center;
, y-webkit-justify-content: center;
)Suponga que su div tiene 200 píxeles de ancho:
Asegúrese de que el elemento padre esté posicionado , es decir, relativo, fijo, absoluto o fijo.
Si no conoce el ancho de su div, puede usarlo en
transform:translateX(-50%);
lugar del margen negativo.https://jsfiddle.net/gjvfxxdj/
Con CSS calc () , el código puede ser aún más simple:
El principio sigue siendo el mismo; coloque el artículo en el medio y compense el ancho.
fuente
He creado este ejemplo para mostrar cómo hacerlo vertical y horizontalmente
align
.El código es básicamente esto:
y...
Y se mantendrá
center
incluso cuando cambie el tamaño de su pantalla.fuente
Algunos carteles han mencionado la forma de centrar CSS 3 usando
display:box
.Esta sintaxis está desactualizada y ya no debería usarse. [Ver también esta publicación] .
Entonces, para completar, aquí está la última forma de centrarse en CSS 3 usando el Módulo de diseño de caja flexible .
Entonces, si tiene un marcado simple como:
... y desea centrar sus elementos dentro del cuadro, esto es lo que necesita en el elemento primario (.box):
Mostrar fragmento de código
Si necesita admitir navegadores más antiguos que usan una sintaxis más antigua para flexbox, este es un buen lugar para buscar.
fuente
flex-direction
valor. Si es 'fila' (el valor predeterminado), entoncesjustify-content: center;
es para la alineación horizontal (como mencioné en la respuesta) Si es 'columna', entoncesjustify-content: center;
es para la alineación vertical.Si no desea establecer un ancho fijo y no desea el margen adicional, agregue
display: inline-block
a su elemento.Puedes usar:
fuente
display: table;
antes. ¿Qué hace?Centrar un div de altura y anchura desconocidas
Horizontal y verticalmente. Funciona con navegadores razonablemente modernos (Firefox, Safari / WebKit, Chrome, Internet Explorer 10, Opera, etc.)
Juegue con él más en Codepen o en JSBin .
fuente
No se puede centrar si no le das un ancho. De lo contrario, tomará, por defecto, todo el espacio horizontal.
fuente
width: fit-content;
ymargin: 0 auto
. Creo que esto puede funcionar con un ancho desconocido.Propiedad de alineación de caja de CSS 3
fuente
Establecer
width
y establecermargin-left
ymargin-right
paraauto
. Sin embargo, eso es solo horizontal . Si quieres en ambos sentidos, lo harías en ambos sentidos. No tengas miedo de experimentar; No es que rompas nada.fuente
Recientemente tuve que centrar un div "oculto" (es decir,
display:none;
) que tenía una forma de tabla dentro que debía centrarse en la página. Escribí el siguiente código jQuery para mostrar el div oculto y luego actualizar el contenido CSS al ancho generado automáticamente de la tabla y cambiar el margen para centrarlo. (La alternancia de visualización se activa al hacer clic en un enlace, pero este código no era necesario para mostrar).NOTA: Estoy compartiendo este código, porque Google me trajo a esta solución de desbordamiento de pila y todo habría funcionado, excepto que los elementos ocultos no tienen ningún ancho y no pueden redimensionarse / centrarse hasta que se muestran.
fuente
La forma en que generalmente lo hago es usando la posición absoluta:
El div externo no necesita ninguna propiedad adicional para que esto funcione.
fuente
Para Firefox y Chrome:
Para Internet Explorer, Firefox y Chrome:
La
text-align:
propiedad es opcional para los navegadores modernos, pero es necesaria en el modo Quirks de Internet Explorer para la compatibilidad con navegadores heredados.fuente
Utilizar:
fuente
Otra solución para esto sin tener que establecer un ancho para uno de los elementos es usar el
transform
atributo CSS 3 .El truco es que
translateX(-50%)
establece el#inner
elemento 50 por ciento a la izquierda de su propio ancho. Puedes usar el mismo truco para la alineación vertical.Aquí hay un violín que muestra la alineación horizontal y vertical.
Más información está en Mozilla Developer Network .
fuente
-webkit-transform: translate(-50%,0); -moz-transform: translate(-50%,0); -ms-transform: translate(-50%,0); -khtml-transform: translate(-50%,0); -o-transform: translate(-50%,0);
Chris Coyier, quien escribió una excelente publicación sobre 'Centrarse en lo desconocido' en su blog. Es un resumen de múltiples soluciones. Publiqué uno que no está publicado en esta pregunta. Tiene más soporte para el navegador que la solución Flexbox , y no está utilizando lo
display: table;
que podría romper otras cosas.fuente
Recientemente encontré un enfoque:
Ambos elementos deben tener el mismo ancho para funcionar correctamente.
fuente
#inner
solamente:#inner { position:relative; left:50%; transform:translateX(-50%); }
. Esto funciona para cualquier ancho.Por ejemplo, vea este enlace y el fragmento a continuación:
Si tiene muchos hijos con un padre, entonces su contenido CSS debe ser como este ejemplo en Fiddle .
El contenido HTML se ve así:
Luego vea este ejemplo en violín .
fuente
Centrado solo horizontalmente
En mi experiencia, la mejor manera de centrar un cuadro horizontalmente es aplicar las siguientes propiedades:
El contenedor:
text-align: center;
El cuadro de contenido:
display: inline-block;
Manifestación:
Ver 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:
display: table;
El contenedor interior:
display: table-cell;
vertical-align: middle;
text-align: center;
El cuadro de contenido:
display: inline-block;
Manifestación:
Ver también este violín !
fuente
La forma más fácil:
fuente
#outer
no necesita ninguno,width:100%;
ya que<div>
por defecto siempre lo ha hechowidth:100%
. ytext-align:center
tampoco es necesario en absoluto.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)Suponga que el ancho calculado de los elementos es de 1000 píxeles y 300 píxeles respectivamente. Proceder de la siguiente:
.inner
adentro.center-helper
.center-helper
un bloque en línea; tiene el mismo tamaño.inner
que 300 píxeles de ancho..center-helper
50% a la derecha en relación con su padre; Esto coloca su izquierda en 500 píxeles wrt. exterior..inner
50% restante en relación con su padre; Esto coloca su izquierda en -150 píxeles wrt. centro de ayuda, lo que significa que su izquierda está en 500 - 150 = 350 píxeles wrt. exterior..outer
oculto para evitar la barra de desplazamiento horizontal.Manifestación:
fuente
Puedes hacer algo como esto
Esto también alineará
#inner
verticalmente. Si no quiere, elimine las propiedadesdisplay
yvertical-align
;fuente
Esto es lo que quieres de la manera más corta.
JSFIDDLE
fuente
Alinear texto: centro
La aplicación
text-align: center
del contenido en línea se centra en el cuadro de línea. Sin embargo, dado que el div interno tiene por defectowidth: 100%
, debe establecer un ancho específico o utilizar uno de los siguientes:display: block
display: inline
display: inline-block
Mostrar fragmento de código
Margen: 0 automático
Usar
margin: 0 auto
es otra opción y es más adecuado para la compatibilidad de navegadores antiguos. Funciona junto condisplay: table
.Mostrar fragmento de código
Flexbox
display: flex
se comporta como un elemento de bloque y presenta su contenido de acuerdo con el modelo flexbox. Funciona conjustify-content: center
.Tenga en cuenta: Flexbox es compatible con la mayoría de los navegadores, pero no con todos. Consulte aquí para obtener una lista completa y actualizada de compatibilidad de navegadores.
Mostrar fragmento de código
Transformar
transform: translate
le permite modificar el espacio de coordenadas del modelo de formato visual CSS. Al usarlo, los elementos se pueden traducir, rotar, escalar y sesgar. Para centrar horizontalmente requiereposition: absolute
yleft: 50%
.Mostrar fragmento de código
<center>
(Obsoleto)La etiqueta
<center>
es la alternativa HTML atext-align: center
. Funciona en navegadores antiguos y en la mayoría de los nuevos, pero no se considera una buena práctica ya que esta característica es obsoleta y se ha eliminado de los estándares web.Mostrar fragmento de código
fuente
Puede usarlo
display: flex
para su div externo y para centrar horizontalmente debe agregarjustify-content: center
o puede visitar w3schools - CSS flex Property para obtener más ideas.
fuente
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:
fuente
Bueno, logré encontrar una solución que tal vez se ajuste a todas las situaciones, pero usa JavaScript:
Aquí está la estructura:
Y aquí está el fragmento de JavaScript:
Si desea usarlo con un enfoque receptivo, puede agregar lo siguiente:
fuente
Este método también funciona bien:
Para el interior
<div>
, la única condición es que esheight
ywidth
no debe ser más grande que las de su contenedor.fuente
Existía una opción que encontré:
Todos dicen usar:
Pero hay otra opción. Establezca esta propiedad para el padre div. Funciona perfectamente en cualquier momento:
Y mira, niño, ve al centro.
Y finalmente CSS para ti:
fuente