Design responsivo

Você constrói uma página no seu laptop, fica ótima, e então alguém abre no celular. As colunas que você cuidadosamente alinhava agora estão comprimidas numa tira, o texto sai da borda, e uma barra de rolagem horizontal aparece onde não deveria haver nenhuma. Ninguém criou uma versão separada do site para telefone. Há uma página, e ela precisa parecer certa num celular de 380 pixels e num monitor de 1400 pixels sem você enviar duas versões de tudo. Essa capacidade de adaptação é o design responsivo, e a maioria dele é construída com as ferramentas que você já tem.
O que responsivo significa e a viewport
Uma página responsiva é uma página que se reformula para caber em qualquer tela em que apareça. O mesmo HTML e o mesmo CSS servem um telefone, um tablet e um desktop, e o layout se ajusta para que nada transborde e nada fique apertado. Você não está construindo três sites. Você está construindo um que se curva.
Antes de qualquer coisa funcionar, o navegador precisa de uma instrução no HTML. Telefones costumavam fingir que eram da largura do desktop e encolhiam a página toda para caber, o que é por que sites antigos apareciam como uma bagunça minúscula e afastada. Esta linha, que fica no <head> do seu HTML, diz ao telefone para usar sua largura real em vez disso:
<meta name="viewport" content="width=device-width, initial-scale=1" />Sem isso, seu CSS está estilizando uma tela larga imaginária e seu layout cuidadoso nunca tem uma chance.
Layouts fluidos primeiro
O reflexo é alcançar regras de telefone especiais imediatamente, mas muita responsividade vem de graça antes de você escrever uma sequer. Se você construir com valores fluidos, aqueles que se estendem e encolhem com o espaço, o layout já se adapta.
Dois hábitos carregam a maioria. Defina larguras como percentuais para que uma caixa tome uma parte de seu contêiner em vez de um número fixo de pixels, e use max-width para que algo possa encolher numa tela pequena mas nunca crescer além de um tamanho de leitura confortável numa grande:
.container {
width: 90%; /* ocupa 90% do espaço que tem */
max-width: 60rem; /* mas nunca mais largo que 60rem em telas grandes */
margin: 0 auto; /* centrado */
}Num telefone este contêiner é 90% de uma tela estreita. Num monitor ele para de crescer em 60rem e fica centrado. Você não escreveu uma regra para telefone; os valores fizeram a adaptação.
max-width para que encolham em telefones sem se estender muito largo em monitores. Estes dois valores adaptam o layout por si próprios. Construa fluido primeiro, e você precisará de muito menos das regras específicas para telefone que vêm a seguir. Media queries
Às vezes valores fluidos não são o suficiente e você precisa que o layout realmente mude em certo tamanho, por exemplo um menu que fica empilhado verticalmente num telefone mas se senta numa linha num desktop. É para isso que uma media query serve: um bloco de CSS que só se aplica quando a tela atende a uma condição que você define.
Comece com os estilos para tela pequena como seu CSS normal, depois adicione uma query que sobreponha as mudanças para tela mais larga:
.nav {
display: flex;
flex-direction: column; /* empilhado em telas pequenas */
}
@media (min-width: 40rem) {
.nav {
flex-direction: row; /* lado a lado quando há espaço */
}
}A regra dentro de @media (min-width: 40rem) só liga uma vez que a tela tem pelo menos 40rem de largura. Abaixo disso, a regra simples .nav se aplica e o menu fica empilhado.
@media (min-width: ...) para adicionar as mudanças para telas maiores. Dessa forma a visualização de telefone é seu ponto de partida, não um remendo aparafusado depois. Escolhendo pontos de quebra
Um ponto de quebra é a largura onde uma media query liga e o layout muda. A forma tentadora de escolher um é procurar a largura de um telefone ou tablet popular e coincidir com ele. Essa é a armadilha. Há centenas de tamanhos de dispositivo, eles mudam todo ano, e persegui-los é um jogo que você não pode ganhar.
A pergunta melhor é: em que largura este layout começa a parecer ruim? Amplie seu navegador lentamente e observe. Quando uma linha de texto fica muito comprida para ler confortavelmente, ou duas colunas ficam muito estreitas, é onde um ponto de quebra pertence, qualquer número que seja.
/* Ponto de quebra escolhido porque o texto ficou muito largo aqui, */
/* não porque um telefone acaso tenha este tamanho */
@media (min-width: 45rem) {
.article { max-width: 38rem; }
}
