95% do design é tipografia — e quase todo texto que você lê hoje passou por decisões de alguém

Apostila completa de Tipografia: fontes, escala e hierarquia

Tipografia é a disciplina de dar forma ao texto para que ele seja lido, compreendido e sentido do jeito certo. Esta apostila cobre a anatomia da letra, as classificações de tipos, como escolher e parear fontes, escala e hierarquia, tipografia na web com CSS, fontes variáveis e recursos OpenType, acessibilidade e internacionalização, e como montar um sistema tipográfico com tokens — sempre com o olho no que estúdios e produtos pedem de designers e front-ends.

10 módulosAnatomia · ClassificaçãoEscala · HierarquiaVariable fonts · OpenTypeWCAG · i18n · TokensExercícios com gabarito
MÓDULO 01 · BÁSICO

O que é tipografia e por que importa

Objetivo: entender o que a tipografia faz por um texto, separar os termos que todo mundo confunde (fonte, tipo, família, glifo) e ver onde ela aparece no trabalho.

1.1 Tipografia é a voz do texto

Duas páginas com as mesmas palavras podem comunicar coisas opostas: uma parece um contrato intimidador, a outra um convite. A diferença é tipografia — a escolha das fontes, o tamanho, o espaço entre linhas e letras, a largura da coluna, a hierarquia entre título e corpo. O leitor raramente percebe a tipografia conscientemente; ele percebe se o texto é fácil, confiável, agradável — e isso é resultado de decisões.

Para quem projeta interfaces, o peso é ainda maior: a maior parte de qualquer aplicativo é texto. Botões, rótulos, mensagens de erro, tabelas, menus. Acertar a tipografia é acertar a maior superfície do produto.

💡 A regra que organiza a apostila

Tipografia boa é invisível quando deve e expressiva quando pode. No corpo de texto longo, o objetivo é sumir: nada deve atrapalhar a leitura. Em títulos, marca e chamadas, a tipografia pode (e deve) ter personalidade. Saber em que registro você está é metade das decisões.

1.2 Fonte, tipo, família, glifo: os termos

TermoO que éExemplo
Tipo / typefaceO design das letras — a ideia, o desenhoHelvetica, Georgia, Inter
Fonte / fontUma instância concreta desse design: um arquivo, um peso, um estiloInter Bold Italic 16px; Inter-Bold.woff2
Família / familyO conjunto de fontes que formam um tipo: pesos, itálicos, largurasInter Thin → Black + itálicos
Glifo / glyphA forma visual de um caractere (ou de vários juntos)o desenho do "a"; a ligadura "fi"
Caractere / characterA unidade abstrata de texto (Unicode), independente da formaU+0061 LATIN SMALL LETTER A
Peso / weightA espessura do traçoRegular (400), Bold (700)
Estilo / styleVariação dentro da famíliaItalic, Condensed, SmallCaps

Na conversa do dia a dia "fonte" e "tipo" viram sinônimos e ninguém morre por isso — mas em contexto técnico (CSS, licenciamento, foundries) a distinção importa: você licencia um tipo e carrega arquivos de fonte.

1.3 Legibilidade × leiturabilidade

Um tipo muito legível pode ser mal composto (linha de 200 caracteres, entrelinha apertada) e ficar cansativo. Os dois trabalham juntos.

1.4 Onde a tipografia aparece no trabalho

💼 Mercado de trabalho

Tipografia é a habilidade que mais separa um portfólio "ok" de um "contrata já". Perguntas de abertura: "Qual a diferença entre fonte e tipo?", "O que é legibilidade vs leiturabilidade?", "Como você escolheria a fonte de um produto?" (módulo 4). Demonstrar que você pensa no leitor e no contexto de uso, e não em "qual fonte é bonita", já sinaliza maturidade.

✏️ Exercício 1 — Termos no lugar certo

Classifique cada item como tipo, fonte, família, glifo ou caractere: (a) "Roboto"; (b) o arquivo Roboto-MediumItalic.ttf; (c) o desenho da ligadura "ff"; (d) "A letra à com crase"; (e) o conjunto Roboto Thin/Light/Regular/Medium/Bold/Black com seus itálicos.

Gabarito: (a) tipo (o design); (b) fonte (instância concreta: peso Medium, estilo Italic, formato TTF); (c) glifo (forma visual, aqui de dois caracteres juntos); (d) caractere (a unidade abstrata "à", U+00E0 — independente de como é desenhada); (e) família (todas as fontes que compõem o tipo).

MÓDULO 02 · BÁSICO

Anatomia da letra

Objetivo: aprender o vocabulário das partes da letra e das linhas de referência — porque é isso que permite descrever, comparar e escolher tipos com precisão.

2.1 As linhas de referência

LinhaO que marca
BaselineA linha sobre a qual as letras "se apoiam". É a referência do CSS vertical-align e da métrica da fonte.
x-heightAltura das minúsculas sem ascendente (o "x"). A medida mais importante para leitura em tela: x-height alto = letras mais "cheias" no mesmo corpo.
Cap heightAltura das maiúsculas. Costuma ser menor que a dos ascendentes.
Ascender lineTopo das hastes que sobem (b, d, h, k, l).
Descender lineBase das hastes que descem (g, j, p, q, y).
Mean line / midlineTopo da x-height.

A soma ascendente + x-height + descendente (mais um respiro) é o corpo — historicamente o bloco de metal, hoje a métrica que o font-size escala. Por isso dois tipos no mesmo font-size podem parecer tamanhos diferentes: o que você percebe é a x-height.

2.2 Partes da letra

2.3 Contraste e eixo

2.4 O espaço entre as letras

💡 x-height é o que você "sente" como tamanho

Ao comparar fontes para corpo de texto em tela, ignore o nome e olhe a x-height e a abertura. Tipos como Inter, Source Sans, IBM Plex e Georgia têm x-height generoso e aberturas amplas — por isso "seguram" bem em 14–16px. Um tipo lindo com x-height baixo vai exigir um font-size maior para a mesma legibilidade, e aí a comparação muda.

✏️ Exercício 2 — Descreva a letra

Sem usar o nome da fonte, descreva o "a" minúsculo de duas fontes que você tenha à mão (ex.: a do sistema e uma do Google Fonts) usando: número de andares (um ou dois), bojo, contraforma, abertura, contraste, presença de serifa/gota. Depois diga qual das duas você usaria para uma tabela de dados densa e por quê.

Gabarito (modelo de resposta): "A fonte X tem 'a' de dois andares, bojo fechado, contraforma pequena, abertura estreita, contraste baixo, terminal reto — compacta. A fonte Y tem 'a' de dois andares, contraforma ampla, abertura larga, gota no terminal — mais legível em corpo pequeno." Para tabela densa: a de abertura mais ampla e x-height mais alto, com numerais tabulares disponíveis (módulo 7), porque a leitura é de relance e em corpo reduzido.

MÓDULO 03 · BÁSICO

Classificação de tipos

Objetivo: reconhecer as grandes categorias de tipos, o que cada uma comunica e onde funciona — para escolher com intenção e conversar com outros designers.

3.1 Serifadas

SubgrupoMarcas visuaisHumor / usoExemplos
Humanista / old-styleEixo inclinado, contraste moderado, serifas em cunhaCaloroso, orgânico; leitura longa, livrosGaramond, Sabon, Georgia
TransicionalEixo quase vertical, contraste maior, serifas mais retasNeutro, institucionalTimes New Roman, Baskerville
Moderna / didoneEixo vertical, contraste extremo, serifas finas e retasElegante, "moda", editorial de luxo; frágil em corpo pequenoDidot, Bodoni
Slab / egípciaSerifas grossas, retangulares, pouco contrasteFirme, "máquina", chamadas e brandingRockwell, Roboto Slab, Zilla

3.2 Sans-serif (sem serifa)

SubgrupoMarcas visuaisHumor / usoExemplos
GrotescaInício do sans; leve irregularidade, aberturas fechadasIndustrial, honestaFranklin Gothic, Akzidenz
Neo-grotescaMuito neutra, uniforme, aberturas fechadas"Sem voz", corporativa, sinalizaçãoHelvetica, Arial, Inter
HumanistaProporções caligráficas, aberturas amplas, contraste sutilAmigável, muito legível em UIFrutiger, Segoe UI, Source Sans, Open Sans
GeométricaConstruída de círculos e retas; "o" quase circularModerna, clean, um tanto fria; ótima para títulosFutura, Century Gothic, Poppins, Montserrat

3.3 As outras categorias

3.4 As classificações formais (e por que são só um guia)

Existem sistemas — Vox-ATypI, o do British Standards, o do Bringhurst por época histórica. Eles ajudam a estudar e a nomear, mas tipos reais misturam características ("humanista com detalhes geométricos"), e categorias novas surgem. Use os rótulos para comunicar ("preciso de uma humanista sans com x-height alto") — não os trate como gavetas rígidas.

3.5 Superfamílias

Alguns projetos entregam serif + sans + mono (às vezes slab) com o mesmo esqueleto: mesmas proporções, x-height, pesos. São ouro para sistemas, porque combinam por construção. Ex.: IBM Plex (Sans/Serif/Mono/Condensed), Source (Sans/Serif/Code), Roboto (Sans/Serif/Slab/Mono), Recursive, Fira.

💼 Mercado de trabalho

Perguntas: "Que tipo de fonte você usaria para um app financeiro sério?" (neo-grotesca ou humanista sans, numerais tabulares — nunca uma display), "Diferença entre uma sans geométrica e uma humanista?" (construção por círculos vs proporções caligráficas; humanista lê melhor em texto corrido), "O que é uma superfamília e por que ela ajuda num design system?". Saber nomear o que você vê é o que diferencia numa conversa de portfólio.

✏️ Exercício 3 — Classifique e justifique

Para cada cenário, nomeie a categoria (e subgrupo) que você escolheria e uma que você evitaria: (a) o corpo de texto de um site de notícias; (b) o título de uma capa de revista de moda; (c) os rótulos de um dashboard de métricas; (d) a marca de uma cafeteria artesanal.

Gabarito (uma boa resposta): (a) serifada humanista/transicional ou humanista sans de x-height alto para leitura longa; evitar didone (contraste frágil) e display. (b) didone (Didot/Bodoni) ou uma display com personalidade; evitar monoespaçada. (c) humanista ou neo-grotesca sans com numerais tabulares; evitar script e slab pesado. (d) pode ousar — uma serifada humanista, uma script bem-feita ou uma geométrica com ajustes; evitar Arial/Helvetica "de fábrica", que não diz nada de marca.

MÓDULO 04 · INTERMEDIÁRIO

Escolha e pareamento de fontes

Objetivo: escolher uma fonte por critérios objetivos (não por gosto), combinar duas sem conflito, e saber onde encontrá-las e como avaliar qualidade e licença.

4.1 Critérios para escolher uma fonte

CritérioPergunta a fazer
PropósitoÉ para corpo longo, para UI, para títulos, para dados? Cada um pede coisas diferentes.
Legibilidade em corpo pequenox-height alto? aberturas amplas? formas distintas (I / l / 1, O / 0)?
Número de pesos e estilosTem itálico de verdade (não oblíquo sintético)? Pesos suficientes para hierarquia (mín. Regular, Medium/SemiBold, Bold)?
Cobertura de caracteresAcentos do português, aspas curvas, travessão, símbolos de moeda, os idiomas que você precisa?
Recursos OpenTypeNumerais tabulares e old-style? Ligaturas? Small caps reais? (Módulo 7)
Hinting e qualidade em telaRenderiza limpo em Windows/baixa densidade? Foi desenhada para tela ou é uma digitalização de tipo de metal?
LicençaUso web permitido? Limite de pageviews? Pode empacotar num app? Custo? (4.5)
Peso do arquivoQuantos KB por peso em WOFF2? Tem versão variável? (Módulo 6–7)

4.2 Quantas fontes usar

A resposta segura é uma família bem explorada. Uma superfamília, ou uma sans com muitos pesos, resolve título + corpo + rótulo + código com variações de peso, tamanho e caixa. Duas famílias (uma para display, uma para texto) é o próximo passo. Três ou mais exige justificativa e um sistema muito claro — na dúvida, não.

4.3 Princípios de pareamento

Pares que quase sempre funcionam

4.4 Fontes de sistema e a "system font stack"

Usar as fontes já instaladas no dispositivo do usuário: zero download, zero CLS, aparência "nativa". O custo é menos controle e inconsistência entre plataformas.

/* stack de fontes de sistema — sans neutra em cada SO */
font-family:
  -apple-system, BlinkMacSystemFont,   /* macOS / iOS (San Francisco) */
  "Segoe UI",                        /* Windows */
  Roboto,                              /* Android / ChromeOS */
  "Helvetica Neue", Arial,           /* fallback antigo */
  "Noto Sans",                       /* Linux */
  sans-serif,
  "Apple Color Emoji", "Segoe UI Emoji";   /* emoji coloridos */

4.5 Onde achar e como avaliar licença

⚠️ Erros clássicos de licença e escolha

Usar uma fonte "achada na internet" (pirata) num projeto de cliente — risco jurídico real. Assumir que "de graça para pessoal" vale para comercial. Ignorar o limite de pageviews de uma webfont paga. Escolher pela amostra em corpo 100 e descobrir que em 15px o contraste some. Usar itálico e negrito sintéticos (o browser inclina/engorda na força) quando a família tem os arquivos reais — fica pior e "amador".

💼 Mercado de trabalho

Perguntas: "Como você escolhe a fonte de um produto?" (critérios objetivos: propósito, x-height, pesos, cobertura, licença, peso — não "gosto"), "Como parear duas fontes?" (contraste sem conflito, compartilhar um elo, papéis distintos, testar no real), "Prós e contras de usar system fonts?", "Como funciona o licenciamento de webfonts?". Ter um par bem justificado no portfólio, com o raciocínio escrito, vale muito.

✏️ Exercício 4 — Escolha e pareie

Você vai projetar um blog técnico com artigos longos, blocos de código e uma home com um título grande de marca. Proponha: (a) quantas famílias; (b) qual papel para cada uma; (c) dois candidatos concretos (do Google Fonts) e por quê; (d) o que você testaria antes de fechar.

Gabarito (uma boa resposta): (a) duas famílias + uma mono. (b) uma sans humanista para corpo e UI, uma display/serif com caráter para o título de marca, uma monoespaçada para código. (c) ex.: Source Sans 3 (x-height alto, muitos pesos, itálico real, ótimo em 16px) para corpo; Fraunces ou Lora para o título (contraste e personalidade, com opsz no caso da Fraunces); JetBrains Mono ou IBM Plex Mono para código (formas distintas I/l/1, ligaturas opcionais). (d) testar acentos PT-BR, numerais no corpo do artigo, o par título+corpo lado a lado, render no Windows, peso total em WOFF2, e o código em 13–14px.

MÓDULO 05 · INTERMEDIÁRIO

Escala, hierarquia e ritmo

Objetivo: definir tamanho de corpo, medida e entrelinha certos; construir uma escala tipográfica; e criar hierarquia com o mínimo de recursos.

5.1 O corpo de texto e a medida

5.2 Entrelinha (line-height)

5.3 A escala tipográfica modular

Em vez de tamanhos aleatórios, escolha uma razão e multiplique a partir do corpo. Assim os tamanhos se relacionam e a página tem harmonia.

RazãoNomeSensação
1.125Segunda maiorSutil — bom para UI densa
1.200Terça menorEquilibrada — padrão seguro para produto
1.250Terça maiorContraste claro — sites de conteúdo
1.333Quarta perfeitaEditorial, expressiva
1.500 / 1.618Quinta / áureaMuito dramática — landing pages, pouca densidade
/* escala com razão 1.25 a partir de 16px, arredondada */
--text-xs:   0.64rem;  /* 10.24 → ~10px  (evite para leitura) */
--text-sm:   0.8rem;   /* 12.8  → 13px   legendas, rótulos */
--text-base: 1rem;     /* 16px          corpo */
--text-lg:   1.25rem;  /* 20px          subtítulo / lead */
--text-xl:   1.563rem; /* 25px          h3 */
--text-2xl:  1.953rem; /* 31px          h2 */
--text-3xl:  2.441rem; /* 39px          h1 */
--text-4xl:  3.052rem; /* 49px          display */

Você não precisa usar todos os degraus, e pode "quebrar" a escala no display (títulos gigantes muitas vezes são escolhidos a olho). Mas ter a escala evita a bagunça de 15 tamanhos quase-iguais.

5.4 Hierarquia: os recursos e a disciplina

Você tem seis alavancas para dizer "isto é mais importante que aquilo":

  1. Tamanho — o mais óbvio, mas o que mais infla a página se abusado.
  2. Peso — Regular vs SemiBold vs Bold. Muitas vezes basta peso, sem mexer no tamanho.
  3. Cor / contraste — texto secundário em cinza (respeitando contraste mínimo — Módulo 8).
  4. Espaçamento — espaço antes de um título vale mais que espaço depois; espaço agrupa e separa.
  5. Família / estilo — itálico, uma segunda fonte, caixa alta.
  6. Caixaversalete, caixa alta com tracking para overlines.
💡 Use duas alavancas, não seis

Para cada nível de hierarquia, mude uma ou duas propriedades — não todas. "Título = maior + mais pesado" já basta. "Maior + mais pesado + outra fonte + caixa alta + colorido + com borda" é ruído. Menos contraste, mais claramente aplicado, lê melhor.

5.5 Ritmo vertical e espaçamento

5.6 Tracking (letter-spacing)

💼 Mercado de trabalho

Perguntas: "Qual a medida ideal de uma linha de texto e por quê?" (45–75 caracteres; max-width em ch), "Como você define a entrelinha?" (1.4–1.6 no corpo, mais apertada em título; cresce com a medida), "O que é uma escala tipográfica modular?", "Como criar hierarquia sem só aumentar a fonte?" (peso, cor, espaço — duas alavancas por nível).

✏️ Exercício 5 — Monte a hierarquia

Defina uma escala e a hierarquia para: um artigo com H1, H2, H3, corpo, citação em bloco, legenda de imagem e "tempo de leitura" (metadado). Para cada um dê tamanho (em rem), peso, cor (papel) e o espaço antes. Use razão 1.25 a partir de 16px.

Gabarito (uma boa resposta): corpo 1rem/1.6, peso 400, cor primária, max-width: 68ch. H1 2.441rem, peso 700, entrelinha 1.15, tracking −0.02em, espaço antes grande. H2 1.953rem, peso 700, espaço antes 2.5rem. H3 1.563rem, peso 600, espaço antes 2rem. Citação: 1.125rem, itálico ou peso 400 com borda à esquerda, cor levemente suave, recuo. Legenda: 0.8rem, peso 400, cor secundária (contraste ≥ 4.5:1), espaço acima pequeno. "Tempo de leitura": 0.8rem, caixa alta, tracking +0.08em, peso 600, cor secundária. Só tamanho+peso+cor+espaço — sem trocar de fonte.

MÓDULO 06 · INTERMEDIÁRIO

Tipografia na tela (CSS)

Objetivo: dominar as propriedades e unidades que controlam texto na web, carregar fontes sem prejudicar a performance, e evitar o layout shift da troca de fonte.

6.1 Unidades

UnidadeÉ relativa aUse para
pxnada (pixel de referência)bordas, detalhes; evite em font-size (não respeita a preferência do usuário)
remo font-size da raiz (html)tamanhos de fonte e espaçamento — escala com a preferência do usuário
emo font-size do próprio elementoletter-spacing, margin proporcional ao texto local, ícones ao lado de texto
cha largura do "0" da fonte atualmax-width de coluna de texto (a medida)
% / sem unidadeo pai (%) / o próprio font-size (line-height)line-height sem unidade (herda proporcional)
clamp(), vwa viewporttipografia fluida (6.2)

6.2 Propriedades essenciais

body{
  font-family: "Inter", system-ui, sans-serif;
  font-size: 1rem;
  line-height: 1.6;               /* sem unidade */
  text-rendering: optimizeLegibility;
  -webkit-font-smoothing: antialiased;
}
h1{
  font-size: clamp(2rem, 1.4rem + 3vw, 3rem);   /* fluida: min, preferida, max */
  line-height: 1.1;
  letter-spacing: -0.02em;
  text-wrap: balance;            /* equilibra as linhas de um título curto */
}
p{
  max-width: 65ch;               /* a medida */
  text-wrap: pretty;             /* evita "viúvas" na última linha */
  hyphens: auto;                 /* precisa de lang no HTML */
}
.uppercase-label{
  text-transform: uppercase;
  letter-spacing: 0.08em;
  font-weight: 600;
}

6.3 A system font stack e o system-ui

A palavra-chave system-ui resolve para a fonte de interface do SO. É prática, mas tem armadilhas (em alguns sistemas cai numa fonte sem os caracteres de certos idiomas). O padrão robusto continua sendo a stack explícita do Módulo 4, opcionalmente com system-ui no começo.

6.4 Carregando webfonts: @font-face

@font-face{
  font-family: "Inter";
  src: url("/fonts/Inter-Roman.var.woff2") format("woff2-variations");
  font-weight: 100 900;          /* range: é uma fonte variável */
  font-style: normal;
  font-display: swap;            /* mostra o fallback já, troca quando a fonte chega */
  unicode-range: U+0000-00FF, U+0131, U+2000-206F;  /* subset latino */
}
font-displayComportamentoQuando
swapfallback imediato → troca ao carregar (pode causar "flash")corpo de texto — conteúdo visível já
optionalfallback; só usa a webfont se ela chegar quase instantânea (senão, nesta visita, fica no fallback)quando zero layout shift importa mais que a fonte
fallbackmeio-termo: janela curtíssima de "invisível", depois fallback, troca se chegar logoequilíbrio
blocktexto invisível até a fonte (ou ~3s)quase nunca — ruim para percepção

6.5 Performance e o layout shift da fonte

/* fallback ajustado para casar com a métrica da webfont e não "pular" */
@font-face{
  font-family: "Inter-fallback";
  src: local("Arial");
  size-adjust: 107%;
  ascent-override: 90%;
  descent-override: 22%;
  line-gap-override: 0%;
}
body{ font-family: "Inter", "Inter-fallback", sans-serif; }

6.6 Recursos de fonte via CSS

.tabela-numeros{ font-variant-numeric: tabular-nums; }      /* números alinham em colunas */
.preco-antigo{ font-variant-numeric: oldstyle-nums; }
.titulo{ font-feature-settings: "liga" 1, "dlig" 1; }       /* ligaturas */
.sigla{ font-variant-caps: all-small-caps; }
.fracao{ font-variant-numeric: diagonal-fractions; }

Prefira as propriedades de alto nível (font-variant-*) quando existirem; caia para font-feature-settings para recursos específicos (ss01, cv05, salt). Detalhe no Módulo 7.

⚠️ Os erros de tipografia web que mais aparecem em auditoria

font-size em px fixo (ignora quem aumentou a fonte do navegador); line-height com unidade; servir TTF de 400KB; nenhum font-display (FOIT de segundos em conexão ruim); webfont sem preload e sem fallback casado → CLS alto no Lighthouse; @import de Google Fonts no CSS (bloqueia a renderização em cascata); usar negrito sintético porque só se carregou o peso 400.

💼 Mercado de trabalho

Perguntas de front-end: "px, em ou rem para font-size — e por quê?" (rem: respeita a preferência do usuário e escala), "O que é FOUT vs FOIT e como você controla?" (font-display), "Como reduzir o CLS causado por webfonts?" (preload + fallback com size-adjust/overrides), "Como você serviria fontes hoje?" (WOFF2, self-host, subset, preload do peso crítico, variável se possível). text-wrap: balance/pretty e tabular-nums são pontos de "esse aí acompanha a plataforma".

✏️ Exercício 6 — Escreva o carregamento de fontes

Escreva o CSS + o HTML de <head> para carregar uma fonte variável self-hospedada (peso 100–900, romana e itálica) para o corpo, com o mínimo de layout shift e sem bloquear a renderização. Liste também 3 coisas que você mediria depois.

Gabarito (uma boa resposta): dois @font-face (normal e italic) apontando para .woff2 com font-weight: 100 900, font-display: swap, unicode-range do subset; um @font-face de fallback com size-adjust/ascent-override casando a métrica; font-family: "Minha", "Minha-fallback", system-ui, sans-serif. No <head>: <link rel="preload" as="font" type="font/woff2" crossorigin href="…roman.woff2"> (só a romana, que é a crítica). Medir depois: CLS e LCP no Lighthouse/Web Vitals; o tamanho transferido das fontes; se há FOIT em "Slow 3G"; se o negrito/itálico usados existem nos arquivos (nada sintético).

MÓDULO 07 · AVANÇADO

Fontes variáveis e OpenType

Objetivo: usar fontes variáveis (um arquivo, muitos pesos/larguras/tamanhos ópticos) e os recursos OpenType que separam tipografia caprichada de "só escolhi a fonte".

7.1 O que é uma fonte variável

Uma fonte variável guarda, em um arquivo, um espaço contínuo de variações ao longo de eixos. Em vez de baixar Regular + Medium + SemiBold + Bold + itálicos (6–12 arquivos), você baixa um e interpola qualquer valor.

EixoTagO que faz
Weightwghtespessura, 1–1000 (400 = regular, 700 = bold)
Widthwdthlargura condensada ↔ expandida (%)
Optical sizeopszajusta o desenho para o tamanho de uso (7.2)
Slantslntinclinação em graus (oblíquo)
Italicital0 ↔ 1: troca para as formas itálicas de verdade (a, g diferentes)
GradeGRADengorda o traço sem mudar a largura — útil para dark mode e para "aumentar peso sem reflow"
(custom)ex. CASL, MONO, CRSVeixos próprios do designer (casual, monoespaçamento, cursividade…)

Eixos registrados vêm em minúsculas (wght), eixos customizados em maiúsculas (GRAD).

7.2 Optical sizing (opsz) — o eixo subestimado

Tipos de metal tinham desenhos diferentes para cada tamanho: os pequenos ("texto") com mais contraste baixo, x-height alto, espaçamento folgado, serifas robustas; os grandes ("display") com contraste alto e detalhes finos. Fontes digitais perderam isso — opsz traz de volta.

h1{ font-optical-sizing: auto; }        /* o browser liga opsz ao font-size — ligado por padrão em fontes com o eixo */
.ajuste-manual{ font-variation-settings: "opsz" 8; }   /* força o desenho "texto pequeno" */

7.3 CSS de fontes variáveis

@font-face{
  font-family: "Recursive";
  src: url("/fonts/Recursive.woff2") format("woff2");
  font-weight: 300 1000;
  font-stretch: 75% 125%;      /* o range do eixo wdth */
}
.botao{ font-weight: 560; }                       /* qualquer valor, não só 400/700 */
.condensado{ font-stretch: 85%; }
.grau-dark{ font-variation-settings: "GRAD" 40; }   /* eixos sem propriedade dedicada */
⚠️ font-variation-settings não herda como você espera

Ele é tudo-ou-nada: ao redefini-lo num filho, você precisa repetir todos os eixos que quer manter, senão eles voltam ao default. Prefira as propriedades de alto nível (font-weight, font-stretch, font-optical-sizing) e reserve font-variation-settings para eixos sem equivalente. Se usar muito, defina os eixos como custom properties e componha.

7.4 Ganho e trade-offs

7.5 Recursos OpenType

RecursoTag(s)Para que serve
Ligaturas padrãoliga"fi", "fl" — junta formas que colidiriam. Ligado por padrão; desligue em monoespaçada.
Ligaturas discricionáriasdlig"ct", "st" decorativas — só para display.
Numerais tabulares / proporcionaistnum / pnumtabulares: mesma largura, alinham em coluna (tabelas, dados, timers). proporcionais: espaçados para texto corrido.
Numerais lining / old-stylelnum / onumlining: altura das maiúsculas (UI, tabelas). old-style: com ascendentes/descendentes, "convivem" com minúsculas no texto.
Fraçõesfractransforma "1/2" em ½ bem desenhado.
Ordinais / sobrescritoordn, sups, subs1º, 2ª, notas, fórmulas.
Versalete (small caps)smcp, c2scmaiúsculas na altura da x-height — para siglas em meio ao texto sem "gritar".
Alternativas estilísticassalt, ss01ss20, cv01trocar o "a", o "g", o "1" com serifa etc. — a fonte documenta quais. Ex.: Inter cv05, cv11.
Swashesswshterminais floreados — display, convites.
table td.num{ font-variant-numeric: tabular-nums lining-nums; }
article p{ font-variant-numeric: oldstyle-nums proportional-nums; }
abbr{ font-variant-caps: all-small-caps; letter-spacing: .04em; }
.recipe{ font-variant-numeric: diagonal-fractions; }
.inter-tweaks{ font-feature-settings: "cv05" 1, "cv11" 1, "ss03" 1; }  /* g de andar único, 1 sem serifa… */

7.6 Animar eixos — com parcimônia

Dá para animar font-weight / font-variation-settings (hover num link que "engorda", peso que responde ao scroll). Efeito bonito e caro em atenção. Sempre envolva em @media (prefers-reduced-motion: reduce) e mantenha sutil; nunca anime o corpo de texto que a pessoa está lendo.

🔬 Aprofundamento

Numa mesma fonte variável você pode: usar GRAD (não wght) para engrossar o texto ~30–40 unidades no dark mode — telas claras sobre fundo escuro parecem mais finas ("irradiação"), e GRAD compensa sem mudar a largura, então nada reflui. Combine com font-optical-sizing: auto e uma escala fluida (Módulo 5–6) e a tipografia se ajusta a tamanho, tema e viewport sem você manter dezenas de arquivos.

💼 Mercado de trabalho

Perguntas: "O que é uma fonte variável e quando vale a pena?" (eixos; vale com 3+ pesos, larguras, opsz/GRAD), "O que é optical sizing?", "Como alinhar números numa tabela?" (font-variant-numeric: tabular-nums), "Diferença entre numerais lining e old-style?", "Por que font-variation-settings te surpreende na herança?" (é tudo-ou-nada). Mostrar tabular-nums numa tabela de dados e cvXX ajustando um "g" é sinal de cuidado.

✏️ Exercício 7 — Recursos no lugar certo

Para cada caso, diga qual recurso/propriedade OpenType você usaria: (a) uma tabela financeira onde os valores precisam alinhar; (b) as datas "1º de maio" num texto; (c) a sigla "NASA" no meio de um parágrafo, sem que ela domine visualmente; (d) a fração "3/4" numa receita; (e) o corpo de um artigo literário onde os números devem "fluir" com o texto; (f) desligar as ligaduras num trecho de código.

Gabarito: (a) font-variant-numeric: tabular-nums lining-nums. (b) ordn (font-variant-position/font-feature-settings:"ordn") para o "º". (c) font-variant-caps: all-small-caps + leve letter-spacing. (d) font-variant-numeric: diagonal-fractions (ou "frac"). (e) font-variant-numeric: oldstyle-nums proportional-nums. (f) font-variant-ligatures: none (ou font-feature-settings: "liga" 0, "clig" 0).

MÓDULO 08 · AVANÇADO

Tipografia acessível e internacional

Objetivo: compor texto que funciona para quem amplia a página, usa leitor de tela, tem baixa visão ou dislexia — e para idiomas e sistemas de escrita além do português.

8.1 O que a WCAG exige do texto

CritérioEm resumo
1.4.4 Resize texto texto pode ser ampliado a 200% sem perda de conteúdo ou função (não desative o zoom; use rem).
1.4.10 Reflowa 320px de largura equivalente, o conteúdo não exige rolagem horizontal — a coluna de texto reflui.
1.4.3 / 1.4.6 Contrastetexto normal ≥ 4.5:1 (AA) ou 7:1 (AAA); texto "grande" (≥ 24px, ou ≥ 18.66px bold) ≥ 3:1. Vale para o texto secundário em cinza também.
1.4.12 Text spacinga página não pode quebrar se o usuário forçar: line-height ≥ 1.5× o tamanho; espaço entre parágrafos ≥ 2×; letter-spacing ≥ 0.12em; word-spacing ≥ 0.16em.
1.4.8 Visual presentation (AAA)medida ≤ 80 caracteres; não justificado; entrelinha ≥ 1.5; cores de texto/fundo ajustáveis.

Os números da WCAG podem ser revisados entre versões — confira sempre a versão vigente ao auditar. A apostila Acessibilidade Digital & WCAG cobre o resto (foco, ARIA, testes com leitor de tela).

8.2 Práticas de leiturabilidade acessível

8.3 Dislexia: o que ajuda de verdade

Fontes vendidas "para dislexia" têm evidência científica fraca de que melhoram a leitura. O que a pesquisa apoia:

Ou seja: boa tipografia geral já é boa tipografia para dislexia. Ofereça a opção de fonte alternativa se quiser, mas não a imponha.

8.4 Formas ambíguas

Onde o leitor não pode adivinhar pelo contexto — senhas, códigos de verificação, identificadores, trechos de código, dados — a fonte precisa distinguir sem esforço:

Fontes desenhadas para isso: JetBrains Mono, IBM Plex Mono, Source Code Pro, Inconsolata, e várias sans de UI têm um ssXX/cvXX que ativa o "l" com cauda e o "0" pontilhado. Para código e senhas, prefira monoespaçada.

8.5 Internacionalização

8.6 Números em dados

⚠️ Armadilhas de acessibilidade tipográfica

Bloquear o zoom com user-scalable=no na meta viewport (falha WCAG direto). Texto dentro de imagem (não escala, não é lido, não traduz). "Ícone-fonte" sem rótulo acessível. Placeholder cinza-claro fazendo as vezes de label. Layout que estoura quando o usuário aumenta o letter-spacing. Caixa alta via conteúdo real (<h1>TÍTULO</h1>) em vez de text-transform.

💼 Mercado de trabalho

Perguntas: "Que critérios da WCAG envolvem texto?" (resize 200%, reflow, contraste 4.5:1, text-spacing 1.4.12), "Fontes para dislexia funcionam?" (evidência fraca; o que ajuda é espaçamento, x-height, formas distintas, deixar ajustar), "Como você garante que I, l e 1 não se confundem num campo de senha?", "O que muda na tipografia ao suportar árabe ou japonês?" (RTL, formas contextuais, sem itálico, subsetting pesado). Pensar em i18n desde o layout é sinal de senioridade.

✏️ Exercício 8 — Auditoria rápida

Um componente mostra: título em <h2> com text-transform: uppercase e font-size: 22px; corpo em 14px/line-height: 18px; legenda #9aa0a6 sobre branco; um "código de convite" em Arial; botões com width: 120px. Aponte os problemas e as correções.

Gabarito: (1) font-size em px → use rem (resize/preferência). (2) line-height: 18px com unidade e < 1.5× → use line-height: 1.5 sem unidade (1.4.12). (3) corpo 14px é pequeno para leitura → 16px base. (4) legenda #9aa0a6 em branco ≈ 2.6:1 → falha 4.5:1; escureça para ~#5f6368. (5) "uppercase" ok se via text-transform (está) — mas confirme que não é conteúdo real e que não é um bloco longo. (6) código de convite em Arial → I/l/1/O/0 ambíguos; use monoespaçada com formas distintas. (7) botão width: 120px fixo → quebra em idiomas mais longos e com letter-spacing do usuário; use min-width + padding.

MÓDULO 09 · MUITO AVANÇADO

Sistema tipográfico e tokens

Objetivo: transformar decisões soltas em um sistema — papéis de texto, tokens, nomenclatura, fluid type e governança — que escala para um produto inteiro e vários times.

9.1 De estilos soltos a papéis

Um sistema não lista "tamanhos" — lista papéis (o que o texto faz), e cada papel amarra família + tamanho + peso + entrelinha + tracking + cor.

PapelUso
displaynúmeros/frases de impacto numa landing; raríssimo em produto
heading-1…4 (ou xl/lg/md/sm)títulos de página e seção
title / subtitletítulos de card, de modal, de grupo
body / body-strong / body-smtexto corrido e suas variações
labelrótulos de formulário, de botão, de aba
caption / helpertextos auxiliares, mensagens de campo
overlinerótulo curto em caixa alta acima de um título
codetrechos monoespaçados inline e em bloco

9.2 Tokens de tipografia

Três camadas, como em cor:

/* 1. PRIMITIVOS — os valores crus, sem significado de uso */
--font-sans: "Inter", "Inter-fallback", system-ui, sans-serif;
--font-mono: "JetBrains Mono", ui-monospace, monospace;
--font-serif: "Lora", Georgia, serif;

--weight-regular: 400;  --weight-medium: 500;  --weight-semibold: 600;  --weight-bold: 700;

--size-100: 0.75rem;  --size-200: 0.875rem;  --size-300: 1rem;
--size-400: 1.125rem; --size-500: 1.25rem;   --size-600: 1.5rem;
--size-700: 1.875rem; --size-800: 2.25rem;   --size-900: 3rem;

--leading-tight: 1.15;  --leading-snug: 1.35;  --leading-normal: 1.55;
--tracking-tight: -0.02em;  --tracking-normal: 0;  --tracking-wide: 0.08em;

/* 2. SEMÂNTICOS — um papel, composto dos primitivos */
--text-body-font: var(--font-sans);
--text-body-size: var(--size-300);
--text-body-leading: var(--leading-normal);
--text-body-weight: var(--weight-regular);

--text-heading-1-size: var(--size-800);
--text-heading-1-leading: var(--leading-tight);
--text-heading-1-weight: var(--weight-bold);
--text-heading-1-tracking: var(--tracking-tight);
/* 3. USO — uma classe/utilitário por papel (ou o shorthand `font`) */
.text-body{
  font: var(--text-body-weight) var(--text-body-size)/var(--text-body-leading) var(--text-body-font);
}
.text-heading-1{
  font: var(--text-heading-1-weight) var(--text-heading-1-size)/var(--text-heading-1-leading) var(--font-sans);
  letter-spacing: var(--text-heading-1-tracking);
}

9.3 Nomenclatura: semântica × escala

9.4 Fluid type no sistema

9.5 Onde os tokens vivem

9.6 Governança e o specimen

9.7 Respeitar a plataforma e o usuário

💡 O teste de um bom sistema tipográfico

Peça a duas pessoas do time para maquetar a mesma tela sem se falarem. Se a tipografia sai igual — mesmos papéis, mesmos tamanhos — o sistema funciona. Se cada uma inventou uma hierarquia, faltam papéis claros ou sobra escala demais. Um sistema tipográfico é bom quando tira decisões da mesa, não quando oferece mais opções.

💼 Mercado de trabalho

Perguntas de design systems / front-end sênior: "Como você estrutura os tokens de tipografia?" (primitivos por escala → semânticos por papel → componentes só consomem semânticos), "Semântico ou por escala na nomenclatura?" (os dois, em camadas), "Como manter Figma e código em sincronia?" (mesmos nomes/valores; Style Dictionary como fonte única), "Quando usar fluid type?" (só nos papéis grandes, com rem nos limites). Ter um mini-sistema com specimen no portfólio é forte.

✏️ Exercício 9 — Desenhe a escala de um design system

Para um produto SaaS (web app denso + site de marketing), especifique: (a) as famílias e seus papéis; (b) a razão da escala e 6–8 degraus com valores em rem; (c) 6 papéis semânticos com família/tamanho/peso/entrelinha/tracking; (d) quais papéis são fluidos; (e) duas regras de governança.

Gabarito (uma boa resposta): (a) uma sans humanista variável para tudo (app + marketing) + uma mono para código; opcional uma serif display só no marketing. (b) razão 1.2, degraus 0.75 / 0.875 / 1 / 1.125 / 1.25 / 1.5 / 1.875 / 2.25 rem (+ um 3rem "display" escolhido a olho). (c) body sans/1rem/400/1.55/0; body-sm sans/0.875/400/1.5/0; label sans/0.875/600/1.3/0.01em; heading-2 sans/1.5/700/1.2/−0.015em; heading-1 sans/2.25/700/1.15/−0.02em; overline sans/0.75/600/1.3/0.08em caixa alta; code mono/0.875/400/1.5. (d) só heading-1, heading-2 e o display do marketing, com clamp() em rem. (e) nada de font-size literal em componentes (lint), e todo papel novo precisa de aprovação + entrada no specimen em claro/escuro.

MÓDULO 10 · CARREIRA

Mercado de trabalho: roadmap, entrevistas e portfólio

Objetivo: converter o conteúdo dos módulos anteriores em contratação — onde a tipografia pesa, um plano de estudo, um banco de perguntas com respostas e projetos que geram entrevista.

10.1 Onde tipografia pesa

10.2 Roadmap de estudo (6–8 semanas)

SemanasFocoPrática
1Anatomia e classificação (Módulos 2–3)Pegar 10 sites/apps que você admira e nomear cada fonte por categoria e por que funciona
2Escolha e pareamento (Módulo 4)Montar 3 pares justificados por escrito; testar no conteúdo real, no Windows e no celular
3Escala, medida, hierarquia (Módulo 5)Redesenhar a hierarquia de um artigo real com uma escala modular; antes/depois
4Tipografia web: unidades, propriedades, carregamento (Módulo 6)Implementar o artigo da semana 3 em HTML/CSS com rem, ch, clamp(), @font-face, preload
5Variable fonts e OpenType (Módulo 7)Trocar por uma variável; usar opsz, tabular-nums numa tabela, ajustar 2 cvXX
6Acessibilidade e i18n (Módulo 8)Auditar o projeto com Lighthouse + zoom 200% + teste de text-spacing; simular alemão/árabe
7Sistema e tokens (Módulo 9)Extrair um mini design system tipográfico: primitivos, semânticos, specimen em claro/escuro
8PortfólioEscrever os estudos de caso com o raciocínio (não só telas bonitas); publicar

10.3 Banco de perguntas de entrevista (com a resposta que aprova)

Júnior/pleno — "Qual a diferença entre fonte e tipo (typeface)?"

Tipo é o design das letras (a ideia — "Helvetica"). Fonte é uma instância concreta desse design: um peso, um estilo, um arquivo/tamanho ("Helvetica Bold 12pt", Helvetica-Bold.woff2). Você licencia um tipo e carrega arquivos de fonte. Família é o conjunto de fontes que formam o tipo.

Pleno — "Como você escolhe a fonte de um produto?"

Por critérios objetivos, não gosto: propósito (corpo longo? UI? dados?), legibilidade em corpo pequeno (x-height, aberturas, formas distintas I/l/1/O/0), número de pesos e itálico real, cobertura de caracteres para os idiomas do produto, recursos OpenType (tabular-nums), qualidade de render no Windows, licença de web/app e peso do WOFF2. Depois testo no conteúdo e nos tamanhos reais, no device real.

Pleno — "Qual a medida ideal de uma linha e a entrelinha do corpo?"

Medida: 45–75 caracteres por linha (~66 ideal); em CSS max-width: 65ch. Entrelinha do corpo: 1.4–1.6, sem unidade, crescendo quando a linha é mais longa ou o texto menor. Títulos grandes: entrelinha mais apertada (1.1–1.25) e tracking levemente negativo.

Pleno/front-end — "px, em ou rem para font-size?"

rem: escala com o font-size da raiz e respeita a preferência de tamanho do usuário no navegador. px em font-size ignora essa preferência (problema de acessibilidade). em é útil para letter-spacing e margens proporcionais ao texto local, mas acumula em elementos aninhados. line-height sem unidade.

Pleno/front-end — "FOUT vs FOIT, e como controlar?"

FOIT = Flash of Invisible Text (o texto some até a fonte carregar); FOUT = Flash of Unstyled Text (mostra o fallback e troca). FOUT é preferível — o conteúdo é legível na hora. Controle com font-display: swap (FOUT) para corpo, optional quando zero shift importa mais. Reduza o "pulo" da troca com preload da fonte crítica e um @font-face de fallback com size-adjust/ascent-override.

Sénior — "Quando usar uma fonte variável?"

Quando você usa 3+ pesos, ou precisa de larguras, ou quer opsz (optical sizing) / GRAD (peso sem reflow, útil no dark mode). Um arquivo variável pesa menos que 4–5 estáticos, mas mais que um único estático — se você só usa Regular + Bold, dois estáticos subsetados podem pesar menos. Faça a conta com o subset real.

Sénior — "Como você garante alinhamento de números numa tabela financeira?"

font-variant-numeric: tabular-nums lining-nums (todos os dígitos com a mesma largura, alinham em coluna), alinhamento à direita ou pelo separador decimal, e uma fonte que tenha o recurso. Sem tabular-nums as colunas "dançam" a cada dígito diferente.

Sénior — "Fontes 'para dislexia' funcionam?"

A evidência de que fontes específicas melhoram a leitura de pessoas disléxicas é fraca. O que a pesquisa apoia: espaçamento generoso (letra, palavra, linha), x-height alto, formas de letra distintas (b/d/p/q não idênticos espelhados), alinhamento à esquerda, medida curta, e principalmente deixar o usuário ajustar fonte/tamanho/espaçamento. Boa tipografia geral já cobre isso.

Armadilha — "É só escolher uma fonte bonita"

Tipografia é composição, não seleção: a mesma fonte fica ótima ou ilegível conforme tamanho, medida, entrelinha, hierarquia, contraste e carregamento. E "bonita numa amostra em corpo 72" não prediz "legível em 14px no Windows". A escolha é ~20% do trabalho; os 80% são escala, hierarquia, ritmo e implementação.

10.4 Projetos de portfólio que geram entrevista

  1. Type specimen interativo (âncora): uma página que apresenta uma família — pesos, opsz, recursos OpenType, pares, a escala — com texto real e controles. Mostra domínio de anatomia, OpenType e CSS.
  2. Redesign de hierarquia: pegue um artigo/tela real com hierarquia fraca e refaça com uma escala modular; publique o antes/depois com o raciocínio de cada decisão.
  3. Sistema tipográfico completo: primitivos + semânticos + specimen em claro/escuro + página de governança, implementado em CSS custom properties e espelhado em Figma text styles.
  4. Estudo de pareamento: 4–5 duplas de fontes para contextos diferentes, cada uma com o elo que as une e o teste no conteúdo real.
  5. Refactor de performance de fontes: um site real; antes/depois de CLS e bytes transferidos após WOFF2 + subset + preload + fallback casado + variável. Números do Lighthouse.

10.5 Fontes para continuar

🏁 Síntese final da apostila

Quatro ideias sustentam a tipografia: (1) é composição, não seleção — tamanho, medida, entrelinha e hierarquia importam mais que o nome da fonte; (2) x-height, abertura e formas distintas são o que se lê em tela — olhe isso, não a amostra em corpo grande; (3) hierarquia com duas alavancas por nível (tamanho + peso, ou peso + cor) — menos contraste, mais claro; (4) na web, a implementação é metade do trabalho: rem, ch, clamp(), WOFF2 + subset + preload, fallback casado, tabular-nums e acessibilidade. Um sistema de tokens transforma tudo isso em decisões que o time não precisa refazer.