Hoy os trigo una guia de flexbox, una de las últimas novedades css3. La tecnología avanza muy rápido y como desarrolladores necesitamos adaptarnos a los nuevos tiempo e intentar conocer las últimas tecnologías.
Auque css no es un lenguaje de programación si que es una pieza muy importante en el desarrollo de una página web. Los desarrolladores front-end cada día necesitan más potencia para explotar toda su creatividad.
Soy consciente de que flexbox no es agradado de todos los desarrolladores de front pero no deja de ser un recurso con el que puede o no trabajar.
Después de esta introducción pasemos a ver lo importante de hoy.
Flexbox o caja flexible es un modelo de caja que viene dentro del estándar css3. Viene a sustituir a los ya conocimos como: block, inline, table, etc. Este modelo de caja ya es bidireccional y no solo de derecha a izquierda o de izquierda a derecha si no de arriba a abajo y viceversa. Estos contenedores flexibles tienen la virtud de que sus hijos también pueden ser flexibles y reorganizarse libremente en función del tamaño disponible.
Flexbox sirve para posicionar los elementos dentro de un contenedor libremente y casi sin restricciones, en función del espacio disponible.
Es muy fácil usar flexbox, solo hay que decirle a un contenedor que su display es flex. Con esto lo que haremos es que todos los elementos que hay dentro de ese contenedor sean flexibles.
display: flex;
En julio de 2017 esta es la tabla de compatibilidades con los navegadores.
Ejemplo básico de flexbox
Este ejemplo muestra como se comportan los hijos de una caja flexible
<!DOCTYPE html>
<html>
<head>
<style>
.flex-container {
display: -webkit-flex;
display: flex;
background-color: lightgrey;
}
.flex-item {
background-color: cornflowerblue;
width: 100px;
height: 100px;
margin: 10px;
}
</style>
</head>
<body>
<div class="flex-container">
<div class="flex-item">flex item 1</div>
<div class="flex-item">flex item 2</div>
<div class="flex-item">flex item 3</div>
</div>
</body>
</html>
Ejemplo dinámico y responsive
Este ejemplo de nuestros amigo de developer mozilla se muestra como las cajas se adaptan no solo en su ancho si no en su orden para ocupar toda la pantalla.
<!DOCTYPE html>
<html lang="en">
<head>
<style>
body {
font: 24px Helvetica;
background: #999999;
}
#main {
min-height: 800px;
margin: 0px;
padding: 0px;
display: -webkit-flex;
display: flex;
-webkit-flex-flow: row;
flex-flow: row;
}
#main > article {
margin: 4px;
padding: 5px;
border: 1px solid #cccc33;
border-radius: 7pt;
background: #dddd88;
-webkit-flex: 3 1 60%;
flex: 3 1 60%;
-webkit-order: 2;
order: 2;
}
#main > nav {
margin: 4px;
padding: 5px;
border: 1px solid #8888bb;
border-radius: 7pt;
background: #ccccff;
-webkit-flex: 1 6 20%;
flex: 1 6 20%;
-webkit-order: 1;
order: 1;
}
#main > aside {
margin: 4px;
padding: 5px;
border: 1px solid #8888bb;
border-radius: 7pt;
background: #ccccff;
-webkit-flex: 1 6 20%;
flex: 1 6 20%;
-webkit-order: 3;
order: 3;
}
header, footer {
display: block;
margin: 4px;
padding: 5px;
min-height: 100px;
border: 1px solid #eebb55;
border-radius: 7pt;
background: #ffeebb;
}
/* Too narrow to support three columns */
@media all and (max-width: 640px) {
#main, #page {
-webkit-flex-flow: column;
flex-flow: column;
}
#main > article, #main > nav, #main > aside {
/* Return them to document order */
-webkit-order: 0;
order: 0;
}
#main > nav, #main > aside, header, footer {
min-height: 50px;
max-height: 50px;
}
}
</style>
</head>
<body>
<header>header</header>
<div id='main'>
<article>article</article>
<nav>nav</nav>
<aside>aside</aside>
</div>
<footer>footer</footer>
</body>
</html>
Ejemplo de una home entera
Si aun quieres ver más ejemplos te dejo uno de flexbox con sass
Es el elemento padre de los elementos flexibles. Se difine así porque tiene la propiedad display flex en sus atributos de estilo.
Solo los elementos que estan dentro de un flex container. Si fuese el elemeto flexible fuese texto, automáticamente se envuenlve en un elemento flexible anónimo.
Los elementos flexibles se pueden colocar en una sola línea o en varias líneas pero, hay que incluir la propiedad flex-wrap.
Los atributos de “altura” y “anchura” para usarlos en los elementos flexibles son (main size) para el tamaño principal y (cross size) para el tamaño secundario, que siempre siguen el eje principal y el eje secundario del contenedor flexible.