Como Usar Sass Para Desenvolver Um Projeto Com Múltiplos Temas
() 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!