Tirando o máximo dos recurso oferecidos pelos pré-processadores css
Os pré-processadores CSS, como Sass, Less e Stylus, oferecem uma ampla gama de recursos poderosos que podem melhorar significativamente a eficiência e a manutenção do código
Os pré-processadores CSS, como Sass, Less e Stylus, oferecem uma ampla gama de recursos poderosos que podem melhorar significativamente a eficiência e a manutenção do código. No entanto, em muitos projetos, esses recursos acabam subutilizados, resultando em código css repetitivo e em muitos casos confuso. Neste artigo, vamos explorar alguns recursos e melhorar a estrutura, personalização e reutilização dos nossos estilos.
Em primeiro lugar, vamos organizar nossa estrutura de arquivos para que consigamos entender o que cada um faz a partir do seu nome e da pasta onde estes estarão contidos. E aqui já vamos introduzir o uso de @import e partials no sass. Esses recursos são cruciais em aplicações grandes ou que pretendem crescer de forma escalável e sustentável, posto que dividir os códigos em arquivos menores aumenta a facilidade de manutenção e organização de forma mais concisa.
Ao contrário das importações CSS simples, que exigem que o navegador faça várias solicitações HTTP enquanto carrega a página, as importações Sass são tratadas inteiramente durante a compilação, tratando as partials como rails, por exemplo.
// Estrutura de Arquivos Sass
styles/
|-- base/
| |-- _reset.scss
| |-- _typography.scss
|-- components/
| |-- _buttons.scss
| |-- _modals.scss
|-- layout/
| |-- _grid.scss
| |-- _header.scss
|-- application.scss
|-- _variables.scss
|-- _mixins.scss
|-- _functions.scss
Notas: por convenção, as partials devem iniciar com _ para que as ferramentas de compilação não tentem compilar esses arquivos
Feito a organização da nossa estrutura, podemos lançar mão de recursos mais avançados do pré-processador, como variáveis, nesting, herança, mixins, functions, estrutura de repetição e condicionais para deixarmos nosso código css mais enxuto e funcional. Passaremos por cada um desses recursos aplicando exemplos simples para fins de entendimento.
Variáveis:
Este é o recurso mais utilizado dos pré-processadores css, embora tenha esse recurso de forma nativa no css puro desde 2012, pois facilita a manutenção de valores reutilizáveis.
$box_shadow_material_design: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24);
$box_shadow_hover_material_design: 0 7px 28px rgba(0,0,0,0.25), 0 5px 10px rgba(0,0,0,0.22);
$transition_box_shadow_material_design: all 0.3s cubic-bezier(.25,.8,.25,1);
Nesting:
Mantém a hierarquia visual do código e facilita a leitura.
nav {
ul {
margin: 0;
padding: 0;
list-style: none;
li {
display: inline-block;
a {
display: block;
padding: 6px 12px;
text-decoration: none;
}
}
}
}
Herança:
Como o próprio nome sugere, permite herdar estilos de um seletor e melhora a reutilização de código mantendo a consistência visual.
%bnt-default{
padding: 8px 15px;
border:1px solid #ddd;
cursor: pointer;
}
.btn-success{
@extend %bnt-default;
background: $green;
border-color: $green;
}
.btn-primary{
@extend %bnt-default;
background: $blue;
border-color: $blue;
}
.btn-danger{
@extend %bnt-default;
background: $red;
border-color: $red;
}
.btn-warning{
@extend %bnt-default;
background: $yellow;
border-color: $yellow;
}
Mixins:
Com mixins o css ganha uma poderosa capacidade de reutilização de código com a possibilidade de modificar o valores de todas as propriedades como parâmetro.
@mixin box-shadow($x, $y, $blur, $color) {
box-shadow: $x $y $blur $color;
}
.element {
@include box-shadow(2px, 2px, 5px, #333);
}
.another-element {
@include box-shadow(0, 0, 10px, #e74c3c);
}
@mixin gradient($direction: to bottom, $color1, $color2) {
background: linear-gradient($direction, $color1, $color2);
}
.header {
@include gradient(#3498db, #2c3e50);
}
.footer {
@include gradient(to right, #e74c3c, #c0392b);
}
Functions:
São poderosas ferramentas para a criação de estilos mais dinâmicos e flexíveis. Em Sass, as funções são definidas usando a diretiva @function. Elas podem aceitar argumentos e retornar valores
$base-font-size: 16px;
@function em($pixels) {
@return $pixels / $base-font-size * 1em;
}
body {
font-size: em(18px);
}
h1 {
font-size: em(36px);
}
Saída css:
body {
font-size: 1.125em;
}
h1 {
font-size: 2.25em;
}
Estruturas de repetição:
As estruturas de repetição permitem que você repita blocos de código várias vezes, o que é especialmente útil ao lidar com propriedades CSS que seguem um padrão ou para criar regras para várias instâncias de um mesmo elemento. Em sass é possível usar @for, @each e @while.
$sizes: 40px, 50px, 80px;
@each $size in $sizes {
.icon-#{$size} {
font-size: $size;
height: $size;
width: $size;
}
}
$i: 1;
@while $i < 6 {
.element-#{$i} {
width: 20px * $i;
}
$i: $i + 1;
}
@for $i from 1 through 5 {
.element-#{$i} {
width: 20px * $i;
}
}
Estruturas condicionais:
As estruturas condicionais são utilizadas para aplicar regras de estilo com base em condições específicas. Isso proporciona maior flexibilidade na geração de estilos dinâmicos e na adaptação a diferentes contextos. As principais estruturas condicionais em Sass são @if, @else if e @else.
.grade {
@if $score > 90 {
content: "A";
} @else if $score > 80 {
content: "B";
} @else if $score > 70 {
content: "C";
} @else {
content: "D";
}
}
Conclusão
Embora as desvantagens do pouco uso dos recursos dos pré-processadores CSS sejam reais, é crucial considerar que a decisão de adotar ou não esses recursos depende do contexto do projeto. Em alguns casos, a simplicidade do CSS puro pode ser mais adequada, especialmente para projetos menores ou menos complexos. No entanto, é essencial que os desenvolvedores estejam cientes das capacidades dos pré-processadores e avaliem sua relevância em cada situação. A chave está em encontrar o equilíbrio certo entre simplicidade e funcionalidade, adaptando as práticas de desenvolvimento às necessidades específicas de cada projeto.
#htt
Até a próxima!!!