Front end basics - SASS

39
FRONT-END BASICS SASS & Compass / Octubre 2012 Nadal Soler @nadalsol

description

My slides -in spanish- about "SASS & Compass".

Transcript of Front end basics - SASS

Page 1: Front end basics - SASS

FRONT-END BASICSSASS & Compass

/ ♣ Octubre 2012Nadal Soler @nadalsol

Page 2: Front end basics - SASS

SASS

Filosofía y definiciónSass vs. LESSSass básicoSass avanzadoCompassRecursos

Page 3: Front end basics - SASS

SASSFILOSOFÍA PRINCIPAL

Del libro , de Hampton Catlin y Michael Lintorn Catlin.

“ DRY—Don't Repeat YourselfReducir la repetición de código en las hojas de estilo,

ahorrando tiempo y esfuerzo. ”

Pragmatic Guide to SASS

Page 4: Front end basics - SASS

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 deestilo limpias y semánticas.Dos sintaxis distintas para escribir Sass: SCSS y SASS original. Noscentraremos en la primera (SCSS).

* Para procesarlo se puede usar la línea de comandos (consola), algun web-framework plugin,o alguna GUI como o .Scout CodeKit

Page 5: Front end basics - SASS

SASSOTRA GRAN VENTAJA

En definitiva, Sass ayuda a mantener un diseño consistente.

“Tener una paleta de color con un número fijo deopciones a escoger ayuda a no volverse loco con los

colores y a no desviarse del estilo marcado.”

Page 6: Front end basics - SASS

SASS VS. LESSDIFERENCIAS

* LESS es una librería JavaScript (client-side).

“La mayor diferencia entre Sass y LESS* es el modo enque son procesados. Sass corre sobre Ruby y es

procesado server-side.”

Page 7: Front end basics - SASS

SASS VS. LESS¿CUÁL ESCOGER?

Aunque Sass es mejor en unos cuantos aspectos, ambos presentangrandes similitudes.Ambos son pre-procesados.La documentación de LESS es mejor pero, por otro lado, Sass pareceque está ganando terreno.Muchos desarrolladores no escogen LESS por su impacto negativosobre la performance*.

* Tiempo adicional requerido por el motor de JavaScript para procesar el código y volcar el CSS modificado hacia elnavegador. 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.

Page 8: Front end basics - SASS

SASS BÁSICOINSTALACIÓN

Para correr Sass, necesitas tener instalado.

Windows: instalar mediante o similar.Mac: desde terminal: sudo gem install sass.

Linux: utilizar el package manager y desde linea de comandos: gem

install sass.

Ruby

Ruby Installer

Page 9: Front end basics - SASS

SASS BÁSICOCOMPILACIÓN

Crear fichero Sass, con extensión .scss.

Compilar el directorio sass/ a CSS y printarlo por consola: sass

test.scss

Compilar el directorio sass/ a CSS en un nuevo fichero .css: sass

test.scss test.css

Algunos frameworks, como , detectan cambios enficheros .scss y los compilan automáticamente a .css.

Si no usamos frameworks usar el comando watch, que detecta los

cambios en los ficheros de nuestra carpeta sass/ y los compila en

ficheros .css en la carpeta especificada (css/):

sass --watch stylesheets/sass:stylesheets/css

Ruby on Rails

Page 10: Front end basics - SASS

SASS BÁSICOALTERANDO LA SALIDA CSS

Al compilar nuestro Sass se generan los CSS. Estos se pueden formatear de distintos modos:

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

sass --style nested // anidado (default).

sass --style expanded // super legible.

sass --style compact // una sola linea por declaración.

sass --style compressed // super compacto (minified).

sass test.scss test.css --style compressed

Page 11: Front end basics - SASS

SASS BÁSICOCOMPILANDO CON SCOUT

es una GUI que nos permite importar nuestro proyecto, especificando una carpeta de origen (p.e. "sass") y desalida (p.e. "css").

detecta cualquier cambio en los ficheros .scss y actualiza los .css de salida.

Scout

Scout

Page 12: Front end basics - SASS

SASS BÁSICO/* COMENTARIOS */

Usar comentarios de una sola linea para que aparezcan sólo en los ficheros Sass:

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

// Hola! Este comentario sólo aparecerá en el fichero .scss

/* Adéu! Este comentario aparecerá en el .css final */

Page 13: Front end basics - SASS

SASS BÁSICOÁMBITO (SCOPE) DE LOS SELECTORES

Sass soluciona la repetición de código mediante el anidado (nesting).

CSS "scopeado":

Sass:

.infobox {width:200px;}

.infobox .message {border:1px solid red;}

.infobox .message .title {color:red;}

.infobox .user {border:2px solid black;}

.infobox .user .title {color:black;}

.infobox { width:200px; .message { border:1px solid red; .title { color:red; } } .user { border:2px solid black; .title { color:black; } } }

Page 14: Front end basics - SASS

SASS BÁSICODEFINIENDO VARIABLES

Las variables ($var_name) son útiles para evitar la repetición de valores en nuestros CSS.

Las variables pueden ser globales o locales:

Globales: se definen en su propia linea y se aplican a todas las hojasde estilos.Locales: se definen dentro de un selector y se aplican sólo dentro dedicho selector y sus hijos.

Se pueden establecer variables por defecto con el tag !default después de la asignación. Al usar una variable, seusa la asignación por defecto si no hay otras asignaciones de esa variable.

$primary_color: #369;

Page 15: Front end basics - SASS

SASS BÁSICOCALCULANDO UN LAYOUT

Sass permite hacer cáculos “al vuelo”, pudiéndose realizar lasoperaciones típicas mediante los operadores habituales de

programación (+, -, *, /).

Ejemplo:

Otro ejemplo:

width: 12px * 0.5;

$page_width: 500px;width: $page_width * 0.1;

Page 16: Front end basics - SASS

SASS BÁSICOCREANDO THEMES CON COLORES AVANZADOS

Cambiar la paleta de color de un site entero siempre es un engorro. Con Sass esto se puede hacer fácilmentemediante funciones para aclarar y oscurecer colores, saturar y desaturar, entre muchas otras… Ejemplos:

Aclarar/Oscurecer colores:

Saturar/Desaturar colores:

#page {color: lighten(#336699, 20%); }

$main_color: #336699;#page {color: saturate($main_color, 30%); }

Page 17: Front end basics - SASS

SASS BÁSICO@IMPORTANDO

Importando centralizamos llamada a distintos ficheros.Lo hacemos con @import seguido por el nombre del fichero Sass que

queramos importar, p.e. @import "test" (extensión .scss o

.sass no necesaria).

Para que un fichero Sass no genere el correspondiente fichero CSSescribiremos "_" delante del nombre del fichero (p.e. _test.scss).

Cualquier variable o mixin que usemos en la hoja de estilos importadapodrá usarse en el fichero padre.

Page 18: Front end basics - SASS

SASS BÁSICO@IMPORTANDO

Fichero _colors.scss:

Fichero widths.scss:

Imports en fichero principal*:

* Al hacer @import no es necesario incluir el guión bajo ni la extensión de _colors.scss.

$main_color: #336699;// A LOT MORE COLORS GO HERE.

$main_width: 720px;// A LOT MORE WIDTHS GO HERE.

@import "colors";@import "widths";

Page 19: Front end basics - SASS

SASS BÁSICOCONSTRUYENDO UNA LIBRERÍA FONT FAMILY

Con CSS tradicional hay que especificar una misma familia defuentes una y otra vez, o bién usar classes no semánticas(p.e.font14).

Con Sass podemos usar variables, en lugar de repetir la mismadeclaración de font-family una y otra vez.

Podemos declarar estas variables al principio de nuestra hoja deestilos, o bién ponerlas en un fichero a parte e importarlas con@import.

Page 20: Front end basics - SASS

SASS BÁSICOCONSTRUYENDO UNA LIBRERÍA FONT FAMILY

Ejemplo

Fichero font_family.scss:

Import en fichero principal:

$helvetica: "helvetica neue", arial, helvetica, sans-serif;

$geneva: geneva, tahoma, sans-serif;

$lucida: "lucida grande", "lucida sans unicode","lucida sans", lucida, sans-serif;

@import "font_family";

Page 21: Front end basics - SASS

SASS AVANZADOMANTENIENDO LA SEMÁNTICA CON @EXTEND

Mantener la semántica es una filosofía donde todo se nombra de forma lógica:

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

.blue_button /* incorrecto (nombre según aspecto) */

.checkout_button /* correcto (nombre según función) */

.checkout_button { background-color:blue; border:1px solid black;}.reset_button { background-color:blue; border:1px solid black;}.send_button { background-color:blue; border:1px solid black;}

/* o bién… */

.checkout_button,

.reset_button,

.send_button { background-color:blue; border:1px solid black;}

Page 22: Front end basics - SASS

SASS AVANZADOMANTENIENDO LA SEMÁNTICA CON @EXTEND

Aquí es donde entra @extend, que clona los atributos de una class o id y los añade a otro:

Esto se compila como:

.blue_button { background: #336699; font-weight: bold; color: white; padding: 5px; }

.checkout_button { @extend .blue_button; }

.blue_button, .checkout_button { background: #336699; font-weight: bold; color: white; padding: 5px; }

Page 23: Front end basics - SASS

SASS AVANZADOMANTENIENDO LA SEMÁNTICA CON @EXTEND

@extend permite modificar los estilos clonados.

Por ejemplo, si necesitamos hacer que el checkout_button sea más oscuro que el blue_button originalhacemos:

.checkout_button { @extend .blue_button; color: darken(#336699, 10%);}

Page 24: Front end basics - SASS

SASS AVANZADOMANTENIENDO EL CÓDIGO LIMPIO CON LOS MIXINS

Un mixin es un fragmento de Sass que puede ser fácilmente aplicadoa otro selector, evitando la repetición de código.Ayudan a mantener el código semántico (p.e. podemos definir unmixin como blue_text y luego aplicarlo a una class con nombre

más específico, como product_title).

Es bueno tener los mixins en una hoja de estilos a parte, para luegoimportarlos desde la hoja principal.

Page 25: Front end basics - SASS

SASS AVANZADOMANTENIENDO EL CÓDIGO LIMPIO CON LOS MIXINS

Un mixin se define de la siguiente forma (mixin_text.scss):

Para usarlo haremos (mixin_use.scss):

Esto se compila como:

@mixin blue_text { color: #336699; font-family: helvetica, arial, sans-serif; font-size: 20px; }

.product_title { @include blue_text; }

.product_title { color: #336699; font-family: helvetica, arial, sans-serif; font-size: 20px; }

Page 26: Front end basics - SASS

SASS AVANZADOLLEVANDO LOS MIXINS MÁS ALLÁ CON VARIABLES

Con @extend los valores se mantienen, mientras que los mixins

pueden incluir argumentos o parámetros que permiten variar losvalores.

Definir un mixin con atributos variables:

@mixin blue_text($size) { color: #336699; font-family: helvetica, arial, sans-serif; font-size: $size; font-variant: small-caps; }

.product_title { @include blue_text (15px); }

Page 27: Front end basics - SASS

SASS AVANZADOLLEVANDO LOS MIXINS MÁS ALLÁ CON VARIABLES

Definir un mixin con un valor por defecto:

Usar el mixin con y sin valor por defecto:

@mixin blue_text($size: 20px) { color: #336699; font-family: helvetica, arial, sans-serif; font-size: $size; font-variant: small-caps; }

.product_title { @include blue_text; }

.product_title { @include blue_text (100px); }

Page 28: Front end basics - SASS

SASS AVANZADOLLEVANDO LOS MIXINS MÁS ALLÁ CON VARIABLES

El ejemplo anterior se compila, respectivamente, como:

.product_title { color: #336699; font-family: helvetica, arial, sans-serif; font-size: 20px; font-variant: small-caps; }

.product_title { color: #336699; font-family: helvetica, arial, sans-serif; font-size: 100px; font-variant: small-caps; }

Page 29: Front end basics - SASS

SASS AVANZADOINTERPOLACIÓN

Interpolación significa "pon esto aquí". Nos permite generardinámicamente el nombre de una propiedad o selector, escribiendo la

variable entre #{}.

Esto se compila como:

$carname: volvo;

.red_#{$carname} { color: #f00;}

.red_volvo { color: #f00;}

Page 30: Front end basics - SASS

SASS AVANZADOSI TE REPITES MÁS QUE EL AJO, USA @EACH

@each ayuda a mantener nuestro Sass DRY. Es un modo de copiar el

mismo estilo para un montón de variables.

Esto se compila como:

@each $member in thom, jonny, colin, phil { .#{$member}_picture { background-image: url("/image/#{$member}.jpg"); } }

.thom_picture { background-image: url("/image/thom.jpg"); }.jonny_picture { background-image: url("/image/jonny.jpg"); }.colin_picture { background-image: url("/image/colin.jpg"); }.phil_picture { background-image: url("/image/phil.jpg"); }

Page 31: Front end basics - SASS

SASS AVANZADODETERMINANDO CONDICIONES CON @IF

@if permite escribir condiciones, muy útil cuando escribimos mixins reusables y funciones.

Esto se compila como:

@mixin country_color($country) { @if $country == france { color: blue; } @else if $country == spain { color: yellow; } @else if $country == italy { color: green; } @else { color: red; } }

.england { @include country_color(england); }

.france { @include country_color(france); }

.england { color: red; }

.france { color: blue; }

Page 32: Front end basics - SASS

SASS AVANZADOCAMBIANDO EL ASPECTO CON @MEDIA ANIDADO

Cambiar el estilo en base al dispositivo.

Usando @media en estilo anidado:

Esto se compila como:

.main { color: #336699; font-size: 15px; @media print { font-size: 10px; } }

.main { color: #336699; font-size: 15px; } @media print { .main { font-size: 10px; } }

Page 33: Front end basics - SASS

SASS AVANZADOCAMBIANDO EL ASPECTO CON @MEDIA ANIDADO

Haciendo el site portrait-specific…

…o landscape-specific.

.main { color: #336699; font-size: 15px; @media screen and (max-width: 320px) { font-size: 35px; } }

.main { color: #336699; font-size: 15px; @media screen and (min-width: 321px) and (max-width: 480px) { font-size: 25px; } }

Page 34: Front end basics - SASS

COMPASSLibrería de mixins, funciones y otras extensiones

útiles para Sass.

Una vez instalado Ruby, procedemos a instalar Compass:

Para compilar nuestras hojas de estilo usaremos --compass:

gem update --systemgem install compass

sass --compass myfile.scss myfile.csssass --compass --watch

Page 35: Front end basics - SASS

COMPASSCONFIGURACIÓN DE UN PROYECTO

Compass configura ficheros y carpetas por defecto.Crear proyecto: $> compass create project_nameCompilar: $> compass compile project_nameUna vez generado tu proyecto, coloca tus ficheros Sass en la carpetasass/. El CSS compilado se coloca automáticamente en la carpeta

css/.

Cambiar configuración: editar fichero config.rb.

Vigilar cambios proyecto entero: compass watch.

Page 36: Front end basics - SASS

COMPASSLAS VENTAJAS DE "LA BRÚJULA"

Facilita mucho el desarrollo, ahorrando tiempoy esfuerzo en desarrollo.

GUI de Compass, para los "no amantes" de la consola.

Compass.app

Page 37: Front end basics - SASS

RECURSOS, de Hampton Catlin y Michael Lintorn

Catlin. y , página oficial.

, de CSS-Tricks., de Smashing

Magazine., página oficial.

..

Pragmatic Guide to Sass

Sass Language Sass Script FunctionsSass vs. LESSAn Introduction To LESS, And Comparison To Sass

Compass, an open-source CSS Authoring FrameworkSass, Compass, and Assetic in 10 minutesmooxins: CSS3 mixins for Sass(scss)

Page 38: Front end basics - SASS

DUDAS, PREGUNTAS, BOSTEZOS…

☛ The End ☚

Page 39: Front end basics - SASS