On Github wallaceerick / sass-presentation
O Sass é uma 'linguagem' desenvolvida para extender o poder do CSS.
Ele é o equivalente ao PHP para o CSS.
Você já vai entender melhor isso! :)
O Sass tem diversas funcionalidades interessantes para os desenvolvedores de CSS.
Já imaginou CSS com variavéis?
Já sonhou com o dia em que escreveria uma function() pra facilitar sua vida nas folhas de estilos?
IF/ELSE???? Loops????
O Sass possui dois estilos diferentes de sintaxe:
.sass.scss
É a forma clássica de escrita, era o formato default nas primeiras versões.
Não se usam chaves ou ponto-e-vírgula, e é necessário seguir um padrão de identação do código no documento todo, OU ELE NÃO COMPILA.
article width: 950px margin: 0 auto background-color: #F00 header width: 100% height: 50px background-color: blue
Nada contra o .sass, mas a sintaxe diferenciada gerava muitos problemas com desenvolvedores inexperientes, ou grandes equipes de desenvolvimento, que usavam editores, e medidas de identação diferentes nos projetos.
Ai surgiu o .scss, com uma sintaxe bastante semelhante ao CSS normal, com chaves, ponto-e-vírgula, e sem regras de identação pra compilar.
article { width: 950px; margin: 0 auto; background-color: #F00; } header { width: 100%; height: 50px; background-color: red; }
O Sass depende de uma linguagem server-side pra fornecer todas as funcionalidades. Existem algumas formas de se instalar, mas vamos abordar a principal, que usa...
O Ruby vem instalado por default no OSX, porém, no windows é necessária a instalação manual, ou, faça mais fácil: Baixe o RubyInstaller.
Bom, após ter o ruby instalado, instalar o Sass é simples:
$ gem install sass
Provavelmente você vai precisar de permissão de superuser no OSX pra instalar, então não esqueça do sudo. :)
Só por conta deste recurso, o Sass já valeria muito a pena.
$main-color: #f00; $grid-gutter: 20px; $container-width: 100px;
Perceba que vários tipos de valores podem ser armazenados: códigos hexadecimais, unidades de medida, etc.
O Nesting é um recurso que poupa muito tempo dos desenvolvedores, veja abaixo um exemplo comum no dia a dia CSS.
article { header, section { background-color: blue; } }
article header, article section { background-color: blue; }
O Nesting permite o uso de todos os seletores disponíveis no CSS.
article { + h2 {background: blue;} > header {width: 100%;} ~ footer {width: 80%;} }
article + h2 { background-color: blue; } article > header { width: 100%; } article ~ footer { width: 80%; }
Fazendo referência ao elemento pai.
a { display: inline-block; color: white; background: blue; &:hover { background: red; } }
a { display: inline-block; color: white; background: blue; } a:hover { background: red; }
Adicionando um contexto ao seletor.
article { h1 { color: blue; } .red-content & { color: red; } }
article h1 { color: blue; } .red-content article h1 { color: red; }
O extend é um recurso que possibilita um seletor herdar os estilos de outro.
.button { width: 950px; margin: 0 auto; background-color: blue; } .button-red { @extend .button; background-color: red; }
.button, .button-red { width: 950px; margin: 0 auto; background-color: blue; } .button-red { background-color: red; }
Mixins são funções que podem ser reutilizadas em todo o documento. Primeiro se declara o mixin, e depois se invoca no trecho de código onde ele deve ser executado.
// Declarando o Mixin @mixin hovered { text-decoration: none; &:hover { text-decoration: underline; } } // Invocando no seletor nav a { color: blue; @include hovered; }
nav a { color: blue; text-decoration: none; } nav a:hover { text-decoration: underline; }
// Declarando o Mixin @mixin border-radius($amount) { border-radius: $amount; -moz-border-radius: $amount; -webkit-border-radius: $amount; } // Invocando no seletor .button { color: blue; @include border-radius(5px); }
.button { color: blue; border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px; }
// Declarando o Mixin @mixin link($text:blue, $hover:red){ color: $text; &:hover { color: $hover; } } // Invocando no seletor a { @include link($text: green); }
a { color: green; } a:hover { color: red; }
5px + 2px //7px 5px - 2px //3px 4px * 2 //8px 6px / 2 //3px 18 % 5 //3
$content: 960px; $main: 450px; aside { width: $content - $main; height: auto; }
aside { width: 510px; height: auto; }
O sass possui suporte a 3 laços de repetição: @for, @each e @while. Abordadermos somente @for por enquanto.
@for $i from 1 through 5 { .box#($i){ width: 100px * $i; } }
.box-1 {width: 100px;} .box-2 {width: 200px;} .box-3 {width: 300px;} .box-4 {width: 400px;} .box-5 {width: 500px;}
IF/ELSE também podem ser utilizados, um exemplo clássico de uso, é sua aplicação dentro de um @mixin.
@mixin box($color) { @if ($color == "blue") { background: blue; } @else { background: red; } } .box { width: 100%; height: 50px; @include box('green'); &.azul { @include box('blue'); } }
.box { width: 100%; height: 50px; background: red; } .box.azul { background: blue; }
Utilizando as funções de cor, é possível manipulá-las facilmente.
$red: #f00; .red { background: $red; } .dark-red { background: darken($red, 20%); }
.red { background: #f00; } .dark-red { background: #990; }