Cómo centrar elementos
- Colocar un elemento en el centro dentro de su elemento padre ha sido durante mucho tiempo un problema complicado.
- A medida que CSS ha evolucionado, se han ofrecido diversas soluciones y hoy en día hay muchas opciones para elegir.
- Este tutorial ayuda a entender los trade-offs entre distintos enfoques y ofrece una estrategia para manejar el centrado en todo tipo de escenarios.
Centrado con márgenes automáticos
- Cuando se quiere colocar un elemento en el centro horizontalmente, se pueden usar márgenes con el valor
auto.
- Es necesario limitar el ancho del elemento, y
fit-content hace que el elemento ajuste su tamaño al contenido.
- Si se usa la propiedad
margin-inline, se pueden establecer al mismo tiempo margin-left y margin-right en auto.
Centrado con Flexbox
- Flexbox ofrece mucho control para distribuir grupos de ítems a lo largo del eje principal.
- Permite centrar un solo elemento tanto horizontal como verticalmente, y el centrado se mantiene incluso cuando los elementos hijos no caben dentro del contenedor.
- La propiedad
flex-direction permite controlar la dirección en que se apilan varios elementos hijos.
Centrado dentro del viewport
- Hay casos en los que un elemento debe centrarse dentro del viewport y no dentro de un contenedor padre.
- Usando
position: fixed e inset: 0px, se puede fijar el elemento al viewport y luego centrarlo horizontal y verticalmente con margin: auto.
Centrado de elementos con tamaño desconocido
- Cuando no se conoce explícitamente el tamaño del elemento, se puede usar
fit-content para reducirlo al tamaño de su contenido.
Centrado con CSS Grid
- La forma más concisa de centrar un elemento horizontal y verticalmente con CSS Grid es usar la propiedad
place-content: center.
Diferencias con Flexbox
- CSS Grid usa un algoritmo de layout diferente, y en algunos casos esa complejidad adicional puede ser un problema.
- Mientras que Flexbox calcula los porcentajes con base en el elemento padre, CSS Grid los calcula con base en la celda de la cuadrícula.
Centrado de una pila de elementos
- Con CSS Grid se pueden asignar varios elementos a la misma celda, lo que hace que se apilen de atrás hacia adelante.
Centrado de texto
- El texto recibe un tratamiento especial en CSS, y puede centrarse usando la propiedad
text-align.
El futuro del centrado
- La propiedad
align-content también se está implementando en el layout Flow, lo que permite controlar la alineación del contenido en la dirección de bloque.
Más allá de los patrones
- Si se entiende CSS a profundidad, se pueden resolver problemas con intuición en lugar de depender de la memoria.
Cómo decidir qué método usar
- Si quieres centrar horizontalmente un solo elemento, puedes usar la estrategia de márgenes automáticos del layout Flow.
- Para centrar una interfaz flotante como un modal o un banner, se puede usar el layout Positioned junto con márgenes automáticos.
- Para centrar una pila de elementos, se puede usar CSS Grid.
- Para centrar texto, se puede usar
text-align, y también puede combinarse con otros métodos.
- En la mayoría de las demás situaciones, se puede usar Flexbox. Es el método más versátil y permite centrar uno o varios hijos en horizontal y vertical.
Opinión de GN⁺
- Lo más importante de este artículo es que ayuda a entender los distintos métodos de centrado en CSS.
- Gracias a la evolución de CSS, tareas de centrado que antes eran complejas ahora son mucho más simples, lo que resulta de gran ayuda para los desarrolladores web.
- Entender y aprovechar tecnologías modernas de CSS como Flexbox y CSS Grid se ha vuelto una habilidad esencial para el diseño web y la maquetación.
3 comentarios
Ahora que lo pienso, de repente también me molesta que en GeekNews los artículos no estén centrados ;_; jaja
Yo uso mucho
place-items: center;, pero veo que hay varios métodos más.Comentarios de Hacker News
Resumen del primer comentario:
<table>, pero con CSS esto se siente difícil.Resumen del segundo comentario:
Resumen del tercer comentario:
displayypositionson fundamentales para aprender posicionamiento.Resumen del cuarto comentario:
Resumen del quinto comentario:
Resumen del sexto comentario:
Resumen del séptimo comentario:
Resumen del octavo comentario:
Resumen del noveno comentario:
position: absolute,left: 50%,transform: translateX(-50%).Resumen del décimo comentario:
diven CSS le parecía demasiado difícil.