Sass/SCSS

Desenvolvimento de Aplicações Web - COLTEC/MG

Sass/SCSS

João Eduardo Montandon

Desenvolvimento de Aplicações Web - COLTEC/MG

Introdução

A linguagem CSS foi uma solução simples e elegante para separar estrutura e apresentação de páginas web

Escalar simplicidade é difícil

Introdução

Principais problemas:

Sass

Synthatically Awesome Stylesheets

Extensão da linguagem CSS com recursos de linguagens de programação

Sass

Trabalha na forma de pré-processamento (compila o código de Sass para CSS)

Sass -- Exemplo

            
$font-stack: Helvetica;
$primary-color: #333;
body {
 font: 100% $font-stack;
 color: $primary-color;
}
            
          
            
body {
 font: 100% Helvetica;
 color: #333;
}
            
          
$ sass estilo.scss estilo.css

Instalação & Execução

  1. Instalar Ruby na máquina
  2. Instalar pelo gerenciador de pacotes: $ gem install sass
  3. Executar $ sass input.scss output.css para compilar

Para mais informações, consulte este link

Variáveis

Variáveis

Variáveis podem ser utilizadas para armazenar informações a serem reaprovitadas durante escrita do CSS, tais como cores, fontes, tamanho, etc.

          
            $variavel: valor;
          
        

Variáveis

            
$font-stack: Helvetica; /* fonte padrão */
$primary-color: #333; /* cor principal */
body {
 font: 100% $font-stack;
 color: $primary-color;
}
            
          
            
body {
 font: 100% Helvetica;
 color: #333;
}
            
          

Variáveis -- Interpolação

Também é possível utilizar variáveis para interpolar nomes de propriedades e seletores

Para isso, usa-se o símbolo #{$variavel}

Variáveis -- Interpolação

            
$name: foo; /* nome a ser interpolado */
$attr: border; /* propriedade a ser interpolada */
p.#{$name} {
  #{$attr}-color: blue;
}
            
          
            
p.foo {
  border-color: blue;
}
            
          

Aninhamento

Aninhamento

Assim como acontece no HTML, é possível fazer aninhamento dos seletores

O aninhamento evita a necessidade de se redeclarar seletores para regras específicas

Também é possível aninhar media queries!!

            nav {
  ul {
    margin: 0;
    padding: 0;
    list-style: none;
  }

  li { display: inline-block; }

  a {
    display: block;
    padding: 6px 12px;
    text-decoration: none;
  }
}
            
          
            nav ul {
  margin: 0;
  padding: 0;
  list-style: none;
}

nav li {
  display: inline-block;
}

nav a {
  display: block;
  padding: 6px 12px;
  text-decoration: none;
}
            
          
            .sidebar {
  width: 300px;
  @media screen and (orientation: landscape) {
    width: 500px;
  }
}
          
            .sidebar {
  width: 300px;
}
@media screen and (orientation: landscape) {
  .sidebar {
    width: 500px;
  }
}
          

Aninhamento -- O operador &

Utilizamos o símbolo & para obter o nome do seletor pai

              a {
  font-weight: bold;
  text-decoration: none;
  &:hover {
    text-decoration: underline;
  }
  body.firefox & {
    font-weight: normal;
  }
}
              
            
              a {
  font-weight: bold;
  text-decoration: none;
}
a:hover {
  text-decoration: underline;
}
body.firefox a {
  font-weight: normal;
}
              
            

Partials & Mixins

Partials

Recurso que permite importar arquivos SCSS em outros arquivos

Os partials devem se iniciar sempre com underline

              /* _reset.scss */
html, body, ul, ol {
   margin: 0;
  padding: 0;
}
              
            
              /* base.scss */
@import 'reset';
body {
  font: 100% Helvetica, sans-serif;
  background-color: #efefef;
}
              
            
            /* base.css */
html, body, ul, ol {
  margin: 0;
  padding: 0;
}
body {
  font: 100% Helvetica, sans-serif;
  background-color: #efefef;
}
            
          

Mixins

Permite a criação de grupos de comandos para serem utilizados posteriormente

Útil principalmente em situações onde é necessário implementar rotinas de compatibilidade

Mixins

              @mixin border-radius($radius) {
  -webkit-border-radius: $radius;
     -moz-border-radius: $radius;
      -ms-border-radius: $radius;
          border-radius: $radius;
}

.box {
  @include border-radius(10px);
}
              
            
              .box {
  -webkit-border-radius: 10px;
  -moz-border-radius: 10px;
  -ms-border-radius: 10px;
  border-radius: 10px;
}
              
            

Herança

Permite que você "herde" as propriedades de um componente em outro

A herança ocorre por meio do comando @extend

            
.message {
  border: 1px solid #ccc;
  padding: 10px;
  color: #333;
}
.success {
  @extend .message;
  border-color: green;
}
.error {
  @extend .message;
  border-color: red;
}
            
          
            
.message, .success, .error {
  border: 1px solid #cccccc;
  padding: 10px;
  color: #333;
}
.success {
  border-color: green;
}
.error {
  border-color: red;
}
            
          

Operadores & Funções

Operadores

É possível utilizar as operações matemáticas básicas para calcular valores fornecidos para as propriedades

Operadores
+
-
/
*
%
            .container {
  width: 100%;
}

article {
  float: left;
  width: 600px / 960px * 100%;
}

aside {
  float: right;
  width: 300px / 960px * 100%;
}
            
          
            .container {
  width: 100%;
}

article {
  float: left;
  width: 62.5%;
}

aside {
  float: right;
  width: 31.25%;
}
            
          

Funções

São disponiblizadas várias funções built-in que podem ser úteis durante a implementação do CSS

Função Exemplo
lighten lighten(#000, 20%)
darken darken(#FFF, 20%)
round round(10.66666px)
percentage percentage(16px / 32px)

Lista completa pode ser vista aqui

Estruturas de Controle

Estruturas Condicionais

O Sass fornece estruturas condicionais onde pode-se determinar propriedades com base em determinados cenários

          @if expressao {
  comandos;
  comandos;
} @else if expressao {
  comandos;
}
          
        
            
/* arquivo.scss */
p {
  @if 1 + 1 == 2 {
    border: 1px solid;
  }
  @if 5 < 3 {
    border: 2px dotted;
  }
  @if null {
    border: 3px double;
  }
}
            
          
            
/* arquivo.css */
p {
  border: 1px solid;
}
            
          

Estruturas de Repetição

O Sass fornece suporte as estruturas de repetição clássicas:

Estruturas de Repetição: @for

            
@for $i from 1 to 3 {
  .item-#{$i} { width: 2em * $i; }
}
            
          
            
.item-1 {
  width: 2em;
}
.item-2 {
  width: 4em;
}
.item-3 {
  width: 6em;
}
            
          

Estruturas de Repetição: @each

            @each $animal in puma, sea-slug, egret {
  .#{$animal}-icon {
    background-image: url('/images/#{$animal}.png');
  }
}
          
            .puma-icon { background-image: url('/images/puma.png'); }
.sea-slug-icon { background-image: url('/images/sea-slug.png'); }
.egret-icon { background-image: url('/images/egret.png'); }
            
          

Estruturas de Repetição: @while

            
$i: 6;
@while $i > 0 {
  .item-#{$i} { width: 2em * $i; }
  $i: $i - 2;
}
            
          
            
.item-6 {
  width: 12em;
}
.item-4 {
  width: 8em;
}
.item-2 {
  width: 4em;
}
            
          

Referências

Site Oficial

Levelup Tuts - Sass Tutorials

The Sass Way

Fork me on Github