Bootstrap

Bootstrap

Tutorial Bootstrap: Flexbox en Bootstrap

Bootstrap: Aprende Flexbox en Bootstrap para crear layouts responsivos y eficientes. Descubre cómo gestionar la disposición y alineación de elementos con utilidades Flex.

Introducción a Flexbox en Bootstrap CSS

Flexbox es un módulo de diseño de CSS que proporciona una manera más eficiente de distribuir espacio entre los elementos de un contenedor y alinear los elementos dentro del mismo. Bootstrap integra de manera completa las funcionalidades de Flexbox, permitiendo la creación de diseños flexibles y adaptativos de forma sencilla y rápida.

El concepto básico de Flexbox se basa en dos componentes principales: el contenedor flexible (flex container) y los elementos flexibles (flex items). El contenedor flexible es un elemento que contiene uno o más elementos flexibles. Al aplicar las propiedades de Flexbox al contenedor, se pueden controlar la dirección, alineación y distribución de los elementos flexibles.

Para utilizar Flexbox en Bootstrap, se emplean las clases utilitarias predefinidas que simplifican su uso sin necesidad de escribir CSS personalizado. A continuación, se presentan algunas de las clases más importantes y su funcionamiento:

  • d-flex: establece un elemento como contenedor flexible.
  • flex-row: establece la dirección de los elementos flexibles en una fila horizontal (por defecto).
  • flex-column: establece la dirección de los elementos flexibles en una columna vertical.
  • justify-content-*: controla la distribución del espacio entre y alrededor de los elementos flexibles a lo largo del eje principal. Las opciones incluyen start (inicio), end (final), center (centro), between (entre), around (alrededor) y evenly (igualmente).
  • align-items-*: controla la alineación de los elementos flexibles a lo largo del eje transversal. Las opciones incluyen start, end, center, baseline y stretch.
  • flex-wrap: permite que los elementos flexibles se envuelvan en varias líneas si es necesario.

Ejemplo básico de uso de Flexbox en Bootstrap:

<div class="d-flex flex-row justify-content-between align-items-center">
  <div class="p-2">Elemento 1</div>
  <div class="p-2">Elemento 2</div>
  <div class="p-2">Elemento 3</div>
</div>

3 elementos flex

En este ejemplo, el contenedor div se establece como un contenedor flexible con la clase d-flex. Los elementos flexibles dentro del contenedor se disponen en una fila (flex-row), se distribuyen equitativamente con espacios entre ellos (justify-content-between) y se alinean al centro a lo largo del eje transversal (align-items-center).

Además de las clases utilitarias, Bootstrap ofrece combinaciones avanzadas para crear diseños complejos utilizando Flexbox. Por ejemplo, la clase order-* permite cambiar el orden visual de los elementos flexibles sin alterar el HTML original:

<div class="d-flex flex-row">
  <div class="p-2 order-3">Elemento 1</div>
  <div class="p-2 order-1">Elemento 2</div>
  <div class="p-2 order-2">Elemento 3</div>
</div>

Elementos con distinto orden

En este caso, aunque Elemento 1 aparece primero en el HTML, se renderiza en tercer lugar debido a la clase order-3. Elemento 2 se renderiza primero y Elemento 3 en segundo lugar, gracias a las clases order-1 y order-2, respectivamente.

Flexbox también permite la creación de elementos flexibles que crecen o encogen según el espacio disponible utilizando las clases flex-grow-* y flex-shrink-*. Estas clases son útiles para crear diseños adaptativos:

<div class="d-flex">
  <div class="p-2 flex-grow-1">Elemento 1 (crece)</div>
  <div class="p-2">Elemento 2</div>
  <div class="p-2">Elemento 3</div>
</div>

Elemento creciente

Aquí, Elemento 1 crecerá para ocupar el espacio disponible, mientras que Elemento 2 y Elemento 3 mantendrán su tamaño original.

El uso de Flexbox en Bootstrap permite crear diseños de manera eficiente y adaptativa, aprovechando las utilidades predefinidas para controlar la disposición y alineación de los elementos sin necesidad de escribir CSS personalizado.

Contenedor Flex y su configuración en Bootstrap

Para utilizar el módulo Flexbox en Bootstrap, es esencial configurar correctamente un contenedor flex utilizando las clases de utilidad disponibles. Bootstrap ofrece una variedad de clases para facilitar la creación y gestión de elementos flexibles y adaptativos. A continuación, se describen las configuraciones principales para un contenedor flex:

Habilitar comportamientos Flex

Para convertir un elemento en un contenedor flex, aplica las clases .d-flex o .d-inline-flex. Estas clases transforman los elementos hijos directos en elementos flexibles.

<div class="d-flex p-2">
  ¡Soy un contenedor flex!
</div>
<div class="d-inline-flex p-2">
  ¡Soy un contenedor flex en línea!
</div>

Bootstrap también proporciona variaciones adaptativas para habilitar comportamientos flex en distintos tamaños de pantalla:

<div class="d-sm-flex p-2">Flex en pantalla pequeña</div>
<div class="d-md-flex p-2">Flex en pantalla mediana</div>
<div class="d-lg-flex p-2">Flex en pantalla grande</div>
<div class="d-xl-flex p-2">Flex en pantalla extra grande</div>
<div class="d-xxl-flex p-2">Flex en pantalla extra extra grande</div>

Dirección de los elementos Flex

La dirección de los elementos dentro de un contenedor flex se puede controlar usando las utilidades de dirección. Por defecto, la dirección es horizontal (row), pero puedes ajustarla según tus necesidades:

<div class="d-flex flex-row mb-3">
  <div class="p-2">Elemento Flex 1</div>
  <div class="p-2">Elemento Flex 2</div>
  <div class="p-2">Elemento Flex 3</div>
</div>
<div class="d-flex flex-column">
  <div class="p-2">Elemento Flex 1</div>
  <div class="p-2">Elemento Flex 2</div>
  <div class="p-2">Elemento Flex 3</div>
</div>

Elementos en filas y columnas

Las clases .flex-row y .flex-column pueden ser revertidas utilizando .flex-row-reverse y .flex-column-reverse, respectivamente.

Alineación de elementos Flex

Bootstrap proporciona utilidades para alinear elementos tanto en el eje principal (horizontal) como en el eje secundario (vertical). Para alinear elementos en el eje principal, usa las clases justify-content:

<div class="d-flex justify-content-around">
  <div class="p-2">Elemento 1</div>
  <div class="p-2">Elemento 2</div>
  <div class="p-2">Elemento 3</div>
</div>

Para la alineación en el eje secundario, utiliza las clases align-items:

<div class="d-flex align-items-center">
  <div class="p-2">Elemento 1</div>
  <div class="p-2">Elemento 2</div>
  <div class="p-2">Elemento 3</div>
</div>

Envoltura de elementos Flex

Controla cómo se envuelven los elementos flex en un contenedor con las utilidades de envoltura (wrap). Puedes especificar sin envoltura (nowrap), con envoltura (wrap) o envoltura inversa (wrap-reverse):

<div class="d-flex flex-wrap">
  <div class="p-2">Elemento 1</div>
  <div class="p-2">Elemento 2</div>
  <div class="p-2">Elemento 3</div>
</div>

Orden de los elementos Flex

Modifica el orden visual de los elementos flex con las utilidades de order. Bootstrap proporciona clases para definir el orden del 0 al 5, así como para hacer un elemento el primero o el último.

<div class="d-flex">
  <div class="order-3 p-2">Elemento 1</div>
  <div class="order-1 p-2">Elemento 2</div>
  <div class="order-2 p-2">Elemento 3</div>
</div>

Elementos con orden

Márgenes automáticos

Los márgenes automáticos son útiles para centrar elementos individuales dentro de un contenedor flex. Usando las utilidades de márgenes (.me-auto, .ms-auto), puedes distribuir el espacio entre los elementos flexiblemente:

<div class="d-flex">
  <div class="me-auto p-2">Elemento a la izquierda</div>
  <div class="p-2">Elemento estático</div>
  <div class="ms-auto p-2">Elemento a la derecha</div>
</div>

Elementos a la izquierda, estático y a la derecha

Crecimiento y contracción

Utiliza las utilidades flex-grow y flex-shrink para controlar cómo los elementos flex crecen o se contraen:

<div class="d-flex">
  <div class="p-2 flex-grow-1">Elemento creciente</div>
  <div class="p-2">Elemento estático</div>
</div>
<div class="d-flex">
  <div class="p-2 w-100">Elemento estático</div>
  <div class="p-2 flex-shrink-1">Elemento contrayente</div>
</div>

Estas configuraciones te ayudarán a gestionar y personalizar la disposición de los elementos en tu diseño responsive usando Flexbox en Bootstrap.

Alineación y distribución de elementos Flex

En Bootstrap, la alineación y distribución de los elementos flexibles dentro de un contenedor flex se controlan mediante utilidades especiales que permiten modificar tanto el eje principal (main axis) como el eje transversal (cross axis), así como ajustar el espacio adicional. Estas utilidades incluyen justify-content, align-items, align-self, align-content y auto-margins.

La propiedad justify-content se utiliza para alinear elementos en el eje principal. Las clases disponibles son:

  • .justify-content-start
  • .justify-content-end
  • .justify-content-center
  • .justify-content-between
  • .justify-content-around
  • .justify-content-evenly

Ejemplo de uso de estas clases:

<div class="d-flex justify-content-start">
  <div class="p-2">Elemento 1</div>
  <div class="p-2">Elemento 2</div>
  <div class="p-2">Elemento 3</div>
</div>
<div class="d-flex justify-content-end">
  <div class="p-2">Elemento 1</div>
  <div class="p-2">Elemento 2</div>
  <div class="p-2">Elemento 3</div>
</div>
<div class="d-flex justify-content-center">
  <div class="p-2">Elemento 1</div>
  <div class="p-2">Elemento 2</div>
  <div class="p-2">Elemento 3</div>
</div>
<div class="d-flex justify-content-between">
  <div class="p-2">Elemento 1</div>
  <div class="p-2">Elemento 2</div>
  <div class="p-2">Elemento 3</div>
</div>
<div class="d-flex justify-content-around">
  <div class="p-2">Elemento 1</div>
  <div class="p-2">Elemento 2</div>
  <div class="p-2">Elemento 3</div>
</div>
<div class="d-flex justify-content-evenly">
  <div class="p-2">Elemento 1</div>
  <div class="p-2">Elemento 2</div>
  <div class="p-2">Elemento 3</div>
</div>

Elementos con diferentes alineaciones

Para la alineación en el eje transversal, se utilizan las clases de align-items:

  • .align-items-start
  • .align-items-end
  • .align-items-center
  • .align-items-baseline
  • .align-items-stretch

Ejemplo de uso de align-items:

<div class="d-flex align-items-start border border-primary" style="height: 100px">
  <div class="p-2 border">Elemento 1</div>
  <div class="p-2 border">Elemento 2</div>
  <div class="p-2 border">Elemento 3</div>
</div>
<div class="d-flex align-items-end border border-primary" style="height: 100px">
  <div class="p-2 border">Elemento 1</div>
  <div class="p-2 border">Elemento 2</div>
  <div class="p-2 border">Elemento 3</div>
</div>
<div class="d-flex align-items-center border border-primary" style="height: 100px">
  <div class="p-2 border">Elemento 1</div>
  <div class="p-2 border">Elemento 2</div>
  <div class="p-2 border">Elemento 3</div>
</div>
<div class="d-flex align-items-baseline border border-primary" style="height: 100px">
  <div class="p-2 border">Elemento 1</div>
  <div class="p-2 border">Elemento 2</div>
  <div class="p-2 border">Elemento 3</div>
</div>
<div class="d-flex align-items-stretch border border-primary" style="height: 100px">
  <div class="p-2 border">Elemento 1</div>
  <div class="p-2 border">Elemento 2</div>
  <div class="p-2 border">Elemento 3</div>
</div>

Elementos alineados

Además de align-items, align-self permite controlar individualmente la alineación de un solo elemento flex en el eje transversal:

  • .align-self-auto
  • .align-self-start
  • .align-self-end
  • .align-self-center
  • .align-self-baseline
  • .align-self-stretch

Ejemplo de uso de align-self:

<div class="d-flex border border-primary" style="height: 100px;">
  <div class="align-self-start p-2 border">Elemento 1</div>
  <div class="align-self-end p-2 border">Elemento 2</div>
  <div class="align-self-center p-2 border">Elemento 3</div>
</div>

Elemento con align-self

align-content gestiona el espacio entre las filas de elementos flex cuando se habilita el wrapping (flex-wrap):

  • .align-content-start
  • .align-content-end
  • .align-content-center
  • .align-content-between
  • .align-content-around
  • .align-content-stretch

Ejemplo de uso de align-content:

<div class="d-flex flex-wrap align-content-start border border-primary" style="height: 100px;">
  <div class="p-2 border">Elemento 1</div>
  <div class="p-2 border">Elemento 2</div>
  <div class="p-2 border">Elemento 3</div>
  <div class="p-2 border">Elemento 4</div>
  <div class="p-2 border">Elemento 5</div>
  <div class="p-2 border">Elemento 6</div>
</div>
<div class="d-flex flex-wrap align-content-end border border-primary" style="height: 100px;">
  <div class="p-2 border">Elemento 1</div>
  <div class="p-2 border">Elemento 2</div>
  <div class="p-2 border">Elemento 3</div>
  <div class="p-2 border">Elemento 4</div>
  <div class="p-2 border">Elemento 5</div>
  <div class="p-2 border">Elemento 6</div>
</div>

Elementos con align-content

Por último, los márgenes automáticos (auto-margins) permiten distribuir el espacio restante de manera flexible usando las clases me-auto y ms-auto:

<div class="d-flex">
  <div class="me-auto p-2">Elemento A la Izquierda</div>
  <div class="p-2">Elemento Estático</div>
  <div class="ms-auto p-2">Elemento A la Derecha</div>
</div>

Orden y crecimiento de los elementos Flex en Bootstrap

Para controlar el orden y el crecimiento de los elementos flexibles dentro de un contenedor en Bootstrap, se proporcionan utilidades específicas que permiten una flexibilidad completa en la disposición de los elementos.

Bootstrap ofrece una serie de clases utilitarias para modificar el orden visual, así como para gestionar el crecimiento y contracción de los elementos en un contenedor flex. Aquí se muestra cómo utilizar estas utilidades de manera avanzada:

Modificar el orden de los elementos

Bootstrap permite cambiar fácilmente el orden visual de los elementos flexibles mediante las utilidades order. Puedes definir el orden de un elemento de 0 a 5, o establecerlo como el primero (order-first) o el último (order-last). Además, hay variaciones adaptativas disponibles según el tamaño de pantalla.

<div class="d-flex">
  <div class="order-3 p-2">Primer elemento</div>
  <div class="order-1 p-2">Segundo elemento</div>
  <div class="order-2 p-2">Tercer elemento</div>
</div>

Variaciones adaptativas para order:

  • .order-0
  • .order-1
  • .order-2
  • .order-3
  • .order-4
  • .order-5
  • .order-first
  • .order-last
  • .order-sm-0, .order-sm-1, ..., .order-sm-last
  • .order-md-0, .order-md-1, ..., .order-md-last
  • .order-lg-0, .order-lg-1, ..., .order-lg-last
  • .order-xl-0, .order-xl-1, ..., .order-xl-last
  • .order-xxl-0, .order-xxl-1, ..., .order-xxl-last
<div class="d-flex">
  <div class="order-last p-2">Último elemento</div>
  <div class="order-first p-2">Primer elemento</div>
  <div class="order-1 p-2">Segundo elemento</div>
</div>

Crecimiento de los elementos (flex-grow)

Utiliza las clases .flex-grow-* para permitir que los elementos crezcan para ocupar el espacio disponible. Las clases .flex-grow-0 y .flex-grow-1 gestionan esta capacidad. Por defecto, ningún elemento crece (.flex-grow-0).

<div class="d-flex">
  <div class="p-2 flex-grow-1">Elemento que crece</div>
  <div class="p-2">Elemento estático</div>
  <div class="p-2">Elemento estático</div>
</div>

Variaciones adaptativas para flex-grow:

  • .flex-grow-0
  • .flex-grow-1
  • .flex-sm-grow-0, .flex-sm-grow-1
  • .flex-md-grow-0, .flex-md-grow-1
  • .flex-lg-grow-0, .flex-lg-grow-1
  • .flex-xl-grow-0, .flex-xl-grow-1
  • .flex-xxl-grow-0, .flex-xxl-grow-1

Contracción de los elementos (flex-shrink)

Las clases .flex-shrink-* permiten que un elemento se contraiga si es necesario para permitir más espacio a otros elementos. Utiliza .flex-shrink-0 y .flex-shrink-1, donde por defecto los elementos no se contraen (.flex-shrink-1).

<div class="d-flex">
  <div class="p-2 w-100">Elemento grande</div>
  <div class="p-2 flex-shrink-1">Elemento que se contrae</div>
</div>

Variaciones adaptativas para flex-shrink:

  • .flex-shrink-0
  • .flex-shrink-1
  • .flex-sm-shrink-0, .flex-sm-shrink-1
  • .flex-md-shrink-0, .flex-md-shrink-1
  • .flex-lg-shrink-0, .flex-lg-shrink-1
  • .flex-xl-shrink-0, .flex-xl-shrink-1
  • .flex-xxl-shrink-0, .flex-xxl-shrink-1

El uso combinado de estas utilidades facilita la creación de layouts complejos y adaptativos, ajustando la disposición y comportamiento de los elementos flexibles de manera avanzada y personalizada.

Certifícate en Bootstrap con CertiDevs PLUS

Ejercicios de esta lección Flexbox en Bootstrap

Evalúa tus conocimientos de esta lección Flexbox en Bootstrap con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.

Todas las lecciones de Bootstrap

Accede a todas las lecciones de Bootstrap y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

Certificados de superación de Bootstrap

Supera todos los ejercicios de programación del curso de Bootstrap y obtén certificados de superación para mejorar tu currículum y tu empleabilidad.

En esta lección

Objetivos de aprendizaje de esta lección

  • Configurar contenedores Flex usando clases de Bootstrap.
  • Controlar la dirección y alineación de elementos Flex.
  • Implementar crecimiento y contracción de elementos.
  • Utilizar márgenes automáticos para distribuir elementos.
  • Aplicar utilidades de orden y envoltura de elementos.