@mixin

Torne-se front-end com este curso 100% prático

Para resolver o problema de reutilização de código comentado no tópico anterior, criarei um @mixin que gere todo o código do botão e que receba por parâmetro a cor base. Farei isso da seguinte maneira:


@mixin gerarBotao($cor){
    background-image: linear-gradient(to top, darken($cor, 15), $cor);
    border: none;
    padding: 1em;
    margin: 1em 0;
    cursor: pointer;
    outline: none; 

    &:hover{
        background-image: linear-gradient(to top, $cor, darken($cor, 15));
    }
    &:active{
        background-image: linear-gradient(to top, darken($cor, 14), darken($cor, 34));
    }
}

O @mixin é o responsável por criar dinamicamente todo o código do botão, incluindo o hover e o active. Há no sass a opção de criarmos uma @function, porém, em nosso exemplo, uma @function não nos ajudaria, uma vez que esta retorna apenas um valor, enquanto um @mixin retorna diversos valores.

Tenha em mente que, ao criarmos um @mixin, precisamos utilizá-lo usando a palavra @include. Se usarmos uma @function, temos que retornar o valor com a palavra @return e chamar a função do local que queremos usar aquele valor.

Apenas para exemplificar o uso de uma @function, vou criar uma função que recebe dois valores e calcula a porcentagem:

@function calc-percent($target, $container) {
  @return ($target / $container) * 100%;
}

Quando precisarmos utilizar essa função, teremos que chamá-la de dentro da regra css.

.modulo {
  width: calc-percent(500px, 1000px);
}

Voltando ao nosso exemplo, para utilizar o @mixin criado, precisamos da palavra @include. Veja como deve ficar:


@mixin gerarBotao($cor){
    background-image: linear-gradient(to top, darken($cor, 15), $cor);
    border: none;
    padding: 1em;
    margin: 1em 0;
    cursor: pointer;
    outline: none; 

    &:hover{
        background-image: linear-gradient(to top, $cor, darken($cor, 15));
    }
    &:active{
        background-image: linear-gradient(to top, darken($cor, 14), darken($cor, 34));
    }
}

.buttonsContainer{

    border-top: 2px solid #A5A5A5;

    .buttonsContainer__button{
        @include gerarBotao(#AFAFAF)
    }

    .buttonsContainer__result--number{
        font-weight: bold;
    }

}

E se no futuro precisarmos de uma variação desse mesmo botão, poderemos simplesmente passar uma nova cor como parâmetro:


.buttonsContainer__button{
     @include gerarBotao(#AFAFAF)
}

.buttonsContainer__button--hightlight{
     @include gerarBotao(red)
}

results matching ""

    No results matching ""