Translate

martes, 30 de julio de 2024

Tutorial Basico de Flexbox en CSS

Flexbox, o Flexible Box Layout, es una herramienta poderosa para diseñar y alinear elementos en una interfaz web. Permite distribuir el espacio entre elementos y alinear contenido de manera eficiente en un contenedor.


Conceptos Fundamentales

Contenedor Flex

Un contenedor flex es el elemento que usa display: flex; o display: inline-flex;. Los elementos hijos de este contenedor son llamados ítems flexibles.

Ítems Flex

Los ítems flex son los elementos hijos del contenedor flex que se alinean y distribuyen el espacio de acuerdo con las propiedades del contenedor.

Propiedades del Contenedor Flex

Display: flex;

Define el contenedor como un contenedor flex. Usa display: inline-flex; si quieres que el contenedor se comporte como un elemento en línea.

.container {

  display: flex; /* O inline-flex */

}


Flex-direction

Establece la dirección principal de los ítems flex.

    row: Los ítems se alinean en una fila horizontal (predeterminado).

    column: Los ítems se alinean en una columna vertical.

    row-reverse: Los ítems se alinean en una fila horizontal en orden inverso.

    column-reverse: Los ítems se alinean en una columna vertical en orden inverso.

.container {

  flex-direction: row; /* O column, row-reverse, column-reverse */

}

Flex-wrap

Determina si los ítems deben ajustarse a múltiples líneas cuando no hay suficiente espacio en una sola línea.

    nowrap: Los ítems no se envuelven (predeterminado).

    wrap: Los ítems se envuelven en varias líneas.

    wrap-reverse: Los ítems se envuelven en varias líneas en el orden inverso.


.container {

  flex-wrap: wrap; /* O nowrap, wrap-reverse */

}

Flex-flow

Es una propiedad abreviada para flex-direction y flex-wrap.

.container {

  flex-flow: row wrap; /* Equivalente a flex-direction: row; flex-wrap: wrap; */

}

Justify-content

Alinea los ítems flex a lo largo del eje principal (horizontal por defecto).

    flex-start: Alinea al inicio.

    center: Centra los ítems.

    space-between: Distribuye el espacio entre los ítems.

    space-around: Distribuye el espacio alrededor de los ítems.

    space-evenly: Distribuye el espacio uniformemente entre los ítems.

.container {

  justify-content: center; /* O flex-start, space-between, space-around, space-evenly */

}

Align-items

Alinea los ítems a lo largo del eje transversal (vertical por defecto).

    stretch: Estira los ítems para llenar el contenedor (predeterminado).

    flex-start: Alinea al inicio.

    center: Centra los ítems.

    flex-end: Alinea al final.

    baseline: Alinea según la línea base del contenido.

.container {

  align-items: center; /* O stretch, flex-start, flex-end, baseline */

}


Align-content

Alinea las líneas del contenedor flex cuando hay espacio adicional en el eje transversal.

    flex-start: Alinea al inicio.

    center: Centra las líneas.

    space-between: Distribuye el espacio entre las líneas.

    space-around: Distribuye el espacio alrededor de las líneas.

    stretch: Estira las líneas para llenar el contenedor.

.container {

  align-content: space-between; /* O flex-start, center, space-around, stretch */

}

Align-items vs align-self

    align-items: Aplica a todos los ítems en el contenedor.

    align-self: Permite ajustar la alineación de un ítem individual.

.item {

  align-self: flex-end; /* O auto, flex-start, center, baseline, stretch */

}

Propiedades de los Ítems Flex

Flex-grow

Define la capacidad de un ítem para crecer en relación con los demás ítems cuando hay espacio extra.

    flex-grow: 1;: El ítem crecerá para llenar el espacio disponible.

.item {

  flex-grow: 1; /* O cualquier número positivo */

}

Flex-shrink

Define la capacidad de un ítem para reducir su tamaño cuando el espacio es limitado.

    flex-shrink: 1;  El ítem se reducirá si es necesario.

.item {

  flex-shrink: 1; /* O cualquier número positivo */

}

Flex-basis

Define el tamaño inicial de un ítem antes de que el espacio extra se distribuya.

    flex-basis: 200px;: El ítem ocupará 200px inicialmente.

.item {

  flex-basis: 200px; /* O cualquier valor de tamaño */

}


Flex

Es una propiedad abreviada para flex-grow, flex-shrink, y flex-basis.

.item {

  flex: 1 1 200px; /* Equivalente a flex-grow: 1; flex-shrink: 1; flex-basis: 200px; */

}

Ejemplos Prácticos

Diseño de una Barra de Navegación


<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Flexbox Navbar</title>

    <style>

        .navbar {

            display: flex;

            justify-content: space-between;

            align-items: center;

            background-color: #336699;

            padding: 10px;

        }


        .navbar .logo {

            color: white;

            font-size: 20px;

        }


        .navbar .menu {

            display: flex;

            gap: 15px;

        }


        .navbar .menu a {

            color: white;

            text-decoration: none;

            font-size: 16px;

        }

    </style>

</head>

<body>

    <div class="navbar">

        <div class="logo">MySite</div>

        <div class="menu">

            <a href="#">Home</a>

            <a href="#">About</a>

            <a href="#">Contact</a>

        </div>

    </div>

</body>

</html>


Diseño de una Tarjeta de Producto

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Flexbox Card</title>

    <style>

        .card {

            display: flex;

            flex-direction: column;

            border: 1px solid #ccc;

            border-radius: 5px;

            overflow: hidden;

            width: 300px;

            box-shadow: 0 2px 5px rgba(0,0,0,0.1);

        }


        .card img {

            width: 100%;

            height: auto;

        }


        .card-content {

            padding: 15px;

            display: flex;

            flex-direction: column;

            justify-content: space-between;

        }


        .card-title {

            font-size: 18px;

            font-weight: bold;

        }


        .card-description {

            font-size: 14px;

            color: #666;

        }


        .card-price {

            font-size: 16px;

            font-weight: bold;

            color: #336699;

        }

    </style>

</head>

<body>

    <div class="card">

        <img src="product.jpg" alt="Product Image">

        <div class="card-content">

            <div class="card-title">Product Title</div>

            <div class="card-description">This is a description of the product.</div>

            <div class="card-price">$29.99</div>

        </div>

    </div>

</body>

</html>


Consejos Adicionales

    Usa Flexbox para layouts simples y medios: Flexbox es ideal para distribuciones de una sola dimensión (una fila o una columna). Para layouts más complejos (dos dimensiones), considera usar CSS Grid.

    Combina Flexbox con otras técnicas: A menudo, Flexbox se combina con otras técnicas como el diseño de columnas con CSS Grid para lograr el diseño deseado.

    Prueba en diferentes navegadores: Aunque Flexbox es ampliamente compatible, verifica tu diseño en diferentes navegadores para asegurar una experiencia consistente.

Espero que este tutorial te sea útil para entender y aplicar Flexbox en tus proyectos web. 

¡No dudes en practicar y experimentar con las propiedades para dominar esta poderosa herramienta de diseño!

No hay comentarios.:

Publicar un comentario