Tengo un div
conjunto para display:block
( 90px
height
y width
), y tengo algo de texto dentro.
Necesito que el texto esté alineado en el centro tanto vertical como horizontalmente.
Lo intenté text-align:center
, pero no funciona en la parte horizontal, así que lo intenté vertical-align:middle
, pero no funcionó.
¿Algunas ideas?
text-align:center
que no hace la "parte vertical"?Respuestas:
Si es una línea de texto y / o imagen, entonces es fácil de hacer. Solo usa:
Eso es. Si puede ser varias líneas, entonces es algo más complicado. Pero hay soluciones en http://pmob.co.uk/ . Busque "alineación vertical".
Como tienden a ser hacks o agregar divs complicados ... Usualmente uso una tabla con una sola celda para hacerlo ... para hacerlo lo más simple posible.
Actualización para 2020:
A menos que necesite que funcione en navegadores anteriores como Internet Explorer 10, puede usar flexbox. Es ampliamente compatible con todos los principales navegadores actuales . Básicamente, el contenedor debe especificarse como un contenedor flexible, junto con el centrado a lo largo de su eje principal y transversal:
Para especificar un ancho fijo para el elemento secundario, que se denomina "elemento flexible":
Ejemplo: http://jsfiddle.net/2woqsef1/1/
Para reducir el contenido, es aún más simple: simplemente elimine el
flex: ...
línea del elemento flexible y automáticamente se encogerá.Ejemplo: http://jsfiddle.net/2woqsef1/2/
Los ejemplos anteriores se han probado en los principales navegadores, incluidos MS Edge e Internet Explorer 11.
Una nota técnica si necesita personalizarlo: dentro del elemento flexible, dado que este elemento flexible no es un contenedor flexible en sí mismo, la antigua forma de CSS sin flexbox funciona como se esperaba. Sin embargo, si agrega un elemento flexible adicional al contenedor flexible actual, los dos elementos flexibles se colocarán horizontalmente. Para hacerlos colocados verticalmente, agregue el
flex-direction: column;
al contenedor flexible. Así es como funciona entre un contenedor flexible y su inmediato elementos secundarios .Existe un método alternativo para centrar: no especificando
center
la distribución en el eje principal y transversal para el contenedor flexible, sino que especificamargin: auto
en el elemento flexible para ocupar todo el espacio extra en las cuatro direcciones, y los márgenes distribuidos uniformemente hará que el elemento flexible se centre en todas las direcciones. Esto funciona excepto cuando hay múltiples elementos flexibles. Además, esta técnica funciona en MS Edge pero no en Internet Explorer 11.Actualización para 2016/2017:
Se puede hacer con más frecuencia
transform
y funciona bien incluso en navegadores antiguos como Internet Explorer 10 e Internet Explorer 11. Puede admitir múltiples líneas de texto:Ejemplo: https://jsfiddle.net/wb8u02kL/1/
Para encoger el ancho:
La solución anterior utilizó un ancho fijo para el área de contenido. Para usar un ancho retractilado, use
Ejemplo: https://jsfiddle.net/wb8u02kL/2/
Si se necesita el soporte para Internet Explorer 10, entonces flexbox no funcionará y el método anterior y el
line-height
método funcionarían. De lo contrario, flexbox haría el trabajo.fuente
display: table-cell
propiedad para eso, para su información. Usarlo hace que el elemento se comporte como una celda de tabla y lo permitevertical-align: middle;
font:
estos, asegúrese de ponerlo por delante de laline-
altura`.Técnicas comunes a partir de 2014:
Enfoque 1 -
transform
translateX
/translateY
:Ejemplo aquí / Ejemplo de pantalla completa
En los navegadores compatibles (la mayoría de ellos), puede usar
top: 50%
/left: 50%
en combinación contranslateX(-50%) translateY(-50%)
para centrar dinámicamente vertical / horizontalmente el elemento.Enfoque 2 - Método de Flexbox:
Ejemplo aquí / Ejemplo de pantalla completa
En los navegadores compatibles , configure el
display
elemento de destinoflex
y utilíceloalign-items: center
para el centrado vertical y eljustify-content: center
centrado horizontal. Simplemente no olvide agregar prefijos de proveedor para soporte adicional del navegador ( ver ejemplo ).Enfoque 3 -
table-cell
/vertical-align: middle
:Ejemplo aquí / Ejemplo de pantalla completa
En algunos casos, deberá asegurarse de que la altura del elemento
html
/body
esté establecida en100%
.Para la alineación vertical, establezca
width
/height
to del elemento principal100%
y agreguedisplay: table
. Luego, para el elemento hijo, cambie eldisplay
atable-cell
y agreguevertical-align: middle
.Para el centrado horizontal, puede agregar
text-align: center
para centrar el texto y cualquier otroinline
elemento secundario. Alternativamente, podría usarmargin: 0 auto
asumiendo que el elemento estáblock
nivelado.Enfoque 4 - Absolutamente posicionado
50%
desde la parte superior con desplazamiento:Ejemplo aquí / Ejemplo de pantalla completa
Este enfoque asume que el texto tiene una altura conocida - en este caso,
18px
. Simplemente coloque el elemento50%
desde arriba, en relación con el elemento padre. Use unmargin-top
valor negativo que sea la mitad de la altura conocida del elemento, en este caso --9px
.Enfoque 5 - El
line-height
método (menos flexible - no sugerido):Ejemplo aquí
En algunos casos, el elemento padre tendrá una altura fija. Para el centrado vertical, todo lo que tiene que hacer es establecer un
line-height
valor en el elemento secundario igual a la altura fija del elemento primario.Aunque esta solución funcionará en algunos casos, vale la pena señalar que no funcionará cuando haya varias líneas de texto, como esta .
Los métodos 4 y 5 no son los más confiables. Ve con uno de los primeros 3.
fuente
table-cell
lo más posible.Usando flexbox / CSS:
El CSS:
Tomado de Consejo rápido: la forma más sencilla de centrar elementos vertical y horizontalmente
fuente
display: -ms-flexbox; -ms-flex-align: center; -ms-flex-pack: center
.text-align:center
ainline-
los elementos .. tales como texto.Agregue la línea
display: table-cell;
a su contenido CSS para ese div.Solo las celdas de la tabla admiten
vertical-align: middle;
, pero puede dar esa definición [table-cell] a la div ...Un ejemplo en vivo está aquí: http://jsfiddle.net/tH2cc/
fuente
position
es absoluto o fijo. Ver: jsfiddle.net/tH2cc/1636Siempre uso el siguiente CSS para un contenedor, para centrar su contenido horizontal y verticalmente.
Véalo en acción aquí: https://jsfiddle.net/yp1gusn7/
fuente
Puedes probar un código muy fácil para esto:
Enlace Codepen: http://codepen.io/santoshkhalse/pen/xRmZwr
fuente
Dele esta clase CSS al <div> objetivo:
fuente
Puede usar la
flex
propiedad en el elemento primariodiv
y agregar lamargin:auto
propiedad a los elementos secundarios:Puede ver más opciones
flex
aquí: https://css-tricks.com/snippets/css/a-guide-to-flexbox/fuente
Enfoque 1
Enfoque 2
Enfoque 3
fuente
fuente
fuente
fuente
fuente
Esto funciona para mí (probado bien!):
HTML:
CSS:
Puede elegir otros valores que no sean 50%. Por ejemplo, 25% para centrarse en el 25% de los padres.
fuente
fuente
Puedes probar los siguientes métodos:
Si tiene una sola palabra o una oración de línea, entonces el siguiente código puede hacer el truco.
Tener un texto dentro de una etiqueta div y darle una identificación. Defina las siguientes propiedades para esa identificación.
Nota: Asegúrese de que la propiedad de altura de línea sea la misma que la altura de la división.
Imagen
Pero, si el contenido es más de una sola palabra o una línea, entonces esto no funciona. Además, habrá momentos en los que no podrá especificar el tamaño de una división en px o% (cuando la división es realmente pequeña y desea que el contenido esté exactamente en el medio).
Para resolver este problema, podemos probar la siguiente combinación de propiedades.
Imagen
Estas 3 líneas de código establecen el contenido exactamente en el medio de una división (independientemente del tamaño de la pantalla). El "align-items: center" ayuda en el centrado vertical mientras que "justify-content: center" lo hará centrado horizontalmente.
Nota: Flex no funciona en todos los navegadores. Asegúrese de agregar los prefijos de proveedor adecuados para obtener soporte adicional del navegador.
fuente
CUADRÍCULA
Mostrar fragmento de código
fuente
Ajuste de altura de línea para obtener la alineación vertical.
fuente
Esta debería ser la respuesta correcta. Más limpio y simple:
fuente
Aplicar estilo:
Su texto estaría centrado independientemente de su longitud.
fuente
Esto funcionó para mí:
fuente
Para mí esta fue la mejor solución:
HTML:
CSS:
fuente
fuente
¡Un código realmente simple que funciona para mí! Solo una línea y su texto estará centrado horizontalmente.
El resultado se ve así:
Vote esta respuesta si funciona solo para ahorrar tiempo a los desarrolladores que buscan soluciones fáciles. ¡Gracias! :)
fuente
Prueba el siguiente ejemplo. He agregado ejemplos para cada categoría: horizontal y vertical.
fuente