SlideShare una empresa de Scribd logo
1 de 82
Descargar para leer sin conexión
FRONT-END BASICS
  for developers
Cosas que deberías saber sobre Front-end,
 aunque te ganes el pan como Developer :)

            ♣ Nadal Soler / @nadalsol
FRONT-END BASICS FOR DEVELOPERS
 1.   Grid System
 2.   Responsive Web Design (RWD)
 3.   Sass (Syntactically Awesome Stylesheets)
 4.   Dudas, preguntas, bostezos…
GRID SYSTEM
Sorry… ¿Grid qué?
Sin retícula no hay película
Ventajas / ¿Desventajas?
Cómo usar el Grid
Recursos
SORRY… ¿GRID QUÉ?
El concepto Grid System no es nuevo (diseño editorial).
Se basa en una retícula (grid) como elemento para mantener orden,
proporción y composición.
Esta estructura/base se conoce como Layout.
SIN RETÍCULA NO HAY PELÍCULA
Cualquier Diseñador y Front-end Developer debería usar un grid
frente a diseños complejos.
Facilita la composición y evita incoherencias al aplicar la Guía de
Estilos.




      Inuit CSS , 960gs , Gumby Framework , 1140 Grid , Bootstrap , Zen Grids …
VENTAJAS / ¿DESVENTAJAS?
VENTAJAS
Mejor organización de la información.
Mayor control sobre la composición de página (ningún elemento
puede desbordar* el grid acordado).
Mayor versatilidad sobre el layout (2 cols, 3 cols…).
Diseño más consistente entre páginas (homogeneidad = mejor
experiencia de usuario).
Fácil implementación y mantenimiento (los diseños de nuevas
páginas/secciones deben ceñirse al grid).
Pequeñas mejoras en SEO y accesibilidad, al poder "empujar"
contenidos (classes p s y p l ).
                     uh ul
         * Salvo contadas excepciones (algunos banners, fixed bars, modal windows, etc…).
¿DESVENTAJAS? I DON'T THINK SO…
Puede generar mayor densidad de código HTML (más < i > y  dvs
classes).
Nombres de classes "poco semánticos", como c n a n r 1 ,
                                                 otie_6
g i _ , s a 8r w
  rd8 pn, o…
En proyectos pequeños, mucho código CSS que quizás nunca
usaremos.
¿Es esto grave? I don't think so… Los beneficios superan las
"desventajas".
CÓMO USAR EL GRID
 1. Utiliza la class container_12 para el grid de 12 columnas y
         container_16 para la versión de 16 columnas.
<i cas"otie_2>
 dv ls=cnanr1"
   <i cas"rd4>
    dv ls=gi_"
      <> lk Fec Fis/>
       pI ie rnh re<p
   <dv
    /i>
   <i cas"rd4>
    dv ls=gi_"
      <>fcus,Ima FedmFis/>
       pO ore   en reo re<p
   <dv
    /i>
   <i cas"rd4>
    dv ls=gi_"
      <>r Ptt i co!/>
       pM. oao s ol<p
   <dv
    /i>
<dv
 /i>


<i cas"otie_6>
 dv ls=cnanr1"
   <i cas"rd1"
    dv ls=gi_2>
      <> lk Fec Fis/>
       pI ie rnh re<p
   <dv
    /i>
   <i cas"rd4>
    dv ls=gi_"
      <>fcus,Ima FedmFis/>
       pO ore   en reo re<p
   <dv
    /i>
<dv
 /i>
CÓMO USAR EL GRID
2. Utiliza las classes grid_1, grid_2, grid_3, etc. para fijar los anchos de
columna. Para rellenar una fila completa, asegúrate que las columnas
                               sumen 12 ó 16.
   <i cas"otie_6>
    dv ls=cnanr1"
      <i cas"rd1"
       dv ls=gi_2>
         <> lk Fec Fis/>
          pI ie rnh re<p
      <dv
       /i>
      <i cas"rd4>
       dv ls=gi_"
         <>fcus,Ima FedmFis/>
          pO ore   en reo re<p
      <dv
       /i>
   <dv
    /i>

                         ejemplo: grid_4 + grid_2 + grid_6 = 12
CÓMO USAR EL GRID
3. Utiliza push y pull para posicionar items en la página de forma
         independiente, a pesar de su posición en el HTML.




<i cas"otie_2>
 dv ls=cnanr1"
   <i cas"rd6ps_"<>oo/>/i>
    dv ls=gi_ uh3>plg<p<dv
   <i cas"rd3pl_"<>etclm<p<dv
    dv ls=gi_ ul6>ptx  oun/>/i>
   <i cas"rd3>ptx clm<p<dv
    dv ls=gi_"<>et oun/>/i>
   <i cas"rd1"<>i bx/>/i>
    dv ls=gi_2>pbg o<p<dv
<dv
 /i>
CÓMO USAR EL GRID
    4. Utiliza las classes prefix y suffix para crear espacios vacíos en el
                                      layout.




      <i cas"otie_2>
       dv ls=cnanr1"
         <i cas"rd6sfi_"
          dv ls=gi_  ufx3>
            <>ls=gi_ sfi_"/>
             pcas"rd6 ufx3<p
         <dv
          /i>
         <i cas"rd3>
          dv ls=gi_"
            <>ls=gi_"/>
             pcas"rd3<p
         <dv
          /i>
         <i cas"rd1"
          dv ls=gi_2>
            <>i bx/>
             pbg o<p
         <dv
          /i>
      <dv
       /i>

En este ejemplo podemos ver como crear un espacio vacío de tres columnas después de un elemento, mediante el uso
                                              de la class suffix_3.
CÓMO USAR EL GRID
5. Utiliza las classes alpha ("first") y omega ("last") para eliminar los
               márgenes de columnas en grids anidados.
 <i cas"otie_6>
  dv ls=cnanr1"
    <i cas"rd8>
     dv ls=gi_"
       <i cas"rd4apa>
        dv ls=gi_ lh"
          <>rd4isd gi_ (lh)/>
          pgi_ nie rd8 apa<p
       <dv
        /i>
       <i cas"rd4oea>
        dv ls=gi_ mg"
          <>rd4isd gi_ (mg)/>
          pgi_ nie rd8 oea<p
       <dv
        /i>
    <dv
     /i>
    <i cas"rd8>
     dv ls=gi_"
       <>rd8/>
        pgi_<p
    <dv
     /i>
 <dv
  /i>

        En el ejemplo vemos como crear sub-divisiones dentro de columnas, anidando grids.
CÓMO USAR EL GRID (RESUMEN)
1. Utiliza la class container_12 para el grid de 12 columnas y
   container_16 para la versión de 16 columnas.
2. Utiliza las classes grid_1, grid_2, grid_3, etc. para fijar los anchos de
   columna. Para rellenar una fila completa, asegúrate que los anchos
   de columnas sumen 12 ó 16 (p.e. grid_4 + grid_2 + grid_6 = 12).
3. Utiliza las classes push y pull para posicionar items en la página de
   forma independiente, a pesar de su posición en el HTML.
4. Utiliza las classes prefix y suffix para crear espacios vacíos en el
   layout.
5. Utiliza las classes alpha ("first") y omega ("last") para eliminar los
   márgenes de columnas en grids anidados.
RECURSOS
                               The Grid System
                               The 960 Grid System Made Easy
                               960gs
                               Variable Grid System
                               Fluid 960 Grid System
                               mos-golden Grid System
Todos los ejemplos vistos en esta presentación están basados en 960gs . Otros grid system pueden usar nombres de
                                                 classes distintos.
RESPONSIVE WEB DESIGN (RWD)
      Responsive Architecture
      ¿WTF is RWD?
      Ingredientes para RWD
      Recursos
RESPONSIVE ARCHITECTURE
Actualmente diseñamos para más dispositivos que nunca (mobile,
desktop, tablet, smart tv…).
Cada medio es distinto (ancho mínimo de pantalla, densidad de pixel,
n° de colores, fuentes, navegador…).
RESPONSIVE ARCHITECTURE
                     ¿TIENE SENTIDO?
“Fragmentar nuestro contenido a través de diferentes
     experiencias "dispositivo optimizadas" es un
propósito insostenible. La alternativa a esto se llama
  Responsive Architecture: crear sitios no sólo más
flexibles, sino que también se adapten al medio que
                    los renderiza.”
      Del libro "Responsive Web Design" , de Ethan Marcotte.
¿WTF IS:NOT RWD?
No es el nombre de la banda de moda, ni de ninguna revista de
tendencias.
Una web con RWD no es una web móvil ya que los contenidos y
performance no están optimizados.
Para hacer una web móvil deberíamos usar SSDDT *, para servir los
contenidos adecuados al medio: "copys" resumidos, imágenes más
pequeñas y optimizadas, funcionalidad básica, etc…
                    * Server-Side Device Detection Techniques.
¿WTF IS RWD?
              “Responsive Web Design = Diseño Web
               Adaptable/Adaptativo/Responsivo”

La finalidad del RWD es hacer que la web se visualice
correctamente en distintos contextos (dispositivos), con
independencia del tamaño de pantalla o resolución del mismo,
mejorando la experiencia de cada tipo de usuario (mobile, desktop,
smart tv, whatever…).
El RWD se puede combinar con las SSDDT para ofrecer una
experiencia completa: diseño adaptable + contenido adecuado y
optimizado.
INGREDIENTES PARA RWD
             1. Grid flexible
             2. Imágenes flexibles *
             3. CSS3 Media Queries




* No sólo imágenes sino cualquier otro media: videos, flash, carousels…
GRID FLEXIBLE
“Retícula fluida o elástica, que se adapta a cambios
    de resolución de pantalla y dimensiones del
                      viewport.”
GRID FLEXIBLE
                         CARACTERÍSTICAS
Flexible Typesetting, o fuentes escalables en medidas relativas (em).
                            Evitar usar px!
GRID FLEXIBLE
                          CARACTERÍSTICAS
Grid (columnas) y espacios horizontales (widths, margins, paddings) en
                         porcentajes (%).
GRID FLEXIBLE
                 EN DEFINITIVA… THINK FLEXIBLE!
Romper con el hábito de traducir los pixels de Photoshop a CSS.
Focalizar nuestra atención en las proporciones que hay trás un
diseño.
GRID FLEXIBLE
Flexible Grid (demo) *, en A List Apart




      * Redimensiona la ventana del navegador
            para ver como se comporta.
IMÁGENES FLEXIBLES
“Imágenes elásticas, que se escalan según cambios
   de resolución de pantalla y dimensiones del
                    viewport.”
IMÁGENES FLEXIBLES
               ¿CÓMO HACER UNA IMAGEN FLEXIBLE?
Encapsular-la dentro de un contenedor de bloque (p.e. un <span> con
display:block).
Definir un ancho en porcentaje (%) a dicho contenedor, para que este
sea flexible. El valor del porcentaje determinará su ancho en función
de su padre.
Opcionalmente el contenedor puede ir flotado.
Establecer display:block y max-width:100% a la imagen. Dejar sus
atributos HTML width y height vacíos.
IMÁGENES FLEXIBLES
     Ejemplo. En este caso la imagen flexible ocuparía el 25% de su contenedor padre:


<pncas"lxm w2 fot"
 sa ls=feIg p5 laR>
   <m sc"m/epniesml_.p"at""/
    ig r=igrsosv_apeljg l=  >
<sa>
 /pn


.lxm {/ Tefeil iaewapr cudb <>o <pn.Sol b cm
 feIg   * h lxbe mg  rpe, ol e a r sa> hud e o
bndwt apretg wdhcas*
 ie ih   ecnae it  ls  /
   dslybok
    ipa:lc;
}
.lxm ig{
 feIg m
   dslybok
    ipa:lc;
   mxwdh10;
    a-it:0%
}
.p5{
 w2
   wdh2%
    it:5;
}
.laR{
 fot
   fotrgt
    la:ih;
}
IMÁGENES FLEXIBLES
Ejemplo. En este caso la imagen flexible ocuparía el 25% de su contenedor padre:
IMÁGENES FLEXIBLES
Si necesitamos que la imagen sea un enlace podemos sustituir el tag < p n por un < >
                                                                      sa>         a (usando el mismo CSS que
                                             en el ejemplo anterior):

     < he=# cas"lxm w2 fot"
      a rf"" ls=feIg p5 laR>
        <m sc"m/epniesml_.p"at""/
         ig r=igrsosv_apeljg l=  >
     <a
      />


     .lxm {/ Tefeil iaewapr cudb <>o <pn.Sol b cm
      feIg   * h lxbe mg  rpe, ol e a r sa> hud e o
     bndwt apretg wdhcas*
      ie ih   ecnae it  ls  /
        dslybok
         ipa:lc;
     }
     .lxm ig{
      feIg m
        dslybok
         ipa:lc;
        mxwdh10;
         a-it:0%
     }
     .p5{
      w2
        wdh2%
         it:5;
     }
     .laR{
      fot
        fotrgt
         la:ih;
     }
IMÁGENES FLEXIBLES
                    Ejemplos con tamaños de imagen distintos:
                        Responsive Web Design (demo) *




* Redimensiona la ventana del navegador para ver como se comporta el layout e imágenes flexibles, junto con los
                                               media queries.
CSS3 MEDIA QUERIES
“Ningún diseño, fijo o fluido, escala bien más allá del
 contexto para el que fue originalmente diseñado.”
      Del libro "Responsive Web Design" , de Ethan Marcotte.
CSS3 MEDIA QUERIES
            PROBLEMAS COMUNES LAYOUTS FLEXIBLES
Imágenes irreconocibles (demasiado pequeñas o recortadas por
overflow:hidden).
Márgenes demasiado grandes.
Lineas de texto demasiado cortas (o demasiado largas).
Elementos de navegación rotos dificultando legibilidad.
Otros problemas…
CSS3 MEDIA QUERIES
¿Cómo crear un diseño que pueda adaptarse a cambios de resolución
             de pantalla y dimensiones del viewport?
              ¿Cómo hacer diseños más responsive?

                       LAYOUTS FLEXIBLES
                              +
                         MEDIA QUERIES
CSS3 MEDIA QUERIES
                     ¿QUÉ SON Y PARA QUÉ SIRVEN?
Son un robusto mecanismo, creado por la W3C, para identificar no sólo
 los tipos de media, sino también para inspeccionar las características
  físicas de los dispositivos y navegadores que renderizan el contenido.
                          ¿Sigues sin saber de qué va esto?

                              mediaqueri.es
                              Robot or Not?
CSS3 MEDIA QUERIES
                   DISTINTAS NOMENCLATURAS
@ei sre ad(i-it:04x {
 mda cen n mnwdh12p)
  bd {
   oy
     fn-ie10;
      otsz:0%
  }
}


<ikrl"tlset he=wd.s"mda"cenad(i-it:04x"/
 ln e=syehe" rf"iecs ei=sre n mnwdh12p) >


@motul"iecs)sre ad(i-it:04x;
 ipr r(wd.s" cen n mnwdh12p)


      Se pueden encadenar múltiples queries juntas mediante la keyword “and”

@ei sre ad(i-eiewdh40x ad(retto:adcp){…}
 mda cen n mndvc-it:8p) n oinainlnsae
CSS3 MEDIA QUERIES
CAPACIDADES DE LOS DISPOSITIVOS A DETECTAR
                  width
                  height
                  device-width
                  device-height
                  orientation
                  and many more…
     Lista completa en W3C Media Queries - Features .
CSS3 MEDIA QUERIES
                                         CONSIDERACIONES
Recaudar información detallada sobre los dispositivos y
navegadores de tu target, saber qué características de los media
queries soportan, y testear acorde.
Width y height hacen referencia al viewport o ventana del navegador,
mientras que device-width y device-height miden las dimensiones de
toda la pantalla.
Añadir este meta tag en el HTML:
       <eanm=vepr"cnet"nta-cl=.,wdhdvc-it"/
       mt ae"iwot otn=iiilsae10  it=eiewdh >

Esto hace que el ancho del viewport del navegador sea igual al ancho de la pantalla del dispositivo, y establece el
nivel de zoom al 100%. Con esto logramos mayor consistencia con el tamaño actual del dispositivo.
CSS3 MEDIA QUERIES
                           COMPATIBILIDAD
Algunos navegadores aún no las soportan*, aunque existen scripts para
                          solucionarlo:
                       css3-mediaqueries-js
                       respond.js
                    * When can I use CSS3 Media Queries?
CSS3 MEDIA QUERIES
               EJEMPLO PRÁCTICO
/ Salsre *
 * ml cen /
@ei sre ad(a-it:0p)
 mda cen n mxwdh60x,
sre ad(a-eiewdh40x {
 cen n mxdvc-it:8p)
   / orCShr..*
    * u S ee. /
}

/ Silsal(u saigu)*
 * tl ml bt cln p /
@ei sre ad(i-it:0p){
 mda cen n mnwdh60x
   / orCShr..*
    * u S ee. /
}

/ Dstp*
 * eko /
@ei sre ad(i-it:6p){
 mda cen n mnwdh80x
   / orCShr..*
    * u S ee. /
}

/ Wd sre *
 * ie cen /
@ei sre ad(i-it:20x {
 mda cen n mnwdh10p)
   / orCShr..*
    * u S ee. /
}
CSS3 MEDIA QUERIES
                                LO QUE NO MOLA :(
       Según Jason Grigsby en su artículo CSS Media Query for Mobile is Fool’s Gold :


Se añade más código CSS (en la web mobile la velocidad importa!).
Dejar que el navegador escale las imágenes es una mala idea:
   Imágenes grandes = Grandes ficheros a descargar
   innecesariamente.
   El redimensionado es "CPU and memory intensive" por parte del
   navegador.
Utilizar Media Queries para servir distintas imágenes no es lo ideal
(aunque las escondamos vía CSS muchos navegadores las descargan
de todos modos).
Las Media Queries no optimizan el HTML o el JavaScript.
Las Media Queries no estan bien soportadas.
Ignoran el contexto mobile.
Tener una web mobile separada es bueno.
CSS3 MEDIA QUERIES
     RESPONSIVE WEB DESIGN STILL ROCKS!
“Planear el diseño para tamaños diferentes y pensar
 modularmente acerca de bloques y como ubicarlos
       según tamaño de pantalla, es bueno.”
RECURSOS
Responsive Web Design , de Ethan Marcotte.
Developing RWD With Opera Mobile Emulator , de Smashing
Magazine.
Opera Mobile Emulator , de Opera Software.
ProtoFluid . Rapid Prototyping of Fluid Layouts, Adaptive CSS and
Responsive Design.
CSS Media Query for Mobile is Fool’s Gold , de Jason Grigsby.
50 fantastic tools for responsive web design , de Net Magazine.
SASS

Filosofía y definición
Sass vs. LESS
Sass básico
Sass avanzado
Compass
Recursos
SASS
                       FILOSOFÍA PRINCIPAL
             “ DRY—Don't Repeat Yourself
  Reducir la repetición de código en las hojas de estilo,
             ahorrando tiempo y esfuerzo. ”
Del libro Pragmatic Guide to SASS , de Hampton Catlin y Michael Lintorn Catlin.
SASS… WHAT?
                  SYNTACTICALLY AWESOME STYLESHEETS
Lenguaje de pre-procesado server-side, que añade reglas anidadas,
variables, mixins,…
Se traduce en CSS estándar, bien formateado*.
Es un método alternativo de escribir CSS.
El CSS tradicional puede ser complicado de leer: Sass soluciona esto.
No reemplaza al CSS tradicional, pero nos ayuda a escribir hojas de
estilo limpias y semánticas.
Dos sintaxis distintas para escribir Sass: SCSS y SASS original. Nos
centraremos en la primera (SCSS).
     * Para procesarlo se puede usar la línea de comandos (consola), algun web-framework plugin,
                              o alguna GUI como Scout o CodeKit .
SASS
                   OTRA GRAN VENTAJA
 “Tener una paleta de color con un número fijo de
opciones a escoger ayuda a no volverse loco con los
   colores y a no desviarse del estilo marcado.”




      En definitiva, Sass ayuda a mantener un diseño consistente.
SASS VS. LESS
                        DIFERENCIAS
“La mayor diferencia entre Sass y LESS* es el modo en
   que son procesados. Sass corre sobre Ruby y es
               procesado server-side.”




            * LESS es una librería JavaScript (client-side).
SASS VS. LESS
                                            ¿CUÁL ESCOGER?
  Aunque Sass es mejor en unos cuantos aspectos, ambos presentan
  grandes similitudes.
  Ambos son pre-procesados.
  La documentación de LESS es mejor pero, por otro lado, Sass parece
  que está ganando terreno.
  Muchos desarrolladores no escogen LESS por su impacto negativo
  sobre la performance*.
* Tiempo adicional requerido por el motor de JavaScript para procesar el código y volcar el CSS modificado hacia el
 navegador. Una solución es usar LESS solo en entorno de desarrollo y una vez terminado, copiar y pegar el código
                               generado, minificarlo y meterlo en un fichero CSS.
SASS BÁSICO
                          INSTALACIÓN
        Para correr Sass, necesitas tener Ruby instalado.




Windows: instalar mediante Ruby Installer o similar.
Mac: desde terminal: s d g m i s a l s s .
                        uo e ntl as
Linux: utilizar el package manager y desde linea de comandos: g m
                                                               e
isalss.
 ntl as
SASS BÁSICO
                        COMPILACIÓN
Crear fichero Sass, con extensión . c s
                                   ss.
Compilar el directorio s s / CSS y printarlo por consola: s s
                        as a                               as
ts.cs
  etss
Compilar el directorio s s / CSS en un nuevo fichero . s : s s
                        as a                           cs as
ts.csts.s
  etss etcs
Algunos frameworks, como Ruby on Rails , detectan cambios en
ficheros . c s los compilan automáticamente a . s .
          ss y                                    cs
Si no usamos frameworks usar el comando w t hque detecta los
                                           ac,
cambios en los ficheros de nuestra carpeta s s / los compila en
                                            as y
ficheros . s en la carpeta especificada (c s ):
          cs                               s/
ss -wthsyehesss:tlset/s
  as -ac tlset/assyehescs
SASS BÁSICO
                          ALTERANDO LA SALIDA CSS
  Al compilar nuestro Sass se generan los CSS. Estos se pueden formatear de distintos modos:

ss -syense
 as -tl etd                / aiao(eal)
                            / ndd dfut.

ss -syeepne
 as -tl xadd               / sprlgbe
                            / ue eil.

ss -syecmat
 as -tl opc                / uasl lnaprdcaain
                            / n oa ie o elrcó.

ss -syecmrse / sprcmat (iiid.
 as -tl opesd / ue opco mnfe)


        Ejemplo. Compilar el fichero Sass a CSS en un nuevo fichero CSS comprimido:

ss ts.csts.s -syecmrse
 as etss etcs -tl opesd
SASS BÁSICO
                                     COMPILANDO CON SCOUT
Scout es una GUI que nos permite importar nuestro proyecto, especificando una carpeta de origen (p.e. "sass") y de
                                                salida (p.e. "css").




              Scout detecta cualquier cambio en los ficheros . c sy actualiza los . s de salida.
                                                              ss                   cs
SASS BÁSICO
                            /* COMENTARIOS */
    Usar comentarios de una sola linea para que aparezcan sólo en los ficheros Sass:

/ Hl!Et cmnai sl aaeeáe e fceo.cs
 / oa se oetro óo prcr n l ihr ss


     Usar comentarios estándar de CSS para que estos se compilen en el CSS final:

/ Aé!Et cmnai aaeeáe e .s fnl*
 * du se oetro prcr n l cs ia /
SASS BÁSICO
           ÁMBITO (SCOPE) DE LOS SELECTORES
       Sass soluciona la repetición de código mediante el anidado (nesting).
                                CSS "scopeado":

.noo
 ifbx                    {it:0p;
                         wdh20x}
.noo .esg
 ifbx msae               {odr1xsldrd}
                         bre:p oi e;
.noo .esg .il
 ifbx msae tte           {oo:e;
                         clrrd}
.noo .sr
 ifbx ue                 {odr2xsldbak}
                         bre:p oi lc;
.noo .sr.il
 ifbx ue tte             {oo:lc;
                         clrbak}

                                      Sass:

.noo {
 ifbx
  wdh20x
   it:0p;
  .esg {
   msae
     bre:p sldrd
      odr1x oi e;
     .il {
      tte
        clrrd }}
        oo:e;
  .sr{
   ue
     bre:p sldbak
      odr2x oi lc;
     .il {
      tte
        clrbak }}}
        oo:lc;
SASS BÁSICO
                                     DEFINIENDO VARIABLES
           Las variables ($ a _ a e son útiles para evitar la repetición de valores en nuestros CSS.
                           vrnm)

     $rmr_oo:#6;
      piayclr 39


                                  Las variables pueden ser globales o locales:

  Globales: se definen en su propia linea y se aplican a todas las hojas
  de estilos.
  Locales: se definen dentro de un selector y se aplican sólo dentro de
  dicho selector y sus hijos.
Se pueden establecer variables por defecto con el tag ! e a l después de la asignación. Al usar una variable, se
                                                       dfut
                   usa la asignación por defecto si no hay otras asignaciones de esa variable.
SASS BÁSICO
                   CALCULANDO UN LAYOUT
Sass permite hacer cáculos “al vuelo”, pudiéndose realizar las
 operaciones típicas mediante los operadores habituales de
                  programación (+-*/
                                   , , , ).
                            Ejemplo:

wdh 1p *05
 it: 2x  .;


                          Otro ejemplo:

$aewdh 50x
 pg_it: 0p;
wdh $aewdh*01
 it: pg_it  .;
SASS BÁSICO
                  CREANDO THEMES CON COLORES AVANZADOS
Cambiar la paleta de color de un site entero siempre es un engorro. Con Sass esto se puede hacer fácilmente
mediante funciones para aclarar y oscurecer colores, saturar y desaturar, entre muchas otras… Ejemplos:

                                       Aclarar/Oscurecer colores:

 #ae{
  pg
 clr lgtn#369 2%;}
  oo: ihe(369, 0)


                                       Saturar/Desaturar colores:

 $anclr #369
  mi_oo: 369;
 #ae{
  pg
 clr strt(mi_oo,3%;}
  oo: auae$anclr 0)
SASS BÁSICO
                          @IMPORTANDO
Importando centralizamos llamada a distintos ficheros.
Lo hacemos con @ m o t
                  i p r seguido por el nombre del fichero Sass que
queramos importar, p.e. @ m o t " e t (extensión . c s
                          ipr ts"                        ss o
. a s necesaria).
 s s no
Para que un fichero Sass no genere el correspondiente fichero CSS
escribiremos "_ delante del nombre del fichero (p.e. _ e t s s ).
                "                                     ts.cs
Cualquier variable o mixin que usemos en la hoja de estilos importada
podrá usarse en el fichero padre.
SASS BÁSICO
                                 @IMPORTANDO
                                Fichero _ o o s s s :
                                         clr.cs

$anclr #369
 mi_oo: 369;
/ ALTMR CLR G HR.
 /  O OE OOS O EE


                                 Fichero w d h . c s
                                          itsss:

$anwdh 70x
 mi_it: 2p;
/ ALTMR WDH G HR.
 /  O OE ITS O EE


                               Imports en fichero principal*:

@mot"oos;
 ipr clr"
@mot"its;
 ipr wdh"

  * Al hacer @ m o t es necesario incluir el guión bajo ni la extensión de _ o o s s s .
              i p r no                                                      clr.cs
SASS BÁSICO
            CONSTRUYENDO UNA LIBRERÍA FONT FAMILY
Con CSS tradicional hay que especificar una misma familia de
fuentes una y otra vez, o bién usar classes no semánticas
(p.e.f n 1 ).
      ot4
Con Sass podemos usar variables, en lugar de repetir la misma
declaración de f n - a i y
                  o t f m l una y otra vez.
Podemos declarar estas variables al principio de nuestra hoja de
estilos, o bién ponerlas en un fichero a parte e importarlas con
 ipr.
@mot
SASS BÁSICO
       CONSTRUYENDO UNA LIBRERÍA FONT FAMILY
                         Ejemplo
                 Fichero f n _ a i y s s :
                          otfml.cs

$evtc:"evtc nu" ail hleia sn-ei;
 hleia hleia ee, ra, evtc, assrf

$eea gnv,thm,sn-ei;
 gnv: eea aoa assrf

$uia "uiagad" "uiasn uioe,
 lcd: lcd rne, lcd as ncd"
"uiasn" lcd,sn-ei;
 lcd as, uia assrf


                  Import en fichero principal:

@mot"otfml"
 ipr fn_aiy;
SASS AVANZADO
                    MANTENIENDO LA SEMÁNTICA CON @EXTEND
                Mantener la semántica es una filosofía donde todo se nombra de forma lógica:

    .lebto
     bu_utn                  / icret (obesgnapco *
                              * norco nmr eú set) /
    .hcotbto
     ceku_utn                / cret (obesgnfnin *
                              * orco nmr eú ucó) /

 ¿Qué ocurre si tenemos un grupo de atributos -por ejemplo un botón azul- que necesitamos aplicar a múltiples
                                      botones con distintas funciones?

.hcotbto {
 ceku_utn                                                 / obé…*
                                                           *  in /
   bcgon-oo:le
    akrudclrbu;
   bre:p sldbak
    odr1x oi lc;                                          .hcotbto,
                                                           ceku_utn
}                                                         .ee_utn
                                                           rstbto,
.ee_utn{
 rstbto                                                   .edbto {
                                                           sn_utn
   bcgon-oo:le
    akrudclrbu;                                             bcgon-oo:le
                                                             akrudclrbu;
   bre:p sldbak
    odr1x oi lc;                                            bre:p sldbak
                                                             odr1x oi lc;
}                                                         }
.edbto {
 sn_utn
   bcgon-oo:le
    akrudclrbu;
   bre:p sldbak
    odr1x oi lc;
}
SASS AVANZADO
            MANTENIENDO LA SEMÁNTICA CON @EXTEND
  Aquí es donde entra @ x e dque clona los atributos de una c a s i y los añade a otro:
                       etn,                                  ls o d

.lebto {
 bu_utn
  bcgon:#369
   akrud  369;
  fn-egt bl;
   otwih: od
  clr wie
   oo: ht;
  pdig 5x }
   adn: p;

.hcotbto {
 ceku_utn
  @xed.lebto;}
   etn bu_utn


                                  Esto se compila como:

.lebto,.hcotbto {
 bu_utn ceku_utn
  bcgon:#369
   akrud  369;
  fn-egt bl;
   otwih: od
  clr wie
   oo: ht;
  pdig 5x }
   adn: p;
SASS AVANZADO
                MANTENIENDO LA SEMÁNTICA CON @EXTEND
            e t n permite modificar los estilos clonados.
            @xed
Por ejemplo, si necesitamos hacer que el c e k u _ u t n más oscuro que el b u _ u t n
                                          h c o t b t o sea                 l e b t o original
                                               hacemos:

  .hcotbto {
   ceku_utn
    @xed.lebto;
     etn bu_utn
    clr dre(369,1%;
     oo: akn#369 0)
  }
SASS AVANZADO
         MANTENIENDO EL CÓDIGO LIMPIO CON LOS MIXINS
Un mixin es un fragmento de Sass que puede ser fácilmente aplicado
a otro selector, evitando la repetición de código.
Ayudan a mantener el código semántico (p.e. podemos definir un
mixin como b u _ e t luego aplicarlo a una c a s
              letx y                               l s con nombre
más específico, como p o u t t t e
                        r d c _ i l ).
Es bueno tener los mixins en una hoja de estilos a parte, para luego
importarlos desde la hoja principal.
SASS AVANZADO
     MANTENIENDO EL CÓDIGO LIMPIO CON LOS MIXINS
         Un mixin se define de la siguiente forma (m x n t x . c s
                                                    i i _ e t s s ):

@ii bu_et{
 mxn letx
  clr #369
   oo: 369;
  fn-aiy hleia ail sn-ei;
   otfml: evtc, ra, assrf
  fn-ie 2p;}
   otsz: 0x


                  Para usarlo haremos (m x n u e s s ):
                                        ii_s.cs

.rdc_il {
 pouttte
  @nld bu_et }
   icue letx;


                            Esto se compila como:

.rdc_il {
 pouttte
  clr #369
   oo: 369;
  fn-aiy hleia ail sn-ei;
   otfml: evtc, ra, assrf
  fn-ie 2p;}
   otsz: 0x
SASS AVANZADO
        LLEVANDO LOS MIXINS MÁS ALLÁ CON VARIABLES
 Con @ x e d valores se mantienen, mientras que los mixins
      e t n los
pueden incluir argumentos o parámetros que permiten variar los
                           valores.
                   Definir un mixin con atributos variables:

 @ii bu_et$ie {
  mxn letx(sz)
   clr #369
    oo: 369;
   fn-aiy hleia ail sn-ei;
    otfml: evtc, ra, assrf
   fn-ie $ie
    otsz: sz;
   fn-ain:salcp;}
    otvrat ml-as

 .rdc_il {
  pouttte
   @nld bu_et(5x;}
    icue letx 1p)
SASS AVANZADO
     LLEVANDO LOS MIXINS MÁS ALLÁ CON VARIABLES
              Definir un mixin con un valor por defecto:

@ii bu_et$ie 2p){
 mxn letx(sz: 0x
  clr #369
   oo: 369;
  fn-aiy hleia ail sn-ei;
   otfml: evtc, ra, assrf
  fn-ie $ie
   otsz: sz;
  fn-ain:salcp;}
   otvrat ml-as


               Usar el mixin con y sin valor por defecto:

.rdc_il {
 pouttte
  @nld bu_et }
   icue letx;


.rdc_il {
 pouttte
  @nld bu_et(0p) }
   icue letx 10x;
SASS AVANZADO
     LLEVANDO LOS MIXINS MÁS ALLÁ CON VARIABLES
          El ejemplo anterior se compila, respectivamente, como:

.rdc_il {
 pouttte
  clr #369
   oo: 369;
  fn-aiy hleia ail sn-ei;
   otfml: evtc, ra, assrf
  fn-ie 2p;
   otsz: 0x
  fn-ain:salcp;}
   otvrat ml-as


.rdc_il {
 pouttte
  clr #369
   oo: 369;
  fn-aiy hleia ail sn-ei;
   otfml: evtc, ra, assrf
  fn-ie 10x
   otsz: 0p;
  fn-ain:salcp;}
   otvrat ml-as
SASS AVANZADO
                          INTERPOLACIÓN
    Interpolación significa "pon esto aquí". Nos permite generar
dinámicamente el nombre de una propiedad o selector, escribiendo la
                          variable entre # }
                                          {.
   $anm:vlo
    crae ov;

   .e_{crae {
    rd#$anm}
     clr #0;
      oo: f0
   }


                           Esto se compila como:

   .e_ov {
    rdvlo
     clr #0;
      oo: f0
   }
SASS AVANZADO
            SI TE REPITES MÁS QUE EL AJO, USA @EACH
e c ayuda a mantener nuestro Sass DRY. Es un modo de copiar el
@ah
         mismo estilo para un montón de variables.
  @ah$ebri to,jny cln pi {
   ec mme n hm   on, oi, hl
     .{mme}pcue{
      #$ebr_itr
        bcgon-mg:ul"iae#$ebr.p";}}
         akrudiae  r(/mg/{mme}jg)


                         Esto se compila como:

  .hmpcue{
   to_itr
    bcgon-mg:ul"iaeto.p";}
     akrudiae r(/mg/hmjg)
  .on_itr {
   jnypcue
    bcgon-mg:ul"iaejnyjg) }
     akrudiae r(/mg/on.p";
  .oi_itr {
   clnpcue
    bcgon-mg:ul"iaeclnjg) }
     akrudiae r(/mg/oi.p";
  .hlpcue{
   pi_itr
    bcgon-mg:ul"iaepi.p";}
     akrudiae r(/mg/hljg)
SASS AVANZADO
                DETERMINANDO CONDICIONES CON @IF
  i permite escribir condiciones, muy útil cuando escribimos mixins reusables y funciones.
  @f

@ii cutyclr$onr){
 mxn onr_oo(cuty
  @f$onr = fac {
   i cuty = rne
    clr bu;}
    oo: le
  @lei $onr = san{
   es  f cuty = pi
    clr ylo;}
    oo: elw
  @lei $onr = iay{
   es  f cuty = tl
    clr gen }
    oo: re;
  @le{
   es
    clr rd }}
    oo: e;

.nln {@nld cutyclregad;}
 egad  icue onr_oo(nln)
.rne{@nld cutyclrfac) }
 fac  icue onr_oo(rne;


                                   Esto se compila como:

.nln {clr rd }
 egad  oo: e;
.rne{clr bu;}
 fac  oo: le
SASS AVANZADO
      CAMBIANDO EL ASPECTO CON @MEDIA ANIDADO
        Cambiar el estilo en base al dispositivo.
                 Usando @ e i en estilo anidado:
                         mda

.an{
 mi
   clr #369
    oo: 369;
   fn-ie 1p;
    otsz: 5x
   @ei pit{
    mda rn
   fn-ie 1p;}}
    otsz: 0x


                      Esto se compila como:

.an{
 mi
   clr #369
    oo: 369;
   fn-ie 1p;}
    otsz: 5x
   @ei pit{
    mda rn
      .an{
       mi
         fn-ie 1p;}}
          otsz: 0x
SASS AVANZADO
      CAMBIANDO EL ASPECTO CON @MEDIA ANIDADO
                Haciendo el site portrait-specific…

.an{
 mi
   clr #369
    oo: 369;
   fn-ie 1p;
    otsz: 5x
   @ei sre ad(a-it:30x {
    mda cen n mxwdh 2p)
      fn-ie 3p;}}
       otsz: 5x


                      …o landscape-specific.

.an{
 mi
   clr #369
    oo: 369;
   fn-ie 1p;
    otsz: 5x
   @ei sre ad(i-it:31x ad(a-it:40x {
    mda cen n mnwdh 2p) n mxwdh 8p)
      fn-ie 2p;}}
       otsz: 5x
COMPASS
    Librería de mixins, funciones y otras extensiones
                     útiles para Sass.




           Una vez instalado Ruby, procedemos a instalar Compass:

gmudt -sse
 e pae -ytm
gmisalcmas
 e ntl ops


         Para compilar nuestras hojas de estilo usaremos - c m a s
                                                          -ops:

ss -cmasmfl.csmfl.s
 as -ops yiess yiecs
ss -cmas-wth
 as -ops -ac
COMPASS
                 CONFIGURACIÓN DE UN PROYECTO
Compass configura ficheros y carpetas por defecto.
Crear proyecto: $ c m a s c e t p o e t n m
                  > ops rae rjc_ae
Compilar: $ c m a s c m i e p o e t n m
           > ops opl rjc_ae
Una vez generado tu proyecto, coloca tus ficheros Sass en la carpeta
s s /El CSS compilado se coloca automáticamente en la carpeta
 as.
cs.
 s/
Cambiar configuración: editar fichero c n i . b
                                       ofgr.
Vigilar cambios proyecto entero: c m a s w t h
                                  ops ac.
COMPASS
         LAS VENTAJAS DE "LA BRÚJULA"
Facilita mucho el desarrollo, ahorrando tiempo
           y esfuerzo en desarrollo.
                      Compass.app
       GUI de Compass, para los "no amantes" de la consola.
RECURSOS
Pragmatic Guide to Sass , de Hampton Catlin y Michael Lintorn
Catlin.
Sass Language y Sass Script Functions , página oficial.
Sass vs. LESS , de CSS-Tricks.
An Introduction To LESS, And Comparison To Sass , de Smashing
Magazine.
Compass, an open-source CSS Authoring Framework , página oficial.
Sass, Compass, and Assetic in 10 minutes .
mooxins: CSS3 mixins for Sass(scss) .
DUDAS, PREGUNTAS, BOSTEZOS…




         ☛ The End ☚
Front-end Basics for Developers

Más contenido relacionado

Destacado

CSS Preprocessors - Sass
CSS Preprocessors - SassCSS Preprocessors - Sass
CSS Preprocessors - SassLourdes Montano
 
Desarrollo Agil con Ruby Y Rails
Desarrollo Agil con Ruby Y RailsDesarrollo Agil con Ruby Y Rails
Desarrollo Agil con Ruby Y RailsFran Diéguez
 
Pre-procesadores CSS. SASS
Pre-procesadores CSS. SASSPre-procesadores CSS. SASS
Pre-procesadores CSS. SASSMarionaCruz
 
Uso de las Infraestructuras de Datos Espaciales en Astronomía
Uso de las Infraestructuras de Datos Espaciales en AstronomíaUso de las Infraestructuras de Datos Espaciales en Astronomía
Uso de las Infraestructuras de Datos Espaciales en AstronomíaJose Gomez Castaño
 
ES2015 and Beyond
ES2015 and BeyondES2015 and Beyond
ES2015 and BeyondJay Phelps
 
Curso TDD Ruby on Rails #08: Buenas prácticas
Curso TDD Ruby on Rails #08: Buenas prácticasCurso TDD Ruby on Rails #08: Buenas prácticas
Curso TDD Ruby on Rails #08: Buenas prácticasAlberto Perdomo
 
Curso de Ruby on Rails
Curso de Ruby on RailsCurso de Ruby on Rails
Curso de Ruby on RailsASPgems
 
Curso de Ruby on Rails para el Master de Deusto. Día 2
Curso de Ruby on Rails para el Master de Deusto. Día 2Curso de Ruby on Rails para el Master de Deusto. Día 2
Curso de Ruby on Rails para el Master de Deusto. Día 2estialvarez
 
Intro to css & sass
Intro to css & sassIntro to css & sass
Intro to css & sassSean Wolfe
 
Haml y Sass: HTML y CSS dietéticos
Haml y Sass: HTML y CSS dietéticosHaml y Sass: HTML y CSS dietéticos
Haml y Sass: HTML y CSS dietéticosDAVID GRILLI
 
Introduction to SASS
Introduction to SASSIntroduction to SASS
Introduction to SASSJon Dean
 
Desarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on RailsDesarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on RailsFreelancer
 

Destacado (20)

CSS Preprocessors - Sass
CSS Preprocessors - SassCSS Preprocessors - Sass
CSS Preprocessors - Sass
 
Desarrollo Agil con Ruby Y Rails
Desarrollo Agil con Ruby Y RailsDesarrollo Agil con Ruby Y Rails
Desarrollo Agil con Ruby Y Rails
 
Pre-procesadores CSS. SASS
Pre-procesadores CSS. SASSPre-procesadores CSS. SASS
Pre-procesadores CSS. SASS
 
Ruby intro
Ruby introRuby intro
Ruby intro
 
Uso de las Infraestructuras de Datos Espaciales en Astronomía
Uso de las Infraestructuras de Datos Espaciales en AstronomíaUso de las Infraestructuras de Datos Espaciales en Astronomía
Uso de las Infraestructuras de Datos Espaciales en Astronomía
 
Sass y compass
Sass y compassSass y compass
Sass y compass
 
Lenguaje de programación Ruby
Lenguaje de programación RubyLenguaje de programación Ruby
Lenguaje de programación Ruby
 
ES2015 and Beyond
ES2015 and BeyondES2015 and Beyond
ES2015 and Beyond
 
[Cordova] Empezando con Ionic
[Cordova] Empezando con Ionic[Cordova] Empezando con Ionic
[Cordova] Empezando con Ionic
 
Curso TDD Ruby on Rails #08: Buenas prácticas
Curso TDD Ruby on Rails #08: Buenas prácticasCurso TDD Ruby on Rails #08: Buenas prácticas
Curso TDD Ruby on Rails #08: Buenas prácticas
 
Curso de Ruby on Rails
Curso de Ruby on RailsCurso de Ruby on Rails
Curso de Ruby on Rails
 
Curso de Ruby on Rails para el Master de Deusto. Día 2
Curso de Ruby on Rails para el Master de Deusto. Día 2Curso de Ruby on Rails para el Master de Deusto. Día 2
Curso de Ruby on Rails para el Master de Deusto. Día 2
 
Taller ruby
Taller rubyTaller ruby
Taller ruby
 
2 Introducción al lenguaje Ruby
2 Introducción al lenguaje Ruby2 Introducción al lenguaje Ruby
2 Introducción al lenguaje Ruby
 
Intro to css & sass
Intro to css & sassIntro to css & sass
Intro to css & sass
 
Sass presentation
Sass presentationSass presentation
Sass presentation
 
Ruby Facil
Ruby FacilRuby Facil
Ruby Facil
 
Haml y Sass: HTML y CSS dietéticos
Haml y Sass: HTML y CSS dietéticosHaml y Sass: HTML y CSS dietéticos
Haml y Sass: HTML y CSS dietéticos
 
Introduction to SASS
Introduction to SASSIntroduction to SASS
Introduction to SASS
 
Desarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on RailsDesarrollo de Apps Web en Ruby on Rails
Desarrollo de Apps Web en Ruby on Rails
 

Similar a Front-end Basics for Developers

Front end basics - Grid System
Front end basics - Grid SystemFront end basics - Grid System
Front end basics - Grid SystemNadal Soler
 
Front end basics - Responsive Web Design
Front end basics - Responsive Web DesignFront end basics - Responsive Web Design
Front end basics - Responsive Web DesignNadal Soler
 
Responsive Web Design (Diseño Web Adaptable)
Responsive Web Design (Diseño Web Adaptable)Responsive Web Design (Diseño Web Adaptable)
Responsive Web Design (Diseño Web Adaptable)Adolfo Sanz De Diego
 
Bases de datos NoSQL - Huancayo - 2010
Bases de datos NoSQL - Huancayo - 2010Bases de datos NoSQL - Huancayo - 2010
Bases de datos NoSQL - Huancayo - 2010Antonio Ognio
 
Responsive Web Design en Drupal
Responsive Web Design en DrupalResponsive Web Design en Drupal
Responsive Web Design en DrupalCristina Chumillas
 
Frameworks CSS
Frameworks CSSFrameworks CSS
Frameworks CSSbetabeers
 
Introducción a los Frameworks CSS
Introducción a los Frameworks CSSIntroducción a los Frameworks CSS
Introducción a los Frameworks CSSLuis Miguel Martín
 
MobileCONGalicia Introducción a Android
MobileCONGalicia Introducción a AndroidMobileCONGalicia Introducción a Android
MobileCONGalicia Introducción a AndroidAlberto Ruibal
 
El Ferrocarril Contra Los Arboles Muertos2
El Ferrocarril Contra Los Arboles Muertos2El Ferrocarril Contra Los Arboles Muertos2
El Ferrocarril Contra Los Arboles Muertos2ferdinand13
 
ArcGIS 10 - Actualización y Respaldo
ArcGIS 10 - Actualización y Respaldo ArcGIS 10 - Actualización y Respaldo
ArcGIS 10 - Actualización y Respaldo Washington Bastidas
 
Mobile Day - Lecciones de vuelo
Mobile Day - Lecciones de vueloMobile Day - Lecciones de vuelo
Mobile Day - Lecciones de vueloSoftware Guru
 
Proyectos escalables con Drupal
Proyectos escalables con DrupalProyectos escalables con Drupal
Proyectos escalables con DrupalPablo Cerda
 

Similar a Front-end Basics for Developers (20)

Front end basics - Grid System
Front end basics - Grid SystemFront end basics - Grid System
Front end basics - Grid System
 
Bootstrap, un framework CSS
Bootstrap, un framework CSSBootstrap, un framework CSS
Bootstrap, un framework CSS
 
Front end basics - Responsive Web Design
Front end basics - Responsive Web DesignFront end basics - Responsive Web Design
Front end basics - Responsive Web Design
 
Responsive Web Design (Diseño Web Adaptable)
Responsive Web Design (Diseño Web Adaptable)Responsive Web Design (Diseño Web Adaptable)
Responsive Web Design (Diseño Web Adaptable)
 
Android Superstar - Buenas Prácticas
Android Superstar - Buenas PrácticasAndroid Superstar - Buenas Prácticas
Android Superstar - Buenas Prácticas
 
Recursos en Android 101
Recursos en Android 101Recursos en Android 101
Recursos en Android 101
 
Responsive Web Design
Responsive Web DesignResponsive Web Design
Responsive Web Design
 
Bases de datos NoSQL - Huancayo - 2010
Bases de datos NoSQL - Huancayo - 2010Bases de datos NoSQL - Huancayo - 2010
Bases de datos NoSQL - Huancayo - 2010
 
Responsive Web Design en Drupal
Responsive Web Design en DrupalResponsive Web Design en Drupal
Responsive Web Design en Drupal
 
CSS3
CSS3CSS3
CSS3
 
Frameworks CSS
Frameworks CSSFrameworks CSS
Frameworks CSS
 
Introducción a los Frameworks CSS
Introducción a los Frameworks CSSIntroducción a los Frameworks CSS
Introducción a los Frameworks CSS
 
Clase 10. CSS 6.pdf
Clase 10. CSS 6.pdfClase 10. CSS 6.pdf
Clase 10. CSS 6.pdf
 
MobileCONGalicia Introducción a Android
MobileCONGalicia Introducción a AndroidMobileCONGalicia Introducción a Android
MobileCONGalicia Introducción a Android
 
Semana 3 Responsive Design y Media Queries
Semana 3   Responsive Design y Media QueriesSemana 3   Responsive Design y Media Queries
Semana 3 Responsive Design y Media Queries
 
El Ferrocarril Contra Los Arboles Muertos2
El Ferrocarril Contra Los Arboles Muertos2El Ferrocarril Contra Los Arboles Muertos2
El Ferrocarril Contra Los Arboles Muertos2
 
ArcGIS 10 - Actualización y Respaldo
ArcGIS 10 - Actualización y Respaldo ArcGIS 10 - Actualización y Respaldo
ArcGIS 10 - Actualización y Respaldo
 
Flexsdashboard
Flexsdashboard Flexsdashboard
Flexsdashboard
 
Mobile Day - Lecciones de vuelo
Mobile Day - Lecciones de vueloMobile Day - Lecciones de vuelo
Mobile Day - Lecciones de vuelo
 
Proyectos escalables con Drupal
Proyectos escalables con DrupalProyectos escalables con Drupal
Proyectos escalables con Drupal
 

Último

Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 

Último (16)

Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 

Front-end Basics for Developers

  • 1. FRONT-END BASICS for developers Cosas que deberías saber sobre Front-end, aunque te ganes el pan como Developer :) ♣ Nadal Soler / @nadalsol
  • 2. FRONT-END BASICS FOR DEVELOPERS 1. Grid System 2. Responsive Web Design (RWD) 3. Sass (Syntactically Awesome Stylesheets) 4. Dudas, preguntas, bostezos…
  • 3. GRID SYSTEM Sorry… ¿Grid qué? Sin retícula no hay película Ventajas / ¿Desventajas? Cómo usar el Grid Recursos
  • 4. SORRY… ¿GRID QUÉ? El concepto Grid System no es nuevo (diseño editorial). Se basa en una retícula (grid) como elemento para mantener orden, proporción y composición. Esta estructura/base se conoce como Layout.
  • 5. SIN RETÍCULA NO HAY PELÍCULA Cualquier Diseñador y Front-end Developer debería usar un grid frente a diseños complejos. Facilita la composición y evita incoherencias al aplicar la Guía de Estilos. Inuit CSS , 960gs , Gumby Framework , 1140 Grid , Bootstrap , Zen Grids …
  • 7. VENTAJAS Mejor organización de la información. Mayor control sobre la composición de página (ningún elemento puede desbordar* el grid acordado). Mayor versatilidad sobre el layout (2 cols, 3 cols…). Diseño más consistente entre páginas (homogeneidad = mejor experiencia de usuario). Fácil implementación y mantenimiento (los diseños de nuevas páginas/secciones deben ceñirse al grid). Pequeñas mejoras en SEO y accesibilidad, al poder "empujar" contenidos (classes p s y p l ). uh ul * Salvo contadas excepciones (algunos banners, fixed bars, modal windows, etc…).
  • 8. ¿DESVENTAJAS? I DON'T THINK SO… Puede generar mayor densidad de código HTML (más < i > y dvs classes). Nombres de classes "poco semánticos", como c n a n r 1 , otie_6 g i _ , s a 8r w rd8 pn, o… En proyectos pequeños, mucho código CSS que quizás nunca usaremos. ¿Es esto grave? I don't think so… Los beneficios superan las "desventajas".
  • 9. CÓMO USAR EL GRID 1. Utiliza la class container_12 para el grid de 12 columnas y container_16 para la versión de 16 columnas. <i cas"otie_2> dv ls=cnanr1" <i cas"rd4> dv ls=gi_" <> lk Fec Fis/> pI ie rnh re<p <dv /i> <i cas"rd4> dv ls=gi_" <>fcus,Ima FedmFis/> pO ore en reo re<p <dv /i> <i cas"rd4> dv ls=gi_" <>r Ptt i co!/> pM. oao s ol<p <dv /i> <dv /i> <i cas"otie_6> dv ls=cnanr1" <i cas"rd1" dv ls=gi_2> <> lk Fec Fis/> pI ie rnh re<p <dv /i> <i cas"rd4> dv ls=gi_" <>fcus,Ima FedmFis/> pO ore en reo re<p <dv /i> <dv /i>
  • 10. CÓMO USAR EL GRID 2. Utiliza las classes grid_1, grid_2, grid_3, etc. para fijar los anchos de columna. Para rellenar una fila completa, asegúrate que las columnas sumen 12 ó 16. <i cas"otie_6> dv ls=cnanr1" <i cas"rd1" dv ls=gi_2> <> lk Fec Fis/> pI ie rnh re<p <dv /i> <i cas"rd4> dv ls=gi_" <>fcus,Ima FedmFis/> pO ore en reo re<p <dv /i> <dv /i> ejemplo: grid_4 + grid_2 + grid_6 = 12
  • 11. CÓMO USAR EL GRID 3. Utiliza push y pull para posicionar items en la página de forma independiente, a pesar de su posición en el HTML. <i cas"otie_2> dv ls=cnanr1" <i cas"rd6ps_"<>oo/>/i> dv ls=gi_ uh3>plg<p<dv <i cas"rd3pl_"<>etclm<p<dv dv ls=gi_ ul6>ptx oun/>/i> <i cas"rd3>ptx clm<p<dv dv ls=gi_"<>et oun/>/i> <i cas"rd1"<>i bx/>/i> dv ls=gi_2>pbg o<p<dv <dv /i>
  • 12. CÓMO USAR EL GRID 4. Utiliza las classes prefix y suffix para crear espacios vacíos en el layout. <i cas"otie_2> dv ls=cnanr1" <i cas"rd6sfi_" dv ls=gi_ ufx3> <>ls=gi_ sfi_"/> pcas"rd6 ufx3<p <dv /i> <i cas"rd3> dv ls=gi_" <>ls=gi_"/> pcas"rd3<p <dv /i> <i cas"rd1" dv ls=gi_2> <>i bx/> pbg o<p <dv /i> <dv /i> En este ejemplo podemos ver como crear un espacio vacío de tres columnas después de un elemento, mediante el uso de la class suffix_3.
  • 13. CÓMO USAR EL GRID 5. Utiliza las classes alpha ("first") y omega ("last") para eliminar los márgenes de columnas en grids anidados. <i cas"otie_6> dv ls=cnanr1" <i cas"rd8> dv ls=gi_" <i cas"rd4apa> dv ls=gi_ lh" <>rd4isd gi_ (lh)/> pgi_ nie rd8 apa<p <dv /i> <i cas"rd4oea> dv ls=gi_ mg" <>rd4isd gi_ (mg)/> pgi_ nie rd8 oea<p <dv /i> <dv /i> <i cas"rd8> dv ls=gi_" <>rd8/> pgi_<p <dv /i> <dv /i> En el ejemplo vemos como crear sub-divisiones dentro de columnas, anidando grids.
  • 14. CÓMO USAR EL GRID (RESUMEN) 1. Utiliza la class container_12 para el grid de 12 columnas y container_16 para la versión de 16 columnas. 2. Utiliza las classes grid_1, grid_2, grid_3, etc. para fijar los anchos de columna. Para rellenar una fila completa, asegúrate que los anchos de columnas sumen 12 ó 16 (p.e. grid_4 + grid_2 + grid_6 = 12). 3. Utiliza las classes push y pull para posicionar items en la página de forma independiente, a pesar de su posición en el HTML. 4. Utiliza las classes prefix y suffix para crear espacios vacíos en el layout. 5. Utiliza las classes alpha ("first") y omega ("last") para eliminar los márgenes de columnas en grids anidados.
  • 15. RECURSOS The Grid System The 960 Grid System Made Easy 960gs Variable Grid System Fluid 960 Grid System mos-golden Grid System Todos los ejemplos vistos en esta presentación están basados en 960gs . Otros grid system pueden usar nombres de classes distintos.
  • 16. RESPONSIVE WEB DESIGN (RWD) Responsive Architecture ¿WTF is RWD? Ingredientes para RWD Recursos
  • 17. RESPONSIVE ARCHITECTURE Actualmente diseñamos para más dispositivos que nunca (mobile, desktop, tablet, smart tv…). Cada medio es distinto (ancho mínimo de pantalla, densidad de pixel, n° de colores, fuentes, navegador…).
  • 18. RESPONSIVE ARCHITECTURE ¿TIENE SENTIDO? “Fragmentar nuestro contenido a través de diferentes experiencias "dispositivo optimizadas" es un propósito insostenible. La alternativa a esto se llama Responsive Architecture: crear sitios no sólo más flexibles, sino que también se adapten al medio que los renderiza.” Del libro "Responsive Web Design" , de Ethan Marcotte.
  • 19. ¿WTF IS:NOT RWD? No es el nombre de la banda de moda, ni de ninguna revista de tendencias. Una web con RWD no es una web móvil ya que los contenidos y performance no están optimizados. Para hacer una web móvil deberíamos usar SSDDT *, para servir los contenidos adecuados al medio: "copys" resumidos, imágenes más pequeñas y optimizadas, funcionalidad básica, etc… * Server-Side Device Detection Techniques.
  • 20. ¿WTF IS RWD? “Responsive Web Design = Diseño Web Adaptable/Adaptativo/Responsivo” La finalidad del RWD es hacer que la web se visualice correctamente en distintos contextos (dispositivos), con independencia del tamaño de pantalla o resolución del mismo, mejorando la experiencia de cada tipo de usuario (mobile, desktop, smart tv, whatever…). El RWD se puede combinar con las SSDDT para ofrecer una experiencia completa: diseño adaptable + contenido adecuado y optimizado.
  • 21. INGREDIENTES PARA RWD 1. Grid flexible 2. Imágenes flexibles * 3. CSS3 Media Queries * No sólo imágenes sino cualquier otro media: videos, flash, carousels…
  • 22. GRID FLEXIBLE “Retícula fluida o elástica, que se adapta a cambios de resolución de pantalla y dimensiones del viewport.”
  • 23. GRID FLEXIBLE CARACTERÍSTICAS Flexible Typesetting, o fuentes escalables en medidas relativas (em). Evitar usar px!
  • 24. GRID FLEXIBLE CARACTERÍSTICAS Grid (columnas) y espacios horizontales (widths, margins, paddings) en porcentajes (%).
  • 25. GRID FLEXIBLE EN DEFINITIVA… THINK FLEXIBLE! Romper con el hábito de traducir los pixels de Photoshop a CSS. Focalizar nuestra atención en las proporciones que hay trás un diseño.
  • 26. GRID FLEXIBLE Flexible Grid (demo) *, en A List Apart * Redimensiona la ventana del navegador para ver como se comporta.
  • 27. IMÁGENES FLEXIBLES “Imágenes elásticas, que se escalan según cambios de resolución de pantalla y dimensiones del viewport.”
  • 28. IMÁGENES FLEXIBLES ¿CÓMO HACER UNA IMAGEN FLEXIBLE? Encapsular-la dentro de un contenedor de bloque (p.e. un <span> con display:block). Definir un ancho en porcentaje (%) a dicho contenedor, para que este sea flexible. El valor del porcentaje determinará su ancho en función de su padre. Opcionalmente el contenedor puede ir flotado. Establecer display:block y max-width:100% a la imagen. Dejar sus atributos HTML width y height vacíos.
  • 29. IMÁGENES FLEXIBLES Ejemplo. En este caso la imagen flexible ocuparía el 25% de su contenedor padre: <pncas"lxm w2 fot" sa ls=feIg p5 laR> <m sc"m/epniesml_.p"at""/ ig r=igrsosv_apeljg l= > <sa> /pn .lxm {/ Tefeil iaewapr cudb <>o <pn.Sol b cm feIg * h lxbe mg rpe, ol e a r sa> hud e o bndwt apretg wdhcas* ie ih ecnae it ls / dslybok ipa:lc; } .lxm ig{ feIg m dslybok ipa:lc; mxwdh10; a-it:0% } .p5{ w2 wdh2% it:5; } .laR{ fot fotrgt la:ih; }
  • 30. IMÁGENES FLEXIBLES Ejemplo. En este caso la imagen flexible ocuparía el 25% de su contenedor padre:
  • 31. IMÁGENES FLEXIBLES Si necesitamos que la imagen sea un enlace podemos sustituir el tag < p n por un < > sa> a (usando el mismo CSS que en el ejemplo anterior): < he=# cas"lxm w2 fot" a rf"" ls=feIg p5 laR> <m sc"m/epniesml_.p"at""/ ig r=igrsosv_apeljg l= > <a /> .lxm {/ Tefeil iaewapr cudb <>o <pn.Sol b cm feIg * h lxbe mg rpe, ol e a r sa> hud e o bndwt apretg wdhcas* ie ih ecnae it ls / dslybok ipa:lc; } .lxm ig{ feIg m dslybok ipa:lc; mxwdh10; a-it:0% } .p5{ w2 wdh2% it:5; } .laR{ fot fotrgt la:ih; }
  • 32. IMÁGENES FLEXIBLES Ejemplos con tamaños de imagen distintos: Responsive Web Design (demo) * * Redimensiona la ventana del navegador para ver como se comporta el layout e imágenes flexibles, junto con los media queries.
  • 33. CSS3 MEDIA QUERIES “Ningún diseño, fijo o fluido, escala bien más allá del contexto para el que fue originalmente diseñado.” Del libro "Responsive Web Design" , de Ethan Marcotte.
  • 34. CSS3 MEDIA QUERIES PROBLEMAS COMUNES LAYOUTS FLEXIBLES Imágenes irreconocibles (demasiado pequeñas o recortadas por overflow:hidden). Márgenes demasiado grandes. Lineas de texto demasiado cortas (o demasiado largas). Elementos de navegación rotos dificultando legibilidad. Otros problemas…
  • 35. CSS3 MEDIA QUERIES ¿Cómo crear un diseño que pueda adaptarse a cambios de resolución de pantalla y dimensiones del viewport? ¿Cómo hacer diseños más responsive? LAYOUTS FLEXIBLES + MEDIA QUERIES
  • 36. CSS3 MEDIA QUERIES ¿QUÉ SON Y PARA QUÉ SIRVEN? Son un robusto mecanismo, creado por la W3C, para identificar no sólo los tipos de media, sino también para inspeccionar las características físicas de los dispositivos y navegadores que renderizan el contenido. ¿Sigues sin saber de qué va esto? mediaqueri.es Robot or Not?
  • 37. CSS3 MEDIA QUERIES DISTINTAS NOMENCLATURAS @ei sre ad(i-it:04x { mda cen n mnwdh12p) bd { oy fn-ie10; otsz:0% } } <ikrl"tlset he=wd.s"mda"cenad(i-it:04x"/ ln e=syehe" rf"iecs ei=sre n mnwdh12p) > @motul"iecs)sre ad(i-it:04x; ipr r(wd.s" cen n mnwdh12p) Se pueden encadenar múltiples queries juntas mediante la keyword “and” @ei sre ad(i-eiewdh40x ad(retto:adcp){…} mda cen n mndvc-it:8p) n oinainlnsae
  • 38. CSS3 MEDIA QUERIES CAPACIDADES DE LOS DISPOSITIVOS A DETECTAR width height device-width device-height orientation and many more… Lista completa en W3C Media Queries - Features .
  • 39. CSS3 MEDIA QUERIES CONSIDERACIONES Recaudar información detallada sobre los dispositivos y navegadores de tu target, saber qué características de los media queries soportan, y testear acorde. Width y height hacen referencia al viewport o ventana del navegador, mientras que device-width y device-height miden las dimensiones de toda la pantalla. Añadir este meta tag en el HTML: <eanm=vepr"cnet"nta-cl=.,wdhdvc-it"/ mt ae"iwot otn=iiilsae10 it=eiewdh > Esto hace que el ancho del viewport del navegador sea igual al ancho de la pantalla del dispositivo, y establece el nivel de zoom al 100%. Con esto logramos mayor consistencia con el tamaño actual del dispositivo.
  • 40. CSS3 MEDIA QUERIES COMPATIBILIDAD Algunos navegadores aún no las soportan*, aunque existen scripts para solucionarlo: css3-mediaqueries-js respond.js * When can I use CSS3 Media Queries?
  • 41. CSS3 MEDIA QUERIES EJEMPLO PRÁCTICO / Salsre * * ml cen / @ei sre ad(a-it:0p) mda cen n mxwdh60x, sre ad(a-eiewdh40x { cen n mxdvc-it:8p) / orCShr..* * u S ee. / } / Silsal(u saigu)* * tl ml bt cln p / @ei sre ad(i-it:0p){ mda cen n mnwdh60x / orCShr..* * u S ee. / } / Dstp* * eko / @ei sre ad(i-it:6p){ mda cen n mnwdh80x / orCShr..* * u S ee. / } / Wd sre * * ie cen / @ei sre ad(i-it:20x { mda cen n mnwdh10p) / orCShr..* * u S ee. / }
  • 42. CSS3 MEDIA QUERIES LO QUE NO MOLA :( Según Jason Grigsby en su artículo CSS Media Query for Mobile is Fool’s Gold : Se añade más código CSS (en la web mobile la velocidad importa!). Dejar que el navegador escale las imágenes es una mala idea: Imágenes grandes = Grandes ficheros a descargar innecesariamente. El redimensionado es "CPU and memory intensive" por parte del navegador. Utilizar Media Queries para servir distintas imágenes no es lo ideal (aunque las escondamos vía CSS muchos navegadores las descargan de todos modos). Las Media Queries no optimizan el HTML o el JavaScript. Las Media Queries no estan bien soportadas. Ignoran el contexto mobile. Tener una web mobile separada es bueno.
  • 43. CSS3 MEDIA QUERIES RESPONSIVE WEB DESIGN STILL ROCKS! “Planear el diseño para tamaños diferentes y pensar modularmente acerca de bloques y como ubicarlos según tamaño de pantalla, es bueno.”
  • 44. RECURSOS Responsive Web Design , de Ethan Marcotte. Developing RWD With Opera Mobile Emulator , de Smashing Magazine. Opera Mobile Emulator , de Opera Software. ProtoFluid . Rapid Prototyping of Fluid Layouts, Adaptive CSS and Responsive Design. CSS Media Query for Mobile is Fool’s Gold , de Jason Grigsby. 50 fantastic tools for responsive web design , de Net Magazine.
  • 45. SASS Filosofía y definición Sass vs. LESS Sass básico Sass avanzado Compass Recursos
  • 46. SASS FILOSOFÍA PRINCIPAL “ DRY—Don't Repeat Yourself Reducir la repetición de código en las hojas de estilo, ahorrando tiempo y esfuerzo. ” Del libro Pragmatic Guide to SASS , de Hampton Catlin y Michael Lintorn Catlin.
  • 47. SASS… WHAT? SYNTACTICALLY AWESOME STYLESHEETS Lenguaje de pre-procesado server-side, que añade reglas anidadas, variables, mixins,… Se traduce en CSS estándar, bien formateado*. Es un método alternativo de escribir CSS. El CSS tradicional puede ser complicado de leer: Sass soluciona esto. No reemplaza al CSS tradicional, pero nos ayuda a escribir hojas de estilo limpias y semánticas. Dos sintaxis distintas para escribir Sass: SCSS y SASS original. Nos centraremos en la primera (SCSS). * Para procesarlo se puede usar la línea de comandos (consola), algun web-framework plugin, o alguna GUI como Scout o CodeKit .
  • 48. SASS OTRA GRAN VENTAJA “Tener una paleta de color con un número fijo de opciones a escoger ayuda a no volverse loco con los colores y a no desviarse del estilo marcado.” En definitiva, Sass ayuda a mantener un diseño consistente.
  • 49. SASS VS. LESS DIFERENCIAS “La mayor diferencia entre Sass y LESS* es el modo en que son procesados. Sass corre sobre Ruby y es procesado server-side.” * LESS es una librería JavaScript (client-side).
  • 50. SASS VS. LESS ¿CUÁL ESCOGER? Aunque Sass es mejor en unos cuantos aspectos, ambos presentan grandes similitudes. Ambos son pre-procesados. La documentación de LESS es mejor pero, por otro lado, Sass parece que está ganando terreno. Muchos desarrolladores no escogen LESS por su impacto negativo sobre la performance*. * Tiempo adicional requerido por el motor de JavaScript para procesar el código y volcar el CSS modificado hacia el navegador. Una solución es usar LESS solo en entorno de desarrollo y una vez terminado, copiar y pegar el código generado, minificarlo y meterlo en un fichero CSS.
  • 51. SASS BÁSICO INSTALACIÓN Para correr Sass, necesitas tener Ruby instalado. Windows: instalar mediante Ruby Installer o similar. Mac: desde terminal: s d g m i s a l s s . uo e ntl as Linux: utilizar el package manager y desde linea de comandos: g m e isalss. ntl as
  • 52. SASS BÁSICO COMPILACIÓN Crear fichero Sass, con extensión . c s ss. Compilar el directorio s s / CSS y printarlo por consola: s s as a as ts.cs etss Compilar el directorio s s / CSS en un nuevo fichero . s : s s as a cs as ts.csts.s etss etcs Algunos frameworks, como Ruby on Rails , detectan cambios en ficheros . c s los compilan automáticamente a . s . ss y cs Si no usamos frameworks usar el comando w t hque detecta los ac, cambios en los ficheros de nuestra carpeta s s / los compila en as y ficheros . s en la carpeta especificada (c s ): cs s/ ss -wthsyehesss:tlset/s as -ac tlset/assyehescs
  • 53. SASS BÁSICO ALTERANDO LA SALIDA CSS Al compilar nuestro Sass se generan los CSS. Estos se pueden formatear de distintos modos: ss -syense as -tl etd / aiao(eal) / ndd dfut. ss -syeepne as -tl xadd / sprlgbe / ue eil. ss -syecmat as -tl opc / uasl lnaprdcaain / n oa ie o elrcó. ss -syecmrse / sprcmat (iiid. as -tl opesd / ue opco mnfe) Ejemplo. Compilar el fichero Sass a CSS en un nuevo fichero CSS comprimido: ss ts.csts.s -syecmrse as etss etcs -tl opesd
  • 54. SASS BÁSICO COMPILANDO CON SCOUT Scout es una GUI que nos permite importar nuestro proyecto, especificando una carpeta de origen (p.e. "sass") y de salida (p.e. "css"). Scout detecta cualquier cambio en los ficheros . c sy actualiza los . s de salida. ss cs
  • 55. SASS BÁSICO /* COMENTARIOS */ Usar comentarios de una sola linea para que aparezcan sólo en los ficheros Sass: / Hl!Et cmnai sl aaeeáe e fceo.cs / oa se oetro óo prcr n l ihr ss Usar comentarios estándar de CSS para que estos se compilen en el CSS final: / Aé!Et cmnai aaeeáe e .s fnl* * du se oetro prcr n l cs ia /
  • 56. SASS BÁSICO ÁMBITO (SCOPE) DE LOS SELECTORES Sass soluciona la repetición de código mediante el anidado (nesting). CSS "scopeado": .noo ifbx {it:0p; wdh20x} .noo .esg ifbx msae {odr1xsldrd} bre:p oi e; .noo .esg .il ifbx msae tte {oo:e; clrrd} .noo .sr ifbx ue {odr2xsldbak} bre:p oi lc; .noo .sr.il ifbx ue tte {oo:lc; clrbak} Sass: .noo { ifbx wdh20x it:0p; .esg { msae bre:p sldrd odr1x oi e; .il { tte clrrd }} oo:e; .sr{ ue bre:p sldbak odr2x oi lc; .il { tte clrbak }}} oo:lc;
  • 57. SASS BÁSICO DEFINIENDO VARIABLES Las variables ($ a _ a e son útiles para evitar la repetición de valores en nuestros CSS. vrnm) $rmr_oo:#6; piayclr 39 Las variables pueden ser globales o locales: Globales: se definen en su propia linea y se aplican a todas las hojas de estilos. Locales: se definen dentro de un selector y se aplican sólo dentro de dicho selector y sus hijos. Se pueden establecer variables por defecto con el tag ! e a l después de la asignación. Al usar una variable, se dfut usa la asignación por defecto si no hay otras asignaciones de esa variable.
  • 58. SASS BÁSICO CALCULANDO UN LAYOUT Sass permite hacer cáculos “al vuelo”, pudiéndose realizar las operaciones típicas mediante los operadores habituales de programación (+-*/ , , , ). Ejemplo: wdh 1p *05 it: 2x .; Otro ejemplo: $aewdh 50x pg_it: 0p; wdh $aewdh*01 it: pg_it .;
  • 59. SASS BÁSICO CREANDO THEMES CON COLORES AVANZADOS Cambiar la paleta de color de un site entero siempre es un engorro. Con Sass esto se puede hacer fácilmente mediante funciones para aclarar y oscurecer colores, saturar y desaturar, entre muchas otras… Ejemplos: Aclarar/Oscurecer colores: #ae{ pg clr lgtn#369 2%;} oo: ihe(369, 0) Saturar/Desaturar colores: $anclr #369 mi_oo: 369; #ae{ pg clr strt(mi_oo,3%;} oo: auae$anclr 0)
  • 60. SASS BÁSICO @IMPORTANDO Importando centralizamos llamada a distintos ficheros. Lo hacemos con @ m o t i p r seguido por el nombre del fichero Sass que queramos importar, p.e. @ m o t " e t (extensión . c s ipr ts" ss o . a s necesaria). s s no Para que un fichero Sass no genere el correspondiente fichero CSS escribiremos "_ delante del nombre del fichero (p.e. _ e t s s ). " ts.cs Cualquier variable o mixin que usemos en la hoja de estilos importada podrá usarse en el fichero padre.
  • 61. SASS BÁSICO @IMPORTANDO Fichero _ o o s s s : clr.cs $anclr #369 mi_oo: 369; / ALTMR CLR G HR. / O OE OOS O EE Fichero w d h . c s itsss: $anwdh 70x mi_it: 2p; / ALTMR WDH G HR. / O OE ITS O EE Imports en fichero principal*: @mot"oos; ipr clr" @mot"its; ipr wdh" * Al hacer @ m o t es necesario incluir el guión bajo ni la extensión de _ o o s s s . i p r no clr.cs
  • 62. SASS BÁSICO CONSTRUYENDO UNA LIBRERÍA FONT FAMILY Con CSS tradicional hay que especificar una misma familia de fuentes una y otra vez, o bién usar classes no semánticas (p.e.f n 1 ). ot4 Con Sass podemos usar variables, en lugar de repetir la misma declaración de f n - a i y o t f m l una y otra vez. Podemos declarar estas variables al principio de nuestra hoja de estilos, o bién ponerlas en un fichero a parte e importarlas con ipr. @mot
  • 63. SASS BÁSICO CONSTRUYENDO UNA LIBRERÍA FONT FAMILY Ejemplo Fichero f n _ a i y s s : otfml.cs $evtc:"evtc nu" ail hleia sn-ei; hleia hleia ee, ra, evtc, assrf $eea gnv,thm,sn-ei; gnv: eea aoa assrf $uia "uiagad" "uiasn uioe, lcd: lcd rne, lcd as ncd" "uiasn" lcd,sn-ei; lcd as, uia assrf Import en fichero principal: @mot"otfml" ipr fn_aiy;
  • 64. SASS AVANZADO MANTENIENDO LA SEMÁNTICA CON @EXTEND Mantener la semántica es una filosofía donde todo se nombra de forma lógica: .lebto bu_utn / icret (obesgnapco * * norco nmr eú set) / .hcotbto ceku_utn / cret (obesgnfnin * * orco nmr eú ucó) / ¿Qué ocurre si tenemos un grupo de atributos -por ejemplo un botón azul- que necesitamos aplicar a múltiples botones con distintas funciones? .hcotbto { ceku_utn / obé…* * in / bcgon-oo:le akrudclrbu; bre:p sldbak odr1x oi lc; .hcotbto, ceku_utn } .ee_utn rstbto, .ee_utn{ rstbto .edbto { sn_utn bcgon-oo:le akrudclrbu; bcgon-oo:le akrudclrbu; bre:p sldbak odr1x oi lc; bre:p sldbak odr1x oi lc; } } .edbto { sn_utn bcgon-oo:le akrudclrbu; bre:p sldbak odr1x oi lc; }
  • 65. SASS AVANZADO MANTENIENDO LA SEMÁNTICA CON @EXTEND Aquí es donde entra @ x e dque clona los atributos de una c a s i y los añade a otro: etn, ls o d .lebto { bu_utn bcgon:#369 akrud 369; fn-egt bl; otwih: od clr wie oo: ht; pdig 5x } adn: p; .hcotbto { ceku_utn @xed.lebto;} etn bu_utn Esto se compila como: .lebto,.hcotbto { bu_utn ceku_utn bcgon:#369 akrud 369; fn-egt bl; otwih: od clr wie oo: ht; pdig 5x } adn: p;
  • 66. SASS AVANZADO MANTENIENDO LA SEMÁNTICA CON @EXTEND e t n permite modificar los estilos clonados. @xed Por ejemplo, si necesitamos hacer que el c e k u _ u t n más oscuro que el b u _ u t n h c o t b t o sea l e b t o original hacemos: .hcotbto { ceku_utn @xed.lebto; etn bu_utn clr dre(369,1%; oo: akn#369 0) }
  • 67. SASS AVANZADO MANTENIENDO EL CÓDIGO LIMPIO CON LOS MIXINS Un mixin es un fragmento de Sass que puede ser fácilmente aplicado a otro selector, evitando la repetición de código. Ayudan a mantener el código semántico (p.e. podemos definir un mixin como b u _ e t luego aplicarlo a una c a s letx y l s con nombre más específico, como p o u t t t e r d c _ i l ). Es bueno tener los mixins en una hoja de estilos a parte, para luego importarlos desde la hoja principal.
  • 68. SASS AVANZADO MANTENIENDO EL CÓDIGO LIMPIO CON LOS MIXINS Un mixin se define de la siguiente forma (m x n t x . c s i i _ e t s s ): @ii bu_et{ mxn letx clr #369 oo: 369; fn-aiy hleia ail sn-ei; otfml: evtc, ra, assrf fn-ie 2p;} otsz: 0x Para usarlo haremos (m x n u e s s ): ii_s.cs .rdc_il { pouttte @nld bu_et } icue letx; Esto se compila como: .rdc_il { pouttte clr #369 oo: 369; fn-aiy hleia ail sn-ei; otfml: evtc, ra, assrf fn-ie 2p;} otsz: 0x
  • 69. SASS AVANZADO LLEVANDO LOS MIXINS MÁS ALLÁ CON VARIABLES Con @ x e d valores se mantienen, mientras que los mixins e t n los pueden incluir argumentos o parámetros que permiten variar los valores. Definir un mixin con atributos variables: @ii bu_et$ie { mxn letx(sz) clr #369 oo: 369; fn-aiy hleia ail sn-ei; otfml: evtc, ra, assrf fn-ie $ie otsz: sz; fn-ain:salcp;} otvrat ml-as .rdc_il { pouttte @nld bu_et(5x;} icue letx 1p)
  • 70. SASS AVANZADO LLEVANDO LOS MIXINS MÁS ALLÁ CON VARIABLES Definir un mixin con un valor por defecto: @ii bu_et$ie 2p){ mxn letx(sz: 0x clr #369 oo: 369; fn-aiy hleia ail sn-ei; otfml: evtc, ra, assrf fn-ie $ie otsz: sz; fn-ain:salcp;} otvrat ml-as Usar el mixin con y sin valor por defecto: .rdc_il { pouttte @nld bu_et } icue letx; .rdc_il { pouttte @nld bu_et(0p) } icue letx 10x;
  • 71. SASS AVANZADO LLEVANDO LOS MIXINS MÁS ALLÁ CON VARIABLES El ejemplo anterior se compila, respectivamente, como: .rdc_il { pouttte clr #369 oo: 369; fn-aiy hleia ail sn-ei; otfml: evtc, ra, assrf fn-ie 2p; otsz: 0x fn-ain:salcp;} otvrat ml-as .rdc_il { pouttte clr #369 oo: 369; fn-aiy hleia ail sn-ei; otfml: evtc, ra, assrf fn-ie 10x otsz: 0p; fn-ain:salcp;} otvrat ml-as
  • 72. SASS AVANZADO INTERPOLACIÓN Interpolación significa "pon esto aquí". Nos permite generar dinámicamente el nombre de una propiedad o selector, escribiendo la variable entre # } {. $anm:vlo crae ov; .e_{crae { rd#$anm} clr #0; oo: f0 } Esto se compila como: .e_ov { rdvlo clr #0; oo: f0 }
  • 73. SASS AVANZADO SI TE REPITES MÁS QUE EL AJO, USA @EACH e c ayuda a mantener nuestro Sass DRY. Es un modo de copiar el @ah mismo estilo para un montón de variables. @ah$ebri to,jny cln pi { ec mme n hm on, oi, hl .{mme}pcue{ #$ebr_itr bcgon-mg:ul"iae#$ebr.p";}} akrudiae r(/mg/{mme}jg) Esto se compila como: .hmpcue{ to_itr bcgon-mg:ul"iaeto.p";} akrudiae r(/mg/hmjg) .on_itr { jnypcue bcgon-mg:ul"iaejnyjg) } akrudiae r(/mg/on.p"; .oi_itr { clnpcue bcgon-mg:ul"iaeclnjg) } akrudiae r(/mg/oi.p"; .hlpcue{ pi_itr bcgon-mg:ul"iaepi.p";} akrudiae r(/mg/hljg)
  • 74. SASS AVANZADO DETERMINANDO CONDICIONES CON @IF i permite escribir condiciones, muy útil cuando escribimos mixins reusables y funciones. @f @ii cutyclr$onr){ mxn onr_oo(cuty @f$onr = fac { i cuty = rne clr bu;} oo: le @lei $onr = san{ es f cuty = pi clr ylo;} oo: elw @lei $onr = iay{ es f cuty = tl clr gen } oo: re; @le{ es clr rd }} oo: e; .nln {@nld cutyclregad;} egad icue onr_oo(nln) .rne{@nld cutyclrfac) } fac icue onr_oo(rne; Esto se compila como: .nln {clr rd } egad oo: e; .rne{clr bu;} fac oo: le
  • 75. SASS AVANZADO CAMBIANDO EL ASPECTO CON @MEDIA ANIDADO Cambiar el estilo en base al dispositivo. Usando @ e i en estilo anidado: mda .an{ mi clr #369 oo: 369; fn-ie 1p; otsz: 5x @ei pit{ mda rn fn-ie 1p;}} otsz: 0x Esto se compila como: .an{ mi clr #369 oo: 369; fn-ie 1p;} otsz: 5x @ei pit{ mda rn .an{ mi fn-ie 1p;}} otsz: 0x
  • 76. SASS AVANZADO CAMBIANDO EL ASPECTO CON @MEDIA ANIDADO Haciendo el site portrait-specific… .an{ mi clr #369 oo: 369; fn-ie 1p; otsz: 5x @ei sre ad(a-it:30x { mda cen n mxwdh 2p) fn-ie 3p;}} otsz: 5x …o landscape-specific. .an{ mi clr #369 oo: 369; fn-ie 1p; otsz: 5x @ei sre ad(i-it:31x ad(a-it:40x { mda cen n mnwdh 2p) n mxwdh 8p) fn-ie 2p;}} otsz: 5x
  • 77. COMPASS Librería de mixins, funciones y otras extensiones útiles para Sass. Una vez instalado Ruby, procedemos a instalar Compass: gmudt -sse e pae -ytm gmisalcmas e ntl ops Para compilar nuestras hojas de estilo usaremos - c m a s -ops: ss -cmasmfl.csmfl.s as -ops yiess yiecs ss -cmas-wth as -ops -ac
  • 78. COMPASS CONFIGURACIÓN DE UN PROYECTO Compass configura ficheros y carpetas por defecto. Crear proyecto: $ c m a s c e t p o e t n m > ops rae rjc_ae Compilar: $ c m a s c m i e p o e t n m > ops opl rjc_ae Una vez generado tu proyecto, coloca tus ficheros Sass en la carpeta s s /El CSS compilado se coloca automáticamente en la carpeta as. cs. s/ Cambiar configuración: editar fichero c n i . b ofgr. Vigilar cambios proyecto entero: c m a s w t h ops ac.
  • 79. COMPASS LAS VENTAJAS DE "LA BRÚJULA" Facilita mucho el desarrollo, ahorrando tiempo y esfuerzo en desarrollo. Compass.app GUI de Compass, para los "no amantes" de la consola.
  • 80. RECURSOS Pragmatic Guide to Sass , de Hampton Catlin y Michael Lintorn Catlin. Sass Language y Sass Script Functions , página oficial. Sass vs. LESS , de CSS-Tricks. An Introduction To LESS, And Comparison To Sass , de Smashing Magazine. Compass, an open-source CSS Authoring Framework , página oficial. Sass, Compass, and Assetic in 10 minutes . mooxins: CSS3 mixins for Sass(scss) .
  • 81. DUDAS, PREGUNTAS, BOSTEZOS… ☛ The End ☚