Advertisement
  1. Web Design
  2. Sass

Como Usar Sass Para Desenvolver Um Projeto Com Múltiplos Temas

Scroll to top
Read Time: 4 min

() translation by (you can also view the original English article)

O fluxo de trabalho de um desenvolvedor front-end tem sofrido grandes mudanças recentemente. Mais complexidade, requisitos complicados e maiores projetos nos movem em direção a novas tecnologias tais como os pré-processadores. Pessoalmente, eu amo meu fluxo de trabalho utilizando pré-processadores e não gostaria de deixar de lado o Sass nos meus projetos hoje em dia - sem isso, eu estaria perdido.

Uma situação em particular onde o Sass têm me ajudado é em criar um simples e consistente código front-end que pode ter diferente temas - alterando cores, imagens ou fontes com facilidade. Hoje eu vou descrever meu fluxo de trabalho e eu espero que você leve algo útil daqui.

Estrutura Básica

Aqui está a estrutura de um projeto de exemplo. Você pode usar qualquer partial que você acredita que deva ser incluído. O segredo é ter pastas separadas para os temas e um novo arquivo .scss para cada um deles.

Estrutura de Pastas

1
|- _scss/
2
|-|- _base/
3
|-|-|- _config.scss
4
5
|-|- _layouts/
6
|-|-|- _l-grid.scss
7
|-|-|- _l-default.scss
8
9
|-|- _modules/
10
|-|-|- _m-accordions.scss
11
|-|-|- _m-teasers.scss
12
13
|-|-_themes/
14
|-|-|- _light-theme/
15
|-|-|-|- light.scss
16
17
|-|- application.scss

Criar o Base com um Arquivo Principal

No arquivo application.scss você importa todos os seus partials, ignorando a pasta _themes/ nesse momento. Isso cria a fundação para que possamos criar temas diferentes.

1
@charset 'UTF-8';
2
3
// 1.Base
4
@import '_base/_config.scss';
5
6
// 2.Layouts
7
@import '_layouts/_l-grid',
8
        '_layouts/_l-default';
9
10
// 3.Módulos
11
@import '_modules/_m-accordions',
12
        '_modules/_m-teasers';

Configuração

Cores, Fontes e muito mais

Configurar seu projeto é muito importante. Aqui as variáveis vem para nos salvar, nos permitindo setar padrões e então sobrescrever seus valores na camada do tema na sequência. Aqui você pode ver que eu setei algumas variáveis para cores, fontes e configurações de borda.

Para mais detalhes sobre nomeclatura de variáveis, dê uma olhada no artigo de Jim Nielsen Quick Tip: Name Your SASS Variables Modularly.

1
@charset "UTF-8";
2
3
// Cores
4
$black: #000;
5
$white: #fff;
6
$red: #e2061c;
7
$gray-light: #c9c8c8;
8
$gray: #838282;
9
$gray-dark: #333333;
10
$blue: #253652;
11
12
// Corp-Cores
13
$corp-color: $blue !default;
14
$corp-color-dark: darken($corp-color, 15%) !default;
15
$corp-color-second: $red !default;
16
$corp-color-second-dark: darken($corp-color-second, 15%) !default;
17
18
// Fonte
19
$base-font-size: 1.8 !default;
20
$base-font-family: Helvetica, Arial, Sans-Serif !default;
21
$base-font-color: $gray-dark !default;
22
23
// Borda
24
$base-border-radius: 2px !default;
25
$rounded-border-radius: 50% !default;
26
$base-border-color: $gray !default;

O segredo para essa etapa é usar a flag !default depois das declarações de variáveis. Fazer isso permite você sobrescrever elas nos arquivos do tema .scss; o !default efetivamente diz "use esse valor se não estiver definido em nenhum outro lugar".

Background-Images

Muitas vezes desenvolvedores não criam variáveis para imagens, ao invés disso escrevem urls diretamente nos seletores. Uma abordagem que eu gosto é remover todos os caminhos nas partials e colocar eles no arquivo de configuração como variáveis. Isso vai tornar sua vida mais fácil e o projeto fácil de manter.

1
// Imagens
2
$sprite:              '../images/base/sprite.png' !default;
3
$colorbox-background: '../images/base/colorbox-background.png' !default;

Exemplo de um Módulo Básico

Aqui você pode ver algumas variáveis de background em ação. Este é um partial modular para um accordion, fazendo uso da variável global $sprite, mas também setando e usando a variável $accordion-bgcolor que é específica para o módulo.

1
// 1.Configuração
2
$accordion-bgcolor: $gray !default;
3
4
// 2.Base
5
.m-accordion {
6
    padding: 20px;
7
    background: $accordion-bgcolor;
8
}
9
.m-accordion__trigger {
10
    background: url($sprite) no-repeat;
11
}

Como Criar um Tema

No seu arquivo de tema (como o _themes/_light-theme/light.scss da estrutura de exemplo acima) importe o application.scss que contém todos os módulos, layouts e assim por diante. Esta é a base para tudo; com um tema nós vamos colocar a segunda camada por cima disso. Nada mais. Uma vez que você importou application.scss adicione as mesmas variáveis usadas mais cedo, mas defina valores específicos para esse tema.

Usando essa técnica, se nós adicionarmos novos módulos para a base do projeto nós vamos automaticamente (e inofensivamente) compilar eles em todos os nossos temas.

1
@charset 'UTF-8';
2
3
// 1.Sobrescrevendo coisas
4
$corp-color: $gray;
5
$corp-color-darken: darken($corp-color, 10%);
6
$corp-color-second: $blue;
7
$corp-color-second-dark: darken($corp-color-second, 10%);
8
 
9
$base-font-size: 1.6;
10
$base-font-family: Droid Sans, Georgia, Arial;
11
 
12
$base-border-radius: 0px;
13
$base-border-color: $gray-light;
14
 
15
// Imagens
16
$sprite:              '../images/light/sprite.png';
17
$colorbox-background: '../images/light/colorbox-background.png';
18
 
19
$accordion-bgcolor: $gray-light;
20
21
// 2. Importando o tema básico
22
@import '../../application';

Observando mudanças em múltiplos arquivos no Sass

O último passo é compilar o Sass para CSS e ter dois arquivos diferentes para usar. Nós devemos compilar application.scss e o light.scss. Usando a linha de comando, você ficaria com algo como:

1
sass --watch 
2
YOUR/PATH/application.scss:YOUR/CSSPATH/application.css 
3
YOUR/PATH/_themes/_light-theme/light.scss:YOUR/CSSPATH/light.css

Se você usa uma app como CodeKit, ou Prepros App, compilar será um processo mais visual.

Inclua o arquivo light.css no head da sua página e dê uma olhada no seu novo website.

Conclusão

Como você pode ver, é útil e simples ter múltiplos arquivos de tema, todos baseados numa fundação consistente. Fique a vontade para fazer perguntas ou mandar feedback e compartilhe suas experiências conosco nos comentários.

Seja o primeiro a saber sobre novas traduções–siga @tutsplus_pt no Twitter!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Web Design tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.