← Fundamentos de HTML e CSS: estrutura, apresentação e diagnóstico
08 / 10 · 65 MIN

Design responsivo e media queries

Adaptar conteúdo à largura disponível, interpretar media queries e alinhar as indicações de imagens com o layout. Conservar zoom, leitura e acesso às ações.

O viewport relevante

A declaração width=device-width, initial-scale=1 ajuda o browser móvel a usar um viewport de layout coerente com a largura do dispositivo em CSS pixels. Não transforma CSS pixels em pixels físicos nem resolve uma largura fixa excessiva no conteúdo.

O excerto não impede zoom. Acrescentar user-scalable=no para manter uma disposição visual pode retirar uma ferramenta de leitura necessária, e não corrige as restrições que tornam a página demasiado larga.

Condições e limites inclusivos

Min-width: 600px corresponde quando o viewport tem exatamente 600 CSS px e quando é mais largo. A condição decide se as regras entram na cascata; não lhes dá mais especificidade. A 1000px, ambas as queries do exemplo correspondem.

Como os seletores e os restantes critérios empatam, a última declaração determina as três colunas. Se inverteres a ordem destas duas regras, uma condição mais estreita pode sobrepor-se à mais larga; não existe um else-if implícito.

Combinar condições com intenção

And exige que as condições combinadas sejam verdadeiras; uma lista separada por vírgulas corresponde se alguma query da lista corresponder. A expressão screen and (min-width: 600px) exige o tipo screen e essa largura. Orientation descreve a relação entre dimensões do viewport, não garante espaço suficiente para um componente nem identifica o hardware.

Antes de acrescentar mais condições, explica qual restrição concreta cada uma protege.

Breakpoints guiados pelo conteúdo

Os valores 600 e 900 são hipóteses do exemplo. Num produto real, observa quando títulos, filtros e ações deixam de caber sem sobreposição ou perda de significado. Testa as traduções e a ampliação, porque um rótulo maior pode exigir outra disposição no mesmo dispositivo.

Uma coluna simples como base reduz premissas, enquanto mais colunas podem ser acrescentadas quando houver espaço suficiente. Flexibilidade e limites min/max também ajudam; uma media query não é obrigatória para cada adaptação.

Unidades e proporções

Rem refere-se à dimensão da fonte no root. Em aplicado a font-size usa a fonte do pai; em no padding usa a fonte do próprio elemento. Com root de 20px e filho font-size: 1rem, padding: 1em vale 20px, mesmo se o pai tiver 30px.

Numa imagem, max-width: 100% e height: auto permitem limitar a largura ao contentor preservando a proporção nas condições do exemplo. Uma altura fixa adicional pode contrariar essa intenção.

O slot não é o ficheiro

Nos candidatos srcset com descritores w, cada número identifica a largura intrínseca do ficheiro. Sizes indica o slot esperado em diferentes condições; não define por si só a largura visual. Se a imagem ocupa 300px mas sizes declara 100vw num viewport de 1200px, a indicação sobrestima a necessidade e pode levar a um recurso maior.

O browser considera também densidade e outras condições. Por isso, o diagnóstico aponta uma indicação incoerente sem prometer um ficheiro exato para todos os browsers.

Reflow sem perder informação

O critério de reflow explica por que texto verticalmente percorrido deve adaptar-se a uma largura equivalente a 320 CSS px sem exigir scroll horizontal para cada linha. Há exceções delimitadas para partes que precisam de duas dimensões, como certas tabelas e mapas; isso não justifica manter todos os parágrafos com largura fixa.

Uma tabela pode ter região de scroll própria enquanto o texto reflui. Esconder a barra com overflow: hidden pode apenas ocultar conteúdo, sem cumprir o objetivo de preservar informação e funcionalidade.

<!-- In the document head -->
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
  .cards { display: grid; grid-template-columns: minmax(0, 1fr); gap: 20px; }
  .cards img { max-width: 100%; height: auto; }
  @media (min-width: 600px) {
    .cards { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  }
  @media (min-width: 900px) {
    .cards { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  }
</style>
NA PRÁTICA

O excerto pertence ao head de uma página com cartões. Abaixo de 600 CSS px há uma coluna; entre 600 e menos de 900 há duas; a partir de 900 ambas as queries correspondem e a regra posterior define três. Os limites são escolhas ilustrativas que precisam de confirmação com o conteúdo real. Não definem categorias universais de telemóvel ou tablet.

Armadilhas comuns

Confundir CSS px com pixels físicos; tratar media queries como else-if; pensar que sizes define width; esconder overflow para parecer responsivo; bloquear zoom; assumir que landscape significa espaço suficiente; usar um breakpoint sem observar ambas as traduções.

Tópicos relacionados: Ligações, imagens e significado do conteúdo · Layout com Flexbox e Grid · Foco, estados, movimento e preferências

Leva esta ideia contigo

Layout responsivo conserva conteúdo e ações quando o espaço muda. Usa condições compreensíveis, resolve todas as regras que correspondem e mantém as indicações de recursos coerentes com a dimensão visual. A inspeção destes exemplos não equivale a uma certificação de acessibilidade da página.

Criar conta

Referência: Content-driven responsive layout · HTML Living Standard; modular CSS