Vamos encarar os fatos: as consultas de mídia podem ser uma dor de cabeça. Elas são difíceis de escrever e tendem a ser muito duplicadas. O Sass inclui alguns recursos úteis que tornam as consultas de mídia mais fáceis de trabalhar. Este artigo mostrará esses truques e como você pode usá-los para simplificar suas folhas de estilo.
O básico
Vamos dar uma olhada em um exemplo simples.
p {
font-size: 16px;
}
@media (min-width: 768px) and (max-width: 1023px) {
p {
font-size: 18px;
}
}
@media (min-width: 1024px) {
p {
font-size: 20px;
}
}
Aqui, definimos o tamanho da fonte dos parágrafos como 16 pixels. Quando a largura da janela de visualização for maior ou igual a 768 pixels e menor ou igual a 1023 pixels, o tamanho da fonte será de 18 pixels. Quando a janela de visualização for maior ou igual a 1024 pixels, o tamanho da fonte será de 20 pixels.
Logo de cara, o senhor deve ficar impressionado com a quantidade de código necessária para fazer algo tão simples como tipografia responsiva. À medida que os projetos aumentam, o estilo acima de escrever consultas de mídia geralmente leva a uma das duas direções:
- As consultas de mídia são codificadas no código e copiadas onde são necessárias. Se quisermos alterar uma consulta de mídia, teremos que fazer isso em vários lugares.
- O projeto é dividido por tamanhos de viewport. É chocante e demorado ir a vários lugares para atualizar os estilos de um único elemento.
Encurtando as coisas
O Sass permite que as variáveis sejam interpoladas. Isso significa que podemos mover nossas consultas de mídia para variáveis e reutilizá-las.
$tablet: "(min-width: 768px) and (max-width: 1023px)";
$desktop: "(min-width: 1024px)";
p {
font-size: 16px;
}
@media #{$tablet} {
p {
font-size: 18px;
}
}
@media #{$desktop} {
p {
font-size: 20px;
}
}
Agora, podemos usar o $tablet e $desktop consultas de mídia em qualquer lugar do nosso projeto sem duplicar o código. No entanto, ainda é irritante que nossas consultas de mídia sejam separadas do código que elas estilizam. O pessoal do Sass resolveu esse problema permitindo que as consultas de mídia sejam aninhadas.
$tablet: "(min-width: 768px) and (max-width: 1023px)";
$desktop: "(min-width: 1024px)";
p {
font-size: 16px;
@media #{$tablet} {
font-size: 18px;
}
@media #{$desktop} {
font-size: 20px;
}
}
Mixins para o resgate
O código acima funciona, mas é um pouco difícil de ler. Podemos limpá-lo usando a função Sass mixins. Mixins são grupos de estilos que podem ser reutilizados em seu código. Um dos recursos interessantes dos mixins é que eles podem usar blocos de conteúdo. Isso nos permite escrever mixins como este:
$tablet-width: 768px;
$desktop-width: 1024px;
@mixin tablet {
@media (min-width: #{$tablet-width}) and (max-width: #{$desktop-width - 1px}) {
@content;
}
}
@mixin desktop {
@media (min-width: #{$desktop-width}) {
@content;
}
}
Agora, podemos reescrever nosso exemplo acima para usar esses novos mixins.
p {
font-size: 16px;
@include tablet {
font-size: 18px;
}
@include desktop {
font-size: 20px;
}
}
Não estamos limitados apenas aos tamanhos dos dispositivos. Podemos escrever consultas de mídia para muitas outras coisas úteis, como a consulta de mídia de Chris Coyier consulta de mídia retina ou uma consulta de mídia impressa.
@mixin retina {
@media
only screen and (-webkit-min-device-pixel-ratio: 2),
only screen and (min--moz-device-pixel-ratio: 2),
only screen and (-o-min-device-pixel-ratio: 2/1),
only screen and (min-device-pixel-ratio: 2),
only screen and (min-resolution: 192dpi),
only screen and (min-resolution: 2dppx) {
@content;
}
}
@mixin print {
@media print {
@content;
}
}
Conclusão
As consultas de mídia são ótimas e, com o Sass, podem ser ainda melhores. Da próxima vez que usar uma, lembre-se desses truques para ajudar a tornar seu código mais legível e fácil de manter.
Sobre Landon Schropp
Landon é um desenvolvedor, designer e empresário que mora em Kansas City. Ele é o autor do livro Desvendando o Flexbox. Ele é apaixonado por criar aplicativos simples que as pessoas adoram usar.