Guia de CSS Flexbox

CSS Flexbox en un modelo de layout que funciona con respecto al eje X y Y (filas y columnas)., para el cual requerimos un contenedor o container padre y los elementos o items hijos que conforma todo el modelo.

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Flex container</title>
    <style>
        .container{
            display: flex;
            background-color: DodgerBlue;
        }
        .container > div {
            background-color: #f1f1f1;
            width: 100px;
            margin: 10px;
            text-align: center;
            line-height: 75px;
            font-size: 30px;
        }
    </style>
</head>
<body>
    <div class="container">
        <div>1</div>
        <div>2</div>
        <div>3</div>
    </div>
</body>
</html>

El contenedor padre tiene la propiedad display: flex;

.container{
    display: flex;
}

CSS Flexbox propiedades

  • flex-direction row (default) | row-reverse  | column | column-reverse
  • flex-wrap nowrap (default) | wrap | wrap-reverse
  • flex-flow flex-direction y flex-wrap
  • justify-content flex-start (default) | center | flex-end | space-between | space-around | space-evenly
  • align-items flex-start (default) | center | flex-end | stretch | baseline
  • align-content flex-start (default) | center | flex-end | stretch | space-between | space-around | space-evenly

flex-direction

Define en qué dirección (filas o columnas) se distribuirán los elementos dentro del contenedor.

.container {
  display: flex;
  flex-direction: row | row-reverse  | column | column-reverse;
}

flex-direction: row;

Acomoda los elementos horizontalmente de izquierda a derecha esta establecida por defecto

.container{
    display: flex;
    flex-direction: row;
}

flex-direction: row-reverse;

Acomoda los elementos horizontalmente de derecha a izquierda

.container{
    display: flex;
    flex-direction: row-reverse;
}

flex-direction: column;

Acomoda los elementos verticalmente de arriba a abajo

.container{
    display: flex;
    flex-direction: column;
}

flex-direction: column-reverse;

Acomoda los elementos verticalmente de abajo hacia arriba

.container{
    display: flex;
    flex-direction: column-reverse;
}

flex-wrap

Esta propiedad determina si los elementos se deben de ajustar o no al contenedor, es decir si saltan a la siguiente fila o columna.

.container {
  display: flex;
  flex-wrap: nowrap | wrap | wrap-reverse;
}

flex-wrap: nowrap;

Establece que los elementos no se distribuirán y se ajustaran en el contenedor este valor esta establecido por defecto (se acomodan como pueden).

.container {
  display: flex;
  flex-wrap: nowrap;
}

flex-wrap: wrap;

Los elementos se acomodaran en el contenedor., si los elementos supera el tamaño del este saltan a la siguiente fila o columna.

.container {
  display: flex;
  flex-wrap: wrap;
}

flex-wrap: wrap-reverse;

Los elementos se acomodaran en orden inverso en el espacio del contenedor, si los elementos supera el tamaño del contenedor saltan a la siguiente fila o columna.

.container {
  display: flex;
  flex-wrap: wrap-reverse;
}

flex-flow

Es una combinación de las propiedades flex-direction y flex-wrap con sus valores flex-flow: flex-direction flex-wrap;

.container {
  display: flex;
  /*
  flex-direction: row (default) | row-reverse  | column | column-reverse
  flex-wrap: nowrap (default) | wrap | wrap-reverse
  */
  flex-flow: row wrap;
}

justify-content

Se usa para alinear el contenido

.container {
  display: flex;
  justify-content: flex-start | center | flex-end | space-between | space-around | space-evenly;
}

justify-content: flex-start;

Aline a los elementos al inicio y a la izquierda del contenedor (por defecto)

.container {
  display: flex;
  justify-content: flex-start;
}

justify-content: center;

Aline a los elementos al centro horizontalmente del contenedor

.container {
  display: flex;
  justify-content: center;
}

justify-content: flex-end;

Aline a los elementos al final y a la derecha del contenedor

.container {
  display: flex;
  justify-content: flex-end;
}

justify-content: space-between;

Organiza los elementos con espaciado y acomoda el primer elemento y el ultimo a las esquinas

.container {
  display: flex;
  justify-content: space-between;
}

justify-content: space-around;

Agrega un espaciado antes, después y entre cada elemento

.container {
  display: flex;
  justify-content: space-around;
}

justify-content: space-evenly;

Agrega un espacio del mismo tamaño antes, entre y después de cada elemento

.container {
  display: flex;
  justify-content: space-evenly;
}

align-items

Se usa para alinear de manera vertical los elementos del contenedor

.container {
  display: flex;
  align-items: flex-start | center | flex-end | stretch | baseline;
}

align-items: flex-start;

Alinea los elementos arriba de todo y al inicio este valor esta definido por defecto

.container {
  display: flex;
  align-items: flex-start;
}

align-items: center;

Centra los elementos verticalmente

.container {
  display: flex;
  align-items: center;
}

align-items: flex-end;

Alinea los elementos al final y abajo

.container {
  display: flex;
  align-items: flex-end;
}

align-items: stretch;

No lo alinea hace que ocupe todo el alto que pueda del contenedor

.container {
  display: flex;
  align-items: stretch;
}

align-items: baseline;

Alinea al los elementos con respecto al contenido

.container {
  display: flex;
  align-items: baseline;
}

align-content

Se usa para alinear las filas

.container {
  display: flex;
  align-content: flex-start | center | flex-end | stretch | space-between | space-around | space-evenly;
  
}

Para los siguientes ejemplos use un height: 350px; y flex-wrap: wrap; , para demostrar mejor la propiedad align-content.

align-content: flex-start;

Alinea la filas arriba, esta propiedad esta por defecto.

.container {
  display: flex;
  align-content: flex-start;
}

align-content: center;

Centra verticalmente las filas

.container {
  display: flex;
  align-content: center;
}

align-content: flex-end;

Alinea las filas abajo

.container {
  display: flex;
  align-content: flex-end;
}

align-content: stretch;

Todas las filas intentan ocupar todo el contenido, se distribuyen el alto de manera que ocupan todo el contenedor

.container {
  display: flex;
  align-content: stretch;
}

align-content: space-between;

Deja un espacio entre cada fila ajustando a todo lo alto del contenedor

.container {
  display: flex;
  align-content: space-between;
}

align-content: space-around;

Es parecido al space-between con la diferencia que deja un espacio al inicio y al final de las filas

.container {
  display: flex;
  align-content: space-around;
}

align-content: space-evenly;

Deja el mismo tamaño de espacio entre cada fila, al inicio y al final.

.container {
  display: flex;
  align-content: space-evenly;
}

Centrado perfecto

<!DOCTYPE html>
<html lang="es">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Centrado perfecto</title>
    <style>
      .container  {
        display: flex;
        justify-content: center;
        align-items: center;
        height: 100vh;
        background-color: DodgerBlue;
      }
      .container > div {
        width: 70px;
        height: 70px;
        background-color: white;
      }
    </style>
  </head>
  <body>
    <div class="container">
      <div></div>
    </div>
  </body>
</html>

Aquí tanto la propiedad justify-content y align-items tendrán el valor de center, logrando centrar perfectamente el elemento., le agregue el alto de navegador con height: 100vh;

Propiedades items (elementos)

Los elementos hijos tienen las siguientes propiedades:

  • order
  • flex-grow
  • flex-shrink
  • flex-basis
  • flex flex-grow flex-shrink flex-basis
  • align-self auto(default) | flex-start | flex-end | center | baseline | stretch

order

Esta propiedad especifica el orden de los elementos, por defecto es 0 cero

.item {
  order: [numero]; 
}

El elemento uno tendrá un order = 3, dos = 2, tres = 4 y cuatro = 1

flex-grow

Especifica cuánto crecerá un elemento en relación con el resto de los elementos, por defecto es 0 cero

.item {
  flex-grow: [numero]; 
}

El elemento uno y dos tendrá un flex-grow = 1, y el tres flex-grow = 8

flex-shrink

Especifica cuánto se reducirá un elemento en relación con el resto de los elementos

.item {
  flex-shrink: [numero]; 
}

No permitirá que el tercer elemento se encoja tanto como los otros elementos ya que se le asigno flex-shrink= 0

flex-basis

Especifica la longitud inicial de un elemento

.item {
  flex-basis: [numero]; 
}

El elemento tres tendrá flex-basis= 200px;

flex

Es una propiedad abreviada (shorthand) de las propiedades flex-grow, flex-shrink y flex-basis

.item {
  flex: flex-grow flex-shrink flex-basis; 
}

El elemento tres tendrá los valores de flex-grow = 0, flex-shrink = 0 y flex-basis = 200px

align-self

Especifica la alineación del elemento seleccionado dentro del contenedor. La propiedad align-self anula la alineación predeterminada establecida por la propiedad align-items del contenedor.

.item {
  align-self: auto | flex-start | flex-end | center | baseline | stretch; 
}

El elemento:

  • Uno tendrá el valor de flex-start
  • Dos flex-end
  • Tres center
  • Cuatro baseline
  • Y cinco stretch

View more articles
  • Como usar Esptool

    Esptool es un conjunto de herramientas creadas en Python para programar las placas de desarrollo ESP8266, ESP8585, ESP32, ESP32-C2, ESP32-C3, ESP32-C6, ESP32-H2, ESP32-S2 y ESP32-S3. 1.- Instala la ultima versión de Python (ocupas 3.10 o superior., sigue la guía) 2.- Instala Visual Studio Code (Sigue el tutorial) 3.- Crea una carpeta por ejemplo esptool y…

  • Como configurar un entorno de desarrollo para el lenguaje C / C++

    Para crear un entorno de trabajo para poder jugar con el lenguaje C recomiendo 1. Instalar compilador C / C++ Para Windows Descarga e instala MinGW Ejecuta MinGW Installer Manager selecciona los paquetes básicos e instálalos (durara algunos minutos ya que los descarga) Agregar MinGW al PATH Es importante agregarlo a las variables del sistema…

  • Python 101: Instalar entorno de trabajo IDE Visual Studio Code

    Existe un sin fin de editores de código IDE (Integrated development environment / Entorno de desarrollo integrado) especiales para Python como: Pero la que recomiendo es Visual Studio Code (descarga e instala el adecuado para tu Sistema Operativo Windows, Linux o Mac) E instala estas extensiones: En VSC le damos clic al Icono de Extensiones…