CSS rápido e divertido com Sass

Update: Criei um repositório no Github (na verdade ele está lá faz tempo, só esqueci de mencionar aqui #fail) com alguns mixins úteis, como CSS Reset para HTML 5, border-radius e opacity.

Há algumas semanas conheci o Sass (Syntactically Awesome Stylesheets) através de um projeto em que participei. Fui atrás, descobri como funciona e hoje vou contar um pouco da experiência com mais essa maravilha.

Sass é uma metalinguagem, implementada em cima do CSS, que facilita – muito – o desenvolvimento de estilos para documentos. Ele deixa os stylesheets mais limpos, estruturados e gerenciáveis. Sass torna divertida a tarefa de criar CSS, implementando regras de aproveitamento de código, variáveis, mixins (pequenas funções) e muito mais. Tudo numa sintaxe bem mais legível e organizada que CSS comum.

Como exemplo, veja um CSS comum:

1
2
3
4
5
6
7
8
9
10
11
12
13
#id_do_elemento {
    width: 200px;
    background: blue;
    font-family: Verdana,Arial,Helvetica;
    font-size: 2em;
    font-weight: bold;
}

#id_do_elemento .filho {
    background: red;
    font-size: 1em;
    padding: 10px;
}

E agora o mesmo, escrito com SASS:

1
2
3
4
5
6
7
8
9
10
11
12
#id_do_elemento
    width: 200px
    background: blue
    font:
        family: Verdana,Arial,Helvetica
        size: 2em
        weight: bold

.filho
    background: red
    font-size: 1em
    padding: 10px

O Sass também suporta variáveis e mixins, veja um exemplo abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// Variáveis
!cor_de_fundo = #f0f0f0
!cor_da_borda = #aaa
!margem = 30px 20px

// Mixin para bordas arredondadas
=border-radius( !radius = 10px )
    :border-radius = !radius
    :-webkit-border-radius = !radius
    :-moz-border-radius = !radius

#meu_elemento
    :background = !cor_de_fundo
    :border = 1px "solid" !cor_da_borda
    :margin = !margem
    padding: 10px
    +border-radius(20px)

    span
        :background = !cor_da_borda
        :border = 1px "solid" (!cor_de_fundo / 1.4)

O resultado do código acima será…:

1
2
3
4
5
6
7
8
9
10
11
12
#meu_elemento {
    background: #f0f0f0;
    border: 1px solid #aaaaaa;
    margin: 30px 20px;
    padding: 10px;
    border-radius: 20px;
    -webkit-border-radius: 20px;
    -moz-border-radius: 20px; }

    #meu_elemento span {
        background: #aaaaaa;
        border: 1px solid #ababab; }

Perfeito pra quem gosta da “doutrina” DRY, né? :)

A sintaxe é muito parecida com CSS, o que deixa a curva de aprendizagem muito baixa. Você aprende a usar o Sass em poucos minutos, a única parte onde complica é a indentação – que garante (praticamente obriga você a escrever) um código muito mais limpo e legível.

Instalação

Pra instalar, você precisa do Ruby e da gem do Haml (que será assunto de um futuro post):

1
gem install haml

Agora você já pode converter seus arquivos CSS para Sass ou vice-versa:

1
2
3
4
5
# De CSS para Sass
css2sass estilo.css estilo.sass

# Compila um arquivo Sass (gera o CSS final)
sass estilo.sass estilo.css

Integração com o Rails

Agora vem a melhor parte: a integração do Sass com o Ruby on Rails. A gem do Haml (e consequentemente do Sass) gera automaticamente os arquivos CSS compilados a partir de um arquivo Sass. Pra isso, é só gastar alguns segundos configurando a sua aplicação. No Rails <= 2, adicione no seu arquivo environment.rb o seguinte:

1
config.gem 'haml'

Já no Rails 3, adicione o seguinte no arquivo Gemfile:

1
gem "haml"

Não há nenhuma perda de performance, já que os arquivos CSS compilados só são gerados novamente quando houver alguma modificação no Sass original. Resumindo a história, Sass é um CSS melhor, mais gerenciável e reaproveitável. Usarei sempre que possível e mais que recomendo. :)