Usa Flex para controlar el diseño de los componentes de Bootstrap 4.
Flexbox
La mayor diferencia entre Bootstrap 3 y Bootstrap 4 es que Bootstrap 4 ahora usa flexbox, en lugar de floats, para manejar el diseño. El módulo de diseño de caja flexible facilita el diseño de una estructura de diseño flexible y receptiva sin utilizar flotador o posicionamiento.
Nota: Flexbox no es compatible con IE9 y versiones anteriores. Si necesitas soporte para IE8-9, usa Bootstrap 3. Es la versión más estable de Bootstrap, y aún es compatible con el equipo para correcciones de errores críticos y cambios de documentación. Sin embargo, no se agregarán nuevas funciones.
Para crear un contenedor flexbox y transformar hijos directos en elementos flex, usa la clase d-flex.
Ejm
<div class="d-flex p-3 bg-secondary text-white">
<div class="p-2 bg-info">Flex item 1</div>
<div class="p-2 bg-warning">Flex item 2</div>
<div class="p-2 bg-primary">Flex item 3</div>
</div>
Para crear un contenedor flexbox en línea, usa la clase d-inline-flex.
Ejm
<div class="d-inline-flex p-3 bg-secondary text-white">
<div class="p-2 bg-info">Flex item 1</div>
<div class="p-2 bg-warning">Flex item 2</div>
<div class="p-2 bg-primary">Flex item 3</div>
</div>
Dirección horizontal
Usa .flex-row para mostrar los elementos flexibles horizontalmente (uno al lado del otro). Esto es por defecto. Usa .flex-row-reverse para alinear a la derecha la dirección horizontal.
Ejm
<div class="d-flex flex-row bg-secondary">
<div class="p-2 bg-info">Flex item 1</div>
<div class="p-2 bg-warning">Flex item 2</div>
<div class="p-2 bg-primary">Flex item 3</div>
</div>
<div class="d-flex flex-row-reverse bg-secondary">
<div class="p-2 bg-info">Flex item 1</div>
<div class="p-2 bg-warning">Flex item 2</div>
<div class="p-2 bg-primary">Flex item 3</div>
</div>
Dirección vertical
Utiliza .flex-column para mostrar los elementos flexibles verticalmente (uno encima del otro), o .flex-column-reversepara invertir la dirección vertical.
Ejm
<div class="d-flex flex-column">
<div class="p-2 bg-info">Flex item 1</div>
<div class="p-2 bg-warning">Flex item 2</div>
<div class="p-2 bg-primary">Flex item 3</div>
</div>
<div class="d-flex flex-column-reverse">
<div class="p-2 bg-info">Flex item 1</div>
<div class="p-2 bg-warning">Flex item 2</div>
<div class="p-2 bg-primary">Flex item 3</div>
</div>
Contenido justificado
Usa las clases .justify-content- * para cambiar la alineación de los elementos flexibles. Las clases válidas son start(default), end, center, between o around.
Ejm
<div class="d-flex justify-content-start">...</div>
<div class="d-flex justify-content-end">...</div>
<div class="d-flex justify-content-center">...</div>
<div class="d-flex justify-content-between">...</div>
<div class="d-flex justify-content-around">...</div>
Relleno / anchos iguales
Use .flex-fill en elementos flexibles para forzarlos en anchos iguales.
Ejm
<div class="d-flex">
<div class="p-2 bg-info flex-fill">Flex item 1</div>
<div class="p-2 bg-warning flex-fill">Flex item 2</div>
<div class="p-2 bg-primary flex-fill">Flex item 3</div>
</div>
Grow (Crecer)
Usa .flex-grow-1 en un elemento flexible para ocupar el resto del espacio. En el siguiente ejemplo, los dos primeros elementos flexibles ocupan el espacio necesario, mientras que el último elemento ocupa el resto del espacio disponible.
Ejm
<div class="d-flex">
<div class="p-2 bg-info">Flex item 1</div>
<div class="p-2 bg-warning">Flex item 2</div>
<div class="p-2 bg-primary flex-grow-1">Flex item 3</div>
</div>
Consejo: Use .flex-shrink-1 en un elemento flexible para que se encoja si es necesario.
Orden
Cambia el orden visual de un elemento (s) flexible específico (s) con las clases .order. Las clases válidas son de 0 a 12, donde el número más bajo tiene la prioridad más alta (el orden-1 se muestra antes del orden-2, etc.).
Ejm
<div class="d-flex bg-secondary">
<div class="p-2 bg-info order-3">Flex item 1</div>
<div class="p-2 bg-warning order-2">Flex item 2</div>
<div class="p-2 bg-primary order-1">Flex item 3</div>
</div>
Auto márgenes
Agregue fácilmente márgenes automáticos a elementos flexibles con .mr-auto (elementos de inserción a la derecha), o utilizando .ml-auto (elementos de inserción a la izquierda):
Ejm
<div class="d-flex bg-secondary">
<div class="p-2 mr-auto bg-info">Flex item 1</div>
<div class="p-2 bg-warning">Flex item 2</div>
<div class="p-2 bg-primary">Flex item 3</div>
</div>
<div class="d-flex bg-secondary">
<div class="p-2 bg-info">Flex item 1</div>
<div class="p-2 bg-warning">Flex item 2</div>
<div class="p-2 ml-auto bg-primary">Flex item 3</div>
</div>
Wrap (Envolver)
Controla como los elementos flexibles se envuelven en un contenedor flexible con .flex-nowrap (predeterminado), .flex-wrap o .flex-wrap-reverse.
Ejm
<div class="container mt-3">
<h2>Wrap</h2>
<p>Control how flex items wrap in a flex container with .flex-nowrap (default), .flex-wrap or .flex-wrap-reverse.</p>
<p><code>.flex-wrap:</code></p>
<div class="d-flex flex-wrap bg-light">
<div class="p-2 border">Flex item 1</div>
<div class="p-2 border">Flex item 2</div>
<div class="p-2 border">Flex item 3</div>
<div class="p-2 border">Flex item 4</div>
<div class="p-2 border">Flex item 5</div>
<div class="p-2 border">Flex item 6</div>
<div class="p-2 border">Flex item 7</div>
<div class="p-2 border">Flex item 8</div>
<div class="p-2 border">Flex item 9</div>
<div class="p-2 border">Flex item 10</div>
<div class="p-2 border">Flex item 11</div>
<div class="p-2 border">Flex item 12</div>
<div class="p-2 border">Flex item 13 </div>
<div class="p-2 border">Flex item 14</div>
<div class="p-2 border">Flex item 15</div>
<div class="p-2 border">Flex item 16</div>
<div class="p-2 border">Flex item 17</div>
<div class="p-2 border">Flex item 18</div>
<div class="p-2 border">Flex item 19</div>
<div class="p-2 border">Flex item 20</div>
<div class="p-2 border">Flex item 21</div>
<div class="p-2 border">Flex item 22</div>
<div class="p-2 border">Flex item 23</div>
<div class="p-2 border">Flex item 24</div>
<div class="p-2 border">Flex item 25</div>
</div>
<br>
<p><code>.flex-wrap-reverse:</code></p>
<div class="d-flex flex-wrap-reverse bg-light">
<div class="p-2 border">Flex item 1</div>
<div class="p-2 border">Flex item 2</div>
<div class="p-2 border">Flex item 3</div>
<div class="p-2 border">Flex item 4</div>
<div class="p-2 border">Flex item 5</div>
<div class="p-2 border">Flex item 6</div>
<div class="p-2 border">Flex item 7</div>
<div class="p-2 border">Flex item 8</div>
<div class="p-2 border">Flex item 9</div>
<div class="p-2 border">Flex item 10</div>
<div class="p-2 border">Flex item 11</div>
<div class="p-2 border">Flex item 12</div>
<div class="p-2 border">Flex item 13 </div>
<div class="p-2 border">Flex item 14</div>
<div class="p-2 border">Flex item 15</div>
<div class="p-2 border">Flex item 16</div>
<div class="p-2 border">Flex item 17</div>
<div class="p-2 border">Flex item 18</div>
<div class="p-2 border">Flex item 19</div>
<div class="p-2 border">Flex item 20</div>
<div class="p-2 border">Flex item 21</div>
<div class="p-2 border">Flex item 22</div>
<div class="p-2 border">Flex item 23</div>
<div class="p-2 border">Flex item 24</div>
<div class="p-2 border">Flex item 25</div>
</div>
<br>
<p><code>.flex-nowrap:</code></p>
<div class="d-flex flex-nowrap bg-light">
<div class="p-2 border">Flex item 1</div>
<div class="p-2 border">Flex item 2</div>
<div class="p-2 border">Flex item 3</div>
<div class="p-2 border">Flex item 4</div>
<div class="p-2 border">Flex item 5</div>
<div class="p-2 border">Flex item 6</div>
<div class="p-2 border">Flex item 7</div>
<div class="p-2 border">Flex item 8</div>
<div class="p-2 border">Flex item 9</div>
<div class="p-2 border">Flex item 10</div>
<div class="p-2 border">Flex item 11</div>
<div class="p-2 border">Flex item 12</div>
<div class="p-2 border">Flex item 13 </div>
<div class="p-2 border">Flex item 14</div>
<div class="p-2 border">Flex item 15</div>
<div class="p-2 border">Flex item 16</div>
<div class="p-2 border">Flex item 17</div>
<div class="p-2 border">Flex item 18</div>
<div class="p-2 border">Flex item 19</div>
<div class="p-2 border">Flex item 20</div>
<div class="p-2 border">Flex item 21</div>
<div class="p-2 border">Flex item 22</div>
<div class="p-2 border">Flex item 23</div>
<div class="p-2 border">Flex item 24</div>
<div class="p-2 border">Flex item 25</div>
<div class="p-2 border">Flex item 26</div>
<div class="p-2 border">Flex item 27</div>
<div class="p-2 border">Flex item 28</div>
<div class="p-2 border">Flex item 29</div>
<div class="p-2 border">Flex item 30</div>
<div class="p-2 border">Flex item 31</div>
<div class="p-2 border">Flex item 32</div>
<div class="p-2 border">Flex item 33</div>
<div class="p-2 border">Flex item 34</div>
<div class="p-2 border">Flex item 35</div>
</div>
<br>
</div>
Alineando contenido
Controla la alineación vertical de los elementos flexibles reunidos con las clases .align-content- *. Las clases válidas son:
- .align-content-start (predeterminado)
- .align-content-end
- .align-content-center
- .align-content-between
- .align-content-around
- .align-content-stretch.
Nota: Estas clases no tienen efecto en filas individuales de elementos flexibles.
Ejm
<div class="d-flex flex-wrap align-content-start">..</div>
<div class="d-flex flex-wrap align-content-end">..</div>
<div class="d-flex flex-wrap align-content-center">..</div>
<div class="d-flex flex-wrap align-content-around">..</div>
<div class="d-flex flex-wrap align-content-stretch">..</div>
Alinear elementos
Controla la alineación vertical de filas individuales de elementos flexibles con las clases .align-items- *. Las clases válidas son:
- .align-items-start
- .align-items-end
- .align-items-center
- .align-items-baseline
- .align-items-stretch (predeterminado).
Ejm
<div class="d-flex align-items-start">..</div>
<div class="d-flex align-items-end">..</div>
<div class="d-flex align-items-center">..</div>
<div class="d-flex align-items-baseline">..</div>
<div class="d-flex align-items-stretch">..</div>
Alinearse
Controla la alineación vertical de un elemento flexible especificado con las clases .align-self- *. Las clases válidas son:
- .align-self-start
- .align-self-end
- .align-self-center
- .align-self-baseline
- .align-self-stretch (valor predeterminado).
Ejm
<div class="d-flex bg-light" style="height:150px">
<div class="p-2 border">Flex item 1</div>
<div class="p-2 border align-self-start">Flex item 2</div>
<div class="p-2 border">Flex item 3</div>
</div>
Clases Flex Responsive
Todas las clases flexibles vienen con clases responsive adicionales, lo que facilita la configuración de una clase flexible específica en un tamaño de pantalla específico.
El símbolo * se puede reemplazar con sm, md, lg o xl, que representa pantallas pequeñas, medianas, grandes o grandes.
Clases |
Descripción |
Flex Container |
|
.d-*-flex |
Crea un contenedor flexbox para diferentes pantallas |
.d-*-inline-flex |
Crea un contenedor flexbox en línea para diferentes pantallas |
Direction |
|
.flex-*-row |
Mostrar elementos flexibles horizontalmente en diferentes pantallas |
.flex-*-row-reverse |
Muestra elementos flexibles horizontalmente y alineados a la derecha, en diferentes pantallas |
.flex-*-column |
Mostrar elementos flexibles verticalmente en diferentes pantallas |
.flex-*-column-reverse |
Visualizar elementos flexibles verticalmente, con orden inverso, en pantallas de pantallas diferentes |
Justified Content |
|
.justify-content-*-start |
Mostrar elementos flexibles desde el principio (alineados a la izquierda) en diferentes pantallas |
.justify-content-*-end |
Mostrar elementos flexibles al final (alineados a la derecha) en diferentes pantallas |
.justify-content-*-center |
Mostrar elementos flexibles en el centro de un contenedor flexible en diferentes pantallas |
.justify-content-*-between |
Mostrar elementos flexibles en «entre» en diferentes pantallas |
.justify-content-*-around |
Mostrar elementos flexibles «alrededor» en diferentes pantallas |
Fill / Equal Width |
|
.flex-*-fill |
Forzar elementos flexibles en anchos iguales en diferentes pantallas |
Grow |
|
.flex-*-grow-0 |
No hace crecer los artículos en diferentes pantallas |
.flex-*-grow-1 |
Haz que los artículos crezcan en diferentes pantallas |
Shrink |
|
.flex-*-shrink-0 |
No hace que los artículos se encojan en diferentes pantallas |
.flex-*-shrink-1 |
Hacer que los artículos se reduzcan en diferentes pantallas |
Order |
.order-*-0-12 |
Cambiar el orden de 0 a 12 en pantallas pequeñas |
Wrap |
|
.flex-*-nowrap |
No envuelve artículos en diferentes pantallas |
.flex-*-wrap |
Wrap items on different screens |
.flex-*-wrap-reverse |
Invierta la envoltura de elementos en diferentes pantallas |
Align Content |
|
.align-content-*-start |
Alinea los elementos reunidos desde el principio en diferentes pantallas |
.align-content-*-end |
Alinea los elementos reunidos al final en diferentes pantallas |
.align-content-*-center |
Alinea los elementos reunidos en el centro en diferentes pantallas |
.align-content-*-around |
Alinea los elementos reunidos «alrededor» en diferentes pantallas |
.align-content-*-stretch |
Estirar elementos reunidos en diferentes pantallas |
Align Items |
|
.align-items-*-start |
Alinea filas individuales de elementos desde el principio en diferentes pantallas |
.align-items-*-end |
Alinea filas individuales de elementos al final en diferentes pantallas |
.align-items-*-center |
Alinea filas individuales de elementos en el centro en diferentes pantallas |
.align-items-*-baseline |
Alinea filas individuales de elementos en la línea base en diferentes pantallas |
.align-items-*-stretch |
Estira filas individuales de elementos en diferentes pantallas |
Align Self |
|
.align-self-*-start |
Alinea un elemento flexible desde el principio en diferentes pantallas |
.align-self-*-end |
Alinea un elemento flexible al final en diferentes pantallas |
.align-self-*-center |
Alinea un elemento flexible en el centro en diferentes pantallas |
.align-self-*-baseline |
Alinea un elemento flexible en la línea de base de diferentes pantallas |
.align-self-*-stretch |
Estira un elemento flexible en diferentes pantallas |