flexbox

Usando display:flex o display:inline-flex en una capa, la convertimos en un contenedor flexible. En el primer caso, la capa se comporta con respecto a otros elementos de la página como si tuviese display:block, en el segundo, como si tuviese display:inline-block

Ver videotutorial introductorio de Flexbox

flex-direction

Especifica como se sitúan los elementos flexibles dentro del contenedor.

Alinear contenido abajo

La siguiente maquetación es muy típica cuando estamos haciendo páginas webs.

<style>
.fila{
	display: flex;
	width: 600px;
	justify-content: space-between;
}
.col{
	display: flex;
	position: relative;
	flex-direction: column;
	text-align: justify;
	width: 45%
}
.col a{
	margin-top: auto;
	display: block;
	text-align: center;
	width: 100%
}
</style>
<div class="fila">
	<div class="col">
		<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Asperiores esse, obcaecati quisquam, aperiam reprehenderit!</p>
		<a href="#">Enlace</a>
	</div>
	<div class="col">
		<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Mollitia, odio est cum similique velit, animi cupiditate tempore cul</p>
		<a href="#">Enlace</a>
	</div>
</div>
Alinear contenido abajo

flex-wrap

  • wrap: El ancho establecido para las capas es respetado.
  • nowrap: El ancho establecido para las capas no es respetado, con el objetivo de que estas quepan horizontalmente.
Ver ejemplo de flex-wrap

flex-flow

flex-flow:row wrap;
Ver ejemplo flex-flow

O lo que es lo mismo:

flex-direction: row;
flex-wrap: wrap

Ejercicio 3 columnas con flex

background para ejercicio html

Ejercicio 3 columnas con flex

Ejercicio anuncios en columnas con flex

Ver ejercicio anuncios en columnas

order

Podemos establecer el orden en el que aparecen los componentes de una caja flexible. Por defecto aparecerán tal y como aparecen en el código HTML (equivale a order: 0)

Ver ejemplo de uso de order

align-items

#wrapper{
	display: flex;
	align-items: flex-start | flex-end | center | baseline | stretch;
}
alinear elementos  verticalmente con display:flex Ejemplo

Align self

#wrapper{
	display: flex;
	align-self: flex-start | flex-end | center | baseline | stretch;
}
alinear un único elemento verticalmente con display flex Ejemplo

justify-content

#wrapper{
	display: flex;
	justify-content: flex-start | flex-end | center | space-between | space-around | space-evenly;
}
justificación de elementos con display flex Ejemplo

flex:resumen

Ejemplo

flex: flex-grow y flex-shrink

Nos permite establecer cómo crece o decrece un elemento flexible dentro del contenedor en relación a los demás.

Ver ejemplo de uso de flex

Esta propiedad se puede volver más compleja, porque puede tener tres parámetros: flex-grow, flex-shrink y flex-basis.

Ejemplo

Supongamos que tenemos un contenedor al que llamaremos "wrapper" que tiene 300px de ancho.

#wrapper { display: flex;}

este contenedor tiene en su interior dos elementos, col1 y col2, que no tienen un ancho especificado. Vamos a establecer los siguientes valores para ambos de la propiedad flex: flex-grow, flex-shrink, flex-basis:

.col1 { flex: 3 1 100px;}
.col2 { flex: 1 2 100px;}

Como hemos establecido un flex-basis para cada elemento de 100px, nos quedarán aún 100px libres sin ocupar (300px del contenedor menos 100px del elemento col y menos 100px del elemento col2). ¿Como se reparte ese espacio disponible entre los elementos col1 y col2? En función del flex-grow: 3 partes para el elemento B (75px) y una parte para el elemento C (25px). Es decir, de inicio el elemento B ocupará 100px+75px = 175px de los 300px disponibles que mide el elemento A, y el elemento C ocupará 100px+25px=125px de los 300px disponibles del elemento A.

Ahora bien, supongamos que el elemento contenedor A mide 170px y no 300px. Eso quiere decir que habrá espacio negativo, porque los elementos B y C tienen un flex-basis de 100px cada uno, es decir, 200px, que es 30px mayor que los 170px del contenedor. En este caso el ratio que se usa es el flex-shrink, que recordemos que era 1 para el elemento B y 2 para el elemento C. Esos 30px se restarán del ancho de los elementos B y C en función de dicho ratio: al elemento B se le quitarán 10px y al elemento C se le quitarán 20px.

  • flex-grow: Especifica el factor de crecimiento, es decir, cuanto crecerá el elemento en relación a los demás cuando hay espacio disponible del contenedor a ocupar. Por defecto es ‘0’, que es el valor que dimos en el ejemplo anterior a los tres elementos.
  • flex-shrink: Determina el factor de reducción, es decir, cuanto decrecerá el elemento en relación a los demás cuando hay espacio negativo en el contenedor (el contenedor es más pequeño de los anchos combinados de los elementos que hay en su interior). Por defecto es ‘1’.
  • flex-basis: Toma el mismo valor que la propiedad ‘width’ y establece el tamaño inicial del elemento antes de distribuir el espacio libre de acuerdo con los ratios de flex-grow o flex-shrink. Cuando se omite, su valor es ‘main-size’ (anteriormente, ‘auto’).
Ejemplo de uso de flex

Índice del curso de HTML5

  1. Introducción
  2. Estructura de una página web
  3. Comentarios
  4. Encabezados y párrafos
  5. Enlaces e imágenes
  6. Listas
  7. Listas
  8. iframes
  9. Páginas de consulta
  10. Tablas
  11. Estilos en línea
  12. Unidades de medida
  13. Hacer una NewsLetter con HTML
  14. favicon
  15. Hojas de estilos
  16. Capas
  17. GIMP
  18. Selectores CSS
  19. Margin Collapse
  20. padding y width
  21. Ejercicios de maquetación vertical
  22. display:block, inline, inline-block
  23. img vs background
  24. Flex Box
  25. Hacer una newsletter responsive sin media queries
  26. Algunos tips
  27. Ejercicios
  28. Break! - gran día de repaso
  29. Ejercicio - background centrado
  30. Links de interés
  31. position
  32. Opacidades
  33. Popups con CSS
  34. Galería de fotos
  35. Navigation Bar
  36. Estilo important!
  37. Hacer páginas reales
  38. Grid Layout
  39. Selectores avanzados de CSS
  40. Página de error 404
  41. Insertar un buscador de google
  42. Dominio y alojamiento
  43. Ejercicio - Proyecto
  44. HTML5: definición y ejemplos
  45. HTML5 vs HTML4
  46. Content editable
  47. Soporte para textos asiáticos
  48. divs semánticos
  49. Video y audio
  50. svg
  51. wbr - Word Break
  52. Formularios
  53. Motores de navegación
  54. text-shadow
  55. border-radius, box-shadow
  56. border-image
  57. background-size
  58. Multiple Background
  59. Background transparency
  60. Gradientes
  61. Fuentes
  62. columns
  63. text-overflow
  64. Animaciones con CSS3
  65. Responsive design
icono de mandar un mail¡Contacta conmigo!
contacta conmigoPablo Monteserín

¡Hola! ¿En qué puedo ayudarte?