PX para REM: O Guia do Desenvolvedor para Tipografia Escalável

Aprenda por que as unidades rem melhoram a acessibilidade, como calculá-las e as melhores práticas para tipografia responsiva em CSS.

6 min de leitura CSS · Acessibilidade · Tipografia 6 seções + FAQ

A escolha entre px e rem em CSS não é apenas uma preferência estilística — tem consequências diretas na acessibilidade, controlo do utilizador e design responsivo. Milhões de utilizadores definem um tamanho de fonte personalizado nas preferências do browser, e uma folha de estilos escrita inteiramente em px ignora completamente essa configuração.

Este guia explica a mecânica de cada unidade, a fórmula para converter px em rem e as regras práticas para saber quando usar cada uma numa base de código CSS real.

Entendendo as unidades CSS (px, rem, em, vh)

CSS oferece múltiplas unidades de comprimento para diferentes casos de uso. px (pixels) é uma unidade absoluta. rem (root em) é uma unidade relativa baseada no font-size do elemento raiz (<html>). em é uma unidade relativa baseada no font-size do elemento atual. vh e vw são relativas ao viewport: 1vh = 1% da altura do viewport. Cada unidade tem casos de uso apropriados e inapropriados.

Ferramenta gratuita Conversor PX para REM Converta instantaneamente valores em pixels para rem com qualquer tamanho base

Por que px é problemático para acessibilidade

Os browsers permitem que os utilizadores definam um tamanho de fonte predefinido nas preferências (tipicamente 16px por padrão, mas os utilizadores podem definir 20px, 24px ou mais). Quando define font-size: 16px em CSS, isso substitui a preferência do utilizador. Isso viola o Critério de Sucesso WCAG 2.1 1.4.4 (Redimensionar Texto), que exige que o texto possa ser redimensionado até 200% sem perda de conteúdo ou funcionalidade.

Como rem funciona (root font-size)

A unidade rem é sempre relativa ao font-size do elemento <html>. Por padrão, os browsers definem isso como 16px. Se um utilizador aumentar o tamanho de fonte do browser para 20px, então 1rem = 20px — todos os valores baseados em rem escalam proporcionalmente. Nunca defina font-size em <html> em pixels (ex. html { font-size: 16px }) pois isso derrota o propósito. Use uma percentagem: html { font-size: 112.5% } define a base como 18px num browser padrão de 16px.

Ferramenta gratuita Verificador de Contraste de Cores Verifique as taxas de contraste WCAG 2.1 juntamente com a acessibilidade do tamanho de fonte

Fórmula PX para REM

A fórmula é simples: rem = px / tamanho-fonte-base. Com a base padrão de 16px: 12px = 0.75rem, 14px = 0.875rem, 16px = 1rem, 18px = 1.125rem, 24px = 1.5rem, 32px = 2rem. Em pré-processadores CSS (Sass, Less), pode definir uma função. Em CSS moderno, propriedades personalizadas e calc() podem automatizar isso sem pré-processador.

/* Função Sass */
@function rem($px) {
  @return #{$px / 16}rem;
}

/* Uso */
font-size: rem(18); /* → 1.125rem */

/* CSS puro */
:root {
  --base: 16;
}

.text {
  font-size: calc(18 / var(--base) * 1rem);
}

Quando usar rem vs em vs px

Use rem para tipografia global (texto do corpo, títulos, etiquetas) e para espaçamento que deve escalar com a preferência de tamanho de fonte do utilizador. Use em para espaçamento ao nível do componente proporcional ao próprio font-size (padding dentro de um botão). Use px para bordas, sombras e elementos de layout que não devem escalar com o texto. Use unidades viewport (vh, vw) para elementos de layout relacionados com o viewport.

Propriedades CSS personalizadas para a base rem

Um padrão comum é definir uma propriedade CSS personalizada para o tamanho de fonte base. Defina font-size como percentagem em <html> para respeitar as preferências do utilizador, depois use rem em todo o lado. A função clamp() cria tipografia fluida que escala entre valores mínimo e máximo baseado na largura do viewport, sem breakpoints de media query.

/* Base acessível */
html {
  font-size: 100%;
}

body {
  font-size: 1rem;
}

h1 {
  font-size: 2rem;
}

/* Tipografia fluida com clamp */
.hero-title {
  font-size: clamp(1.5rem, 4vw, 3rem);
}
Ferramenta gratuita Gerador de Paletas de Cores Construa paletas de cores acessíveis junto ao seu sistema tipográfico

Perguntas Frequentes

Qual é a diferença entre px, rem e em em CSS? +
px é uma unidade absoluta que corresponde a pixels do dispositivo. rem é relativo ao font-size do elemento raiz (). em é relativo ao font-size do elemento atual. rem é preferido para tipografia e espaçamento porque respeita as preferências do browser do utilizador.
Como converter px para rem em CSS? +
Divida o valor em pixels pelo tamanho de fonte base (geralmente 16px): rem = px / 16. Exemplos: 12px = 0.75rem, 18px = 1.125rem, 24px = 1.5rem, 32px = 2rem. A ferramenta px-to-rem do PixCode automatiza esta conversão para qualquer tamanho base.
Por que usar px para font-size é mau para a acessibilidade? +
Quando font-size é definido em px, substitui a preferência de tamanho de fonte do browser do utilizador. Utilizadores que precisam de texto maior não podem substituir tamanhos de fonte baseados em px ajustando as configurações do browser. O critério WCAG 2.1 1.4.4 exige que o texto seja redimensionável para 200%.
Quanto vale 1rem em pixels? +
1rem equivale ao font-size do elemento . Na maioria dos browsers, o padrão é 16px, portanto 1rem = 16px por padrão. Se um utilizador alterar o tamanho de fonte do browser para 20px, então 1rem = 20px. Nunca defina html { font-size: 16px } — use html { font-size: 100% }.
Devo usar rem ou em para padding e margin? +
Use rem para padding e margin que devem escalar com o tamanho de fonte global. Use em para espaçamento interno de componentes proporcional ao font-size do componente (ex. padding de botões). Assim, se alterar o font-size de um componente, o seu padding interno ajusta automaticamente.
Posso usar rem para layout (width, height, grid)? +
Tecnicamente sim, mas geralmente não é recomendado para larguras de layout. O layout deve usar percentagens, unidades fr (grid) ou unidades viewport. Usar rem para max-width (ex. max-width: 60rem para uma coluna de conteúdo) é comum e funciona bem.
A ferramenta px-to-rem do PixCode suporta tamanhos base personalizados? +
Sim. O conversor PX para REM do PixCode permite definir qualquer tamanho de fonte base (16px por padrão mas configurável). Também mostra a saída CSS pronta para colar e suporta conversão em lote de múltiplos valores ao mesmo tempo.