Módulo de diseño CSS Flexbox

Antes del módulo Flexbox Layout, había cuatro modos de diseño:

  • Block, por secciones en una página web
  • Inline por texto
  • Table, Tabla, para datos de tablas bidimensionales
  • Posicionado, para la posición explícita de un elemento

El módulo de diseño de caja flexible (Flexbox)facilita el diseño de una estructura de diseño Responsive flexible sin usar float o position.

Elementos Flexbox

Para comenzar a usar el modelo Flexbox, primero debe definir un contenedor flexible.

El elemento de arriba representa un contendor flex (el área azul) con 3 elementos flexibles. Veamos un ejm con ello.

Ejm

<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Modelo Flex</title>
<style>
.flex-container {
	display: flex;
	background-color: DodgerBlue;
}

.flex-container > div {
	background-color: #f1f1f1;
	margin: 10px;
	padding: 20px;
	font-size: 30px;	
}
</style>
</head>
<body>
<h1>Crear un contenedor Flex</h1>
<div class="flex-container">
	<div>1</div>
	<div>2</div>
	<div>3</div>
</div>
<p>Un diseño flexible debe tener un elemento principal con la propiedad <em>display</em> establecida en <em>flex</em>.</p>
<p></p>
</body>
</html>

Elemento padre (contenedor)

Como especificamos más arriba, este es un contenedor flexible (el área azul) con tres elementos flexibles. El contenedor flexible se vuelve flexible al establecer la propiedad de visualización en flex.

.flex-container {
  display: flex;
}

Las propiedades del contenedor flex son:

  • flex-direction
  • flex-wrap
  • flex-flow
  • justify-content
  • align-items
  • align-content

La propiedad flex-direction

Dicha propiedad define en que dirección el contenedor quiere apilar los items.

Ejm

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

El valor column-reverse apila los elementos flexibles verticalmente (pero de abajo hacia arriba).

Ejm

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

El valor row apila los elementos flexibles horizontalmente (de izquierda a derecha):

Ejm

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

El valor row-reverse apila los elementos flexibles horizontalmente (pero de derecha a izquierda).

Ejm

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

La propiedad flex-wrap

La propiedad flex-wrap especifica si los elementos flexibles deben ajustarse o no. Los ejemplos a continuación tienen 12 elementos flexibles, para demostrar mejor la propiedad flex-wrap.

Ejm

<!DOCTYPE html>
<html>
<head>
<style>
.flex-container {
display: flex;
flex-wrap: wrap;
background-color: DodgerBlue;
}

.flex-container > div {
background-color: #f1f1f1;
width: 100px;
margin: 10px;
text-align: center;
line-height: 75px;
font-size: 30px;
}
</style>
</head>
<body>

<h1>La propiedad flex-wrap</h1>

<p> La propiedad flex-wrap: wrap;" especifica que los elementos flexibles se ajustarán si es necesario:</p>

<div class="flex-container">
<div>1</div>
<div>2</div>
<div>3</div> 
<div>4</div>
<div>5</div>
<div>6</div> 
<div>7</div>
<div>8</div>
<div>9</div> 
<div>10</div>
<div>11</div>
<div>12</div> 
</div>

<p>Try resizing the browser window.</p>

</body>
</html>

El valor nowrap especifica que los elementos flexibles no se ajustarán (esto es predeterminado).

Ejm

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

El valor wrap-reverse especifica que los artículos flexibles se ajustarán si es necesario, en orden inverso.

Ejm

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

La propiedad flex-flow

La propiedad flex-flow es una propiedad abreviada para establecer las propiedades de dirección flexible y envoltura flexible.

Ejm

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

La propiedad justify-content

Esta propiedad es usada para alinear los items flex.

Ejm

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

El valor flex-start alinea los elementos flexibles al comienzo del contenedor (esto es el valor predeterminado).

Ejm

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

El valor flex-end alinea los elementos flexibles al final del contenedor.

Ejm

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

El valor space-around muestra los elementos flexibles con espacio antes, entre y después de las líneas.

Ejm

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

El valor space-between muestra los elementos flexibles con espacio entre líneas.

Ejm

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

La propiedad align-items

La propiedad align-items se utiliza para alinear los elementos flexibles. En estos ejemplos, usamos un contenedor de 200 píxeles de alto para demostrar mejor la propiedad align-items.

El valor center alinea los elementos flexibles en el medio del contenedor:

Ejm

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

El valor flex-start alinea los elementos flexibles en la parte superior del contenedor, mientras que el valor flex-end alinea los elementos flexibles en la parte inferior. El valor stretch estira los elementos flexibles para llenar el contenedor (esto es predeterminado). El valor baseline alinea los elementos flexibles tal como se alinean sus líneas de base.

La propiedad align-content

La propiedad align-content se utiliza para alinear las líneas flexibles. En estos ejemplos, usamos un contenedor de 600 píxeles de alto, con la propiedad flex-wrap establecida en wrap, para demostrar mejor la propiedad align-content.

El valor space-between muestra las líneas flexibles con el mismo espacio entre ellas. El valor space-around muestra las líneas flexibles con espacio antes, entre y después de ellas.  El valor stretch estira las líneas flexibles para ocupar el espacio restante (esto es predeterminado). Las pantallas de valor center muestran las líneas flexibles en el medio del contenedor. El valor flex-start muestra las líneas flexibles al comienzo del contenedor. El valor de flex-end muestra las líneas flexibles al final del contenedor.

Centrado perfecto

En el siguiente ejemplo resolveremos un problema de estilo muy común: el centrado perfecto.

SOLUCIÓN: establece las propiedades de justify-content y align-items en el centro, y el elemento flexible estará perfectamente centrado.

Ejm

<!DOCTYPE html>
<html>
<head>
<style>
.flex-container {
display: flex;
justify-content: center;
align-items: center;
height: 300px;
background-color: DodgerBlue;
}

.flex-container > div {
background-color: #f1f1f1;
color: white;
width: 100px;
height: 100px;
}
</style>
</head>
<body>

<h1>Perfect Centering</h1>

<p>Un contenedor flexible con las propiedades justify-content y align-items
establecido en <em>center</em> alineará los elementos en el centro (en ambos ejes).</p>

<div class="flex-container">
<div></div>
</div>

</body>
</html>

Resumen

Property Description
align-content Modifica el comportamiento de la propiedad flex-wrap. Es similar a alinear elementos, pero en lugar de alinear elementos flexibles, alinea líneas flexibles
align-items Alinea verticalmente los elementos flexibles cuando los elementos no utilizan todo el espacio disponible en el eje transversal
display Especifica el tipo de cuadro utilizado para un elemento HTML
flex-direction Especifica la dirección de los elementos flexibles dentro de un contenedor flexible
flex-flow Una propiedad abreviada para flex-flow y flex-wrap
flex-wrap Especifica si los elementos flexibles deben envolverse o no, si no hay suficiente espacio para ellos en una línea flexible
justify-content Horizontally aligns the flex items when the items do not use all available space on the main-axis