Ejemplo de centrado vertical y horizontal con CSS

5
(2)

Publicado

Aviso importante web en obras

Es posible que el contenido que estás visualizando tenga un formato un poco raro o que se haya perdido algún contenido. Esto se debe a que en 2023/09 decidí renovar la página y con más de 1000 escritos el trabajo de irlos revisando uno por uno es agotador. Poco a poco iré corrigiendo todos los contenidos. ¡Gracias por la comprensión!

Ejemplo de centrado vertical y horizontal con CSS 1

La mejor forma de centrar una caja verticalmente y horizontalmente es mediante CSS.

Para ello es necesario entender el funcionamiento del posicionamiento relativo y absoluto en un documento web.

En caso de tener estos conceptos un poco oxidados en esta lectura lo encontraréis explicado con todo detalle.

En el ejemplo que se expone a continuación se ha decidido centrar una caja que a su vez está centrada dentro de otra caja.

Se hace así para ilustrar con mayor amplitud el comportamiento del posicionamiento absoluto.

Recordar también que un centrado horizontal funciona de modo completamente distinto a uno vertical.[blockquote text=»Atención porqué el centrado vertical detallado en este ejemplo sigue una estrategia muy distinta al centrado horizontal mediante la propiedad margin: auto» show_quote_icon=»no» text_color=»#ffffff» background_color=»#045e67″]

Como centrar horizontal y vertical al mismo tiempo

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <meta name="description" content="Centrado horizontal y vertical de una caja">
        <meta name="author" content="Francesc Ricart">
        <title>Ejemplo de centrado vertical y horizontal</title>
        <style>

            *{
                margin:0;
                padding:0;
                box-sizing:border-box;
            }
            .contenedor{
                width:400px;
                height:400px;
                background-color:#ff00ff;
                position:relative;    
            }
        
            .caja{
                width:100px;
                height:100px;
                background-color:#00ff00;
                position:absolute;
                top:50%;
                left:50%;
                margin-left:-50px;
                margin-top:-50px;
            }
            
            .cajita{
                width:40px;
                height:40px;
                background-color:#f0000f;
                position:absolute;
                top:50%;
                left:50%;
                margin-left:-20px;
                margin-top:-20px;
            }
            
        </style>
    
    </head>
    <body>
        
    <div class="contenedor">
        <div class="caja">
            <div class="cajita">    
            </div>
        </div>
    </div>
   
    </body>
</html>

[vc_custom_heading text=»Código genérico» font_container=»tag:h3|text_align:left» use_theme_fonts=»yes»]En el html podéis observar una caja de nombre contenedor, otra de nombre caja y finalmente una de nombre cajita. Se trata de 3 divs cada uno dentro del anterior.

En el CSS observar el uso de un selector universal para eliminar todos los paddings y márgenes que puedan venir por el navegador y el uso de box-sizing para garantizar que el width o height que indiquemos sea el real incluyendo margins y paddings en caso de usarlos.

Todas las cajas son cuadradas y tienen un ancho y una altura definidas.

A todas se les ha dado un color característico.[vc_custom_heading text=»Código importante» font_container=»tag:h3|text_align:left» use_theme_fonts=»yes»]En primer cabe recordar que el posicionamiento absoluto requiere de una caja a su mismo tiempo posicionada.

En caso de no encontrar ninguna caja la caja de referencia termina siendo por defecto el body del documento web.

Para evitar que suceda esto a la caja contenedor (en fucsia) se le ha dado un posicionamiento relative.

Así, evitamos que el div de nombre caja se posicione respecto del body en lugar del contenedor.

En caja hemos puesto un posicionamiento absolute y en cajita también.

Para centrar caja respecto de contenedor hemos usado las propiedades top y left al 50%. Sin embargo al hacer esto el vértice superior izquierdo de caja (la que sería la referencia 0,0) se ha posicionado justo en el centro de contenedor.

Todavía no esta centrada pero estamos muy próximos. Falta un pequeño desplazamiento de caja que conseguiremos mediante margin superior e izquierdo negativos. Los navegadores modernos son capaces de entender esta instrucción. Versiones antiguas de explorer pueden dar problemas.

El desplazamiento mediante margin negativo es exactamente width/2 a la izquierda y height/2 superior(de este modo se desplazan la mitad para un lado y para arriba.

Para finalizar se ha repetido exactamente el mismo procedimiento con cajita tomando como punto de referencia para el desplazamiento absoluto caja. Como caja ya tiene un position:absolute, cajita entiende sin problemas sobre que punto de referencia se posiciona.

El resultado final se observa en la imagen:
Ejemplo de centrado vertical y horizontal con CSS 2
¡Hola!

Querido lector,

ahora sólo queda practicar.

¡Si te ha gustado este contenido te animo a seguirme en mi perfil de empresa de Linkedin!

  1. Avatar de Yosnel
    Yosnel

    Muy bueno el ejemplo para entender el centrado. Sin embargo como recomendación sería bueno llegar a una conclusión basado el cálculo matemático que ha sucedido en el proceso interno para entender un poco el porqué es -50px o -20 px de márgenes en este caso y no 60 o 34 o -230…etc.
    Me refiero a dibujar gráficas que representen los valores que tiene en pixeles por ejemplo la caja «caja» respecto a la caja «contenedor» antes de aplicar el margin left o top «antes del centrado» y «después de centrar». Asi uno se da cuenta porque el -50 y el -20

    Tomando el ejemplo del «contenedor» y «caja» (CENTRADO HORIZONTAL FINAL)
    Antes de:
    El margen left de «caja» con respecto a «contenedor» es 200px (tomando referencia el vértice superior izquierdo de la caja 0:0. Por tanto quedarían otros 200px que serían el ancho de la caja + el resto que quedaría para sumar 400px en total. Es decir la fórmula mátemática sería:

    400px = 200px + 100px (ancho de la caja) + 100px (ancho restante).

    Si divido el ancho de la «caja» en 2 tendría 50px. Estos 50px debo restárselo a los primeros 200px y el otro 50px sumárselo a los 100px restante. Y por esa razón se centra la caja horizontalmente.

    Despues de:

    400px = (200px – 50px) + 100px + (50xp + 100px) /* Los 100px del medio serian el ancho que tendría la caja «caja» y
    que debo temerlo en cuenta la formula por esta caja es real en el
    espacio */

    RESUMEN Y CONCLUSION: La estrategia y conclusión para otros ejemplos o situaciones es:
    1- Debo utilizar el posicionamiento absoluto de la caja contenida.
    2- Aplicar la propiedad Top y el Left a un 50% de la caja contenida.
    3- Por ultimo dividir el ancho de la caja contenida en 2 y este valor sería sus márgenes negativos left y Top.

    De esta forma se pudiera aplicar estos centrados a otras situaciones reales y ver que es lo que sucede. La gente seguiría una lógica de solución. ES MI RECOMENDACION PARA ESTOS EJEMPLOS TAN BUENOS QUE HAS HECHO.

    1. Avatar de Francesc Ricart

      ¡Muchísimas gracias por tu comentario tan elaborado!
      Sinceramente creo que puede ayudar a much@s
      Saludos,
      🙂

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *