Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Grid Layout: Nueva forma de maquetar e introduc...

Grid Layout: Nueva forma de maquetar e introducir información en la web

Grid Layout es una especificación de la W3C para poder maquetar y colocar información dentro de nuestras páginas web. Gracias a este módulo, podemos estructurar nuestra web como una rejilla de x filas e y columnas, para después ir indicando dónde queremos colocar cada elemento dentro de ella.
Es un concepto diferente al de Flexbox, y de hecho se pueden combinar entre sí. Actualmente no está soportado en todas las versiones finales de los navegadores actuales, pero se espera que pueda estarlo pronto, por lo que este es el momento idóneo para aprender a utilizarlo.

Imanol Terán

March 03, 2017
Tweet

More Decks by Imanol Terán

Other Decks in Design

Transcript

  1. GRID LAYOUT Nueva forma de maquetar y colocar información en

    la web Imanol Terán Maruri - @itermar
  2. Imanol Terán Maruri ‣ Diseñador y desarrollador frontend ‣ Fundador

    de widdiapps.com ‣ Puedes encontrarme en: ‣ http://imanolteran.com ‣ @itermar ‣ [email protected] QUIÉN SOY
  3. PROGRAMA ‣ Introducción ‣ Diferencias con Flexbox ‣ Conceptos clave

    ‣ Grid Layout Responsive ‣ Propiedades y módulos ‣ @supports ‣ Práctica
  4. Table ‣ Surgió en 1995 con la especificación HTML 3.0

    ‣ Se “hizo fuerte” con la versión HTML 3.2 ‣ El “tag” <table> creado para crear layouts, además de mostrar datos en tablas
  5. Table - Características ‣ <table border=0> ‣ <body bottomMargin=0 leftMargin=0>

    ‣ <td valign=top> ‣ <table cellspacing=10 cellpadding=10> ‣ <td colspan=3 rowspan=1>
  6. Table - Problemas ‣ Estilo, contenido y marcado juntos ‣

    Accesibilidad ‣ Código poco legible
  7. BOX MODEL ‣ Surgió en 1996 con CSS 1 y

    HTML 3.2 ‣ Empezamos a hablar del concepto CSS: separar estilo y marcado ‣ Aparecen elementos de bloque: <div>, <h1>, <p>…
  8. BOX MODEL - EVOLUCIÓN I ‣ width, height ‣ display,

    float ‣ margin, padding y border
  9. BOX MODEL - EVOLUCIÓN II ‣ position ‣ top, bottom,

    left, right ‣ max-width, min-width, max-height, min-height
  10. BOX MODEL - FIN DE LAS TABLAS ‣ <table> :

    para mostrar datos en tablas ‣ box model : layouts con CSS
  11. BOX MODEL - PROBLEMAS ‣ Alinear objetos en vertical ‣

    Posicionar unas cajas junto a otras (float, inline o inline-block) ‣ Clearfix, clear:both ‣ Altura automática de las cajas ‣ …y unos cuantos más
  12. GRID SYSTEMS ‣ Comienzan en 2007 con Blueprint ‣ Nacen

    para solucionar problemas de layout y crear sistema de columnas estándar ‣ 12, 16 o 24 columnas ‣ Abstracción del modelo de cajas ‣ Éxito en 2009, con 960.gs
  13. TIPOS DE GRID ‣ Columna ‣ Fluída / Fija ‣

    Semántica / No-semántica ‣ Responsive ‣ … y más
  14. FLEXBOX ‣ 19 años sin especificación CSS concreta para trabajar

    con layout ‣ W3C empieza con ello en 2009 ‣ Ha habido varias sintaxis durante el proceso
  15. FLEXBOX - ESTADO ACTUAL ‣ Soporte a navegadores está mejorando

    ‣ Muchos frameworks lo están incluyendo ‣ Pensado para organizar elementos en 1 dimensión
  16. FLEXBOX Consiste, principalmente, en proporcionar al contenedor la habilidad para

    cambiar la anchura y altura de los elementos que contiene, con el fin de rellenar de la forma más eficiente posible el espacio en blanco y prevenir los desbordes
  17. GRID LAYOUT ‣ Especificación W3C para trazar el layout de

    nuestras páginas web ‣ Primer draft fue en Abril de 2011: propuesto por Microsoft ‣ IE10, IE11: tienen soporte “a medias”. Especificación antigua
  18. GRID LAYOUT ‣ Sistema de layout para trabajar en 2

    dimensiones ‣ Primer módulo creado específicamente para solucionar problemas de layout al crear páginas web ‣ Revoluciona la forma en que diseñamos layouts basados en rejilla ‣ Siempre habíamos utilizado CSS. Poco eficiente y faltaban cosas como centrado vertical…etc.
  19. GRID LAYOUT ‣ Evitamos el uso de “clear”, overflows…etc. ‣

    No es posible que suceda, puesto que “cada elemento tiene su sitio” ‣ Flexbox ayuda, pero solo está pensado para 1 dimensión ‣ Grid Layout y Flexbox pueden trabajar juntos
  20. GRID LAYOUT ‣ Fase experimental, hay que activar ciertos flags

    en el navegador ‣ Chrome: ‣ chrome://flags ‣ Activar “Experimental Web Platform Features” ‣ Firefox: ‣ about:config ‣ Activar “layout.css.grid.enabled”
  21. GRID LINE Gracias a ellas creamos la rejilla. Pueden ser

    horizontales o verticales y podemos acceder a ellas por número o nombre.
  22. GRID CELL Unidad mínima dentro de la rejilla. Está formada

    por la intersección de dos column lines y dos row lines
  23. GRID GUTTERS De momento lo conseguimos con grid tracks de

    menor grosor que actúan como “separadores” del contenido grid-column-gap grid-row-gap * No definitivas grid-gap ≈
  24. ¿QUÉ PODEMOS CONTROLAR CON GRID LAYOUT? ‣ Posición de secciones

    dentro de nuestra página ‣ Modificar esas posiciones en responsive
  25. <div class="container"> <div class="box header">header</div> <div class="box sidebar">sidebar</div> <div class="box

    title">title</div> <div class="box article1">article1</div> <div class="box article2">article2</div> <div class="box article3">article3</div> <div class="box footer">footer</div> </div> EMPEZANDO CON GRID LAYOUT
  26. PROPIEDADES GRID LAYOUT ‣ display ‣ grid-template-columns ‣ grid-template-rows ‣

    grid-template-areas ‣ grid-template ‣ grid-column-gap ‣ grid-row-gap ‣ grid-gap ‣ justify-items ‣ align-items ‣ justify-content ‣ align-content ‣ grid-auto-columns ‣ grid-auto-rows ‣ grid-auto-flow ‣ grid Contenedor
  27. display ‣ Mediante esta propiedad, indicamos que el elemento es

    un contenedor de tipo grid ‣ Con esto, creamos nuestro nuevo contexto en el que podremos posicionar todos los elementos contenidos dentro de él.
  28. grid-template-columns ‣ Establecemos las columnas de nuestra rejilla ‣ Lo

    hacemos mediante una serie de valores separados ‣ Cada valor indica el tamaño de una columna ‣ Podemos nombrar las líneas verticales (más de un nombre) ‣ repeat()
  29. ‣ <track-size> ‣ fr: unidad de medida que nos permite

    establecer el tamaño de nuestro track como proporcional al espacio libre disponible en nuestra rejilla. ‣ <line-name> grid-template-columns
  30. grid-template-rows ‣ Establecemos las filas de nuestra rejilla ‣ Lo

    hacemos mediante una serie de valores separados ‣ Cada valor indica el tamaño de una filas ‣ Podemos nombrar las líneas horizontales (más de un nombre) ‣ repeat()
  31. grid-template-rows ‣ <track-size> ‣ fr: unidad de medida que nos

    permite establecer el tamaño de nuestro track como proporcional al espacio libre disponible en nuestra rejilla. ‣ <line-name>
  32. grid-template-areas ‣ Establecemos la rejilla haciendo referencia a los nombres

    de las “grid areas” especificadas en la propiedad grid-area de los items contenidos
  33. grid-column-gap ‣ Sirve para definir el espacio entre columnas ‣

    Solo creamos espacio entre columnas, nunca fuera de los limites de nuestro grid
  34. grid-row-gap ‣ Sirve para definir el espacio entre filas ‣

    Solo creamos espacio entre columnas, nunca fuera de los limites de nuestro grid
  35. grid-gap ‣ Abreviatura para “grid-column-gap” y “grid-row-gap” ‣ Si establecemos

    un único valor, aplicamos misma separación entre filas y columnas ‣ grid-gap = <grid-row-gap> <grid-column-gap>;
  36. justify-items ‣ Alinea los items que contiene a lo largo

    del eje horizontal (row) ‣ * Para aplicar a un item en concreto: justify-self
  37. justify-items ‣ start: alinea todos los items a la izquierda

    ‣ end: alinea todos los items a la derecha ‣ center: centra todos los items en eje horizontal ‣ * stretch: hace que los elementos ocupen todo el ancho
  38. align-items ‣ Alinea los items que contiene a lo largo

    del eje vertical (column) ‣ * Para aplicar a un item en concreto: align-self
  39. align-items ‣ start: alinea todos los items en la parte

    superior ‣ end: alinea todos los items en la parte inferior ‣ center: centra todos los items en eje vertical ‣ * stretch: hace que los elementos ocupen todo el alto
  40. justify-content ‣ Es de utilidad cuando nos encontramos con que

    el tamaño de nuestro layout es menor que el del contenedor que tenemos definido como grid. ‣ En este caso, alineamos nuestro layout dentro de nuestro grid en el eje horizontal (column)
  41. justify-content ‣ start ‣ end ‣ center ‣ stretch ‣

    space-around ‣ space-between ‣ space-evenly
  42. align-content ‣ Es de utilidad cuando nos encontramos con que

    el tamaño de nuestro layout es menor que el del contenedor que tenemos definido como grid. ‣ En este caso, alineamos nuestro layout dentro de nuestro grid en el eje vertical (row)
  43. align-content ‣ start ‣ end ‣ center ‣ stretch ‣

    space-around ‣ space-between ‣ space-evenly
  44. grid-auto-columns & grid-auto-row ‣ Sirven para determinar el tamaño de

    los grid tracks implícitos ‣ Estos se crean cuando determinamos de forma explicita en una columna o fila que está fuera del rango del grid que hemos definido ‣ Lo que especificamos es el alto o el ancho de esos “huecos” no definidos hasta la posición de nuestro elemento
  45. grid-auto-flow ‣ Cuando no especificamos de forma explícita la posición

    de un elemento en la rejilla, entra en juego el algoritmo de “auto-placement” ‣ Mediante esta propiedad, indicamos cómo debe comportarse este algoritmo
  46. grid-auto-flow ‣ * row: le decimos al algoritmo que rellene

    el contenido de forma vertical, añadiendo cuantas filas sean necesarias ‣ column: le decimos al algoritmo que rellene el contenido de forma horizontal, añadiendo cuantas columnas sean necesarias ‣ row dense / column dense: le decimos al algoritmo que intenta rellenar los huecos antes, en caso de que tengamos ítems más pequeños despues. Puede que nos aparezcan desordenados.
  47. grid ‣ Esta propiedad aglutina a todas las demás vistas

    anteriormente en una sola declaración ‣ grid-template-rows, grid-template-columns, grid- template-areas, grid-auto-rows, grid-auto-columns, grid-auto-flow
  48. grid .container { grid: none | <grid-template-rows> / <grid- template-columns>

    | <grid-auto-flow> [<grid-auto- rows> [/ <grid-auto-columns>]]; }
  49. grid-column-start / grid-column-end grid-row-start / grid-row-end ‣ Establece la posición

    de un item en la rejilla, refiriéndonos a unas grid-lines específicas. ‣ Nuestro item empezara en grid-column-start / grid- row-start y terminará en grid-column-end / grid-row- end
  50. grid-column-start / grid-column-end grid-row-start / grid-column-end ‣ <line>: puede ser

    un valor o un nombre ‣ span <number>: el item se extiende a lo largo del numero especificado de grid tracks ‣ span <name>: el item se extiende hasta que encuentre la siguiente linea con el nombre indicado ‣ auto: indica auto-placement y span de 1 por defecto
  51. grid-area ‣ Nos sirve para nombrar un item que vayamos

    a colocar en nuestro layout, de forma que podamos utilizarlo dentro de la propiedad grid-template-areas del container
  52. justify-self ‣ start: alinea todos los items a la izquierda

    ‣ end: alinea todos los items a la derecha ‣ center: centra todos los items en eje horizontal ‣ * stretch: hace que los elementos ocupen todo el ancho
  53. align-self ‣ start: alinea todos los items a la izquierda

    ‣ end: alinea todos los items a la derecha ‣ center: centra todos los items en eje horizontal ‣ * stretch: hace que los elementos ocupen todo el ancho
  54. RESPONSIVE GRID LAYOUT ‣ Mediante media queries, podemos recolocar los

    elementos de nuestro layout, sin tocar para nada el HTML ‣ Modificar ancho de columnas o alto de filas ‣ Modificar nuestro grid-template-area
  55. ‣ Mediante la técnica de fallback, añadimos las reglas CSS

    de grid layout. ‣ @supports consulta qué funcionalidades están disponibles ‣ Si nuestro navegador no lo soporta, tenemos debajo las reglas clásicas, soportadas por todos los browsers. @supports
  56. @supports (display: grid) { /* Introducir CSS relativo a Grid

    */ } /* Aquí debajo reglas CSS usadas hasta ahora */ @supports