Recomendações para CSS font-family
(chrismorgan.info)- Se você criar um design na web confiando em um nome específico de fonte, ele pode quebrar dependendo da plataforma, da rede e das configurações de segurança; portanto, o
font-familydeve ser montado pressupondo um fallback de família genérica - Para código, artwork e layouts que exigem representação monoespaçada, é indispensável incluir
monospace; e, se quiser garantir a família desejada, também é mais seguro especificarserifesans-serif - Pilhas que listam muitos nomes de fontes que talvez existam localmente geralmente trazem pouco benefício, e os padrões de famílias genéricas do navegador podem até fazer uma escolha melhor
- Web fonts são mais lentas do que não usar web fonts e introduzem compromissos como falha de carregamento e
font-display; por isso, usar a fonte padrão do usuário para conteúdo também é uma opção realista system-uieui-*têm forte caráter de texto curto de UI e podem não ser adequadas para conteúdo longo e suporte a idiomas; usá-las como substituto da fonte padrão para conteúdo é arriscado
Não confie em nomes de fontes
- Não existe uma fonte segura para web oferecida em comum por todas as principais plataformas, portanto não se deve presumir que um nome específico de fonte sempre funcionará
- Web fonts também não são uma solução garantida
- Sub-recursos que não estejam embutidos inline podem falhar ao carregar por vários motivos de rede
- Carregamento de fontes é uma área com preocupações de segurança, então pode ser bloqueado em alguns ambientes
- O uBlock Origin tem um botão dedicado para desativar fontes remotas
- O modo de economia de dados de alguns navegadores pode impedir o carregamento de fontes, e há a posição de que ele deveria impedir mesmo quando não impede
- Se o usuário não permitir que um site escolha suas próprias fontes, apenas as famílias genéricas funcionarão
- Em JavaScript, ao usar
document.fonts.load("1em my-web-font"), a Promise retornada pode ser rejeitada- Ao longo de 6 anos, de 2020 a 2025, foram vistos cerca de 4 casos quebrados por esse problema, dos quais 2 ocorreram em 2025
Sempre especifique uma família de fallback
- Se precisar de texto monoespaçado, é obrigatório colocar
monospaceemfont-family- A ausência de
monospacenão fica visível para muitos usuários, mas em alguns ambientes pode arruinar o layout ou a intenção da obra - Como exemplo, ASCII might fly?, de Adel Faure, no momento da escrita não incluía
monospace, podendo aparecer em uma forma não monoespaçada
- A ausência de
- Também é melhor incluir
serifousans-serifse for necessário um fallback da família de fonte desejada- Ex.:
font-family: Arial, sans-serif; - Ex.:
font-family: Times New Roman, serif; - Se não incluir, a fonte padrão será usada; a fonte padrão pode ser serifada, mas também pode ser algo totalmente diferente
- Ex.:
Reduza listas de fontes que talvez estejam instaladas
- Listar longamente fontes que talvez existam no sistema, como
Arial,Helvetica,Helvetica Neue,Liberation SanseNoto Sans, em geral não ajuda - Em especial, considera-se que Arial nunca será uma escolha melhor que
sans-serif sans-serifpode ser interpretada como uma fonte não pior do que as fontes especificadas, e há chance de uma fonte melhor ser escolhida- Um exemplo real de declaração monoespaçada era uma lista excessivamente longa
font-family: Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif- Essa declaração é estritamente pior que
font-family: monospace, monospace, emonospacepode ser interpretada como uma fonte não pior que essa lista
- Não é preciso proibir completamente fontes nomeadas que não sejam web fonts, mas no máximo uma costuma ser adequado
- Georgia) e Times New Roman são ambas serifadas pertencentes às Core fonts for the Web, da Microsoft, mas têm características diferentes
- Georgia é muito mais larga que Times New Roman; portanto, se esse traço for necessário para o estilo,
font-family: Georgia, serifé uma escolha aceitável
- modernfontstacks.com e o repositório trazem ideias de seleção de fontes por plataforma
- Porém, prescrevem fontes nomeadas em excesso, e a avaliação é que muitas delas deveriam ser removidas
- O tratamento de Courier New está muito errado, e a imagem parece ter sido feita com Courier do macOS
A opção de usar apenas famílias genéricas
- Se você reduziu a listagem de fontes instaladas localmente, também vale reavaliar se web fonts são mesmo necessárias
- Web fonts são mais lentas do que a ausência de web fonts e podem criar problemas de carregamento
- É por isso que existe
font-display - Mas, em vez de lidar com compromissos entre períodos de block e swap, redesenho e reflow, também é possível simplesmente usar as fontes que o usuário já tem
- É por isso que existe
- Também é possível escolher apenas a família genérica
monospace- No passado, o padrão de
monospacenão era bom, e em especial Courier New#Courier_New), da Microsoft, foi mal digitalizada, parecendo na prática ter peso 200–250, e não 400 - Depois, a Apple introduziu Menlo), e, numa época em que o
monospacepadrão dos navegadores não era atualizado, as pessoas começaram a colocar Menlo nas pilhas de fontes - Hoje, os padrões dos navegadores melhoraram; embora não sejam excelentes em todos os casos, já não são ruins
- No passado, o padrão de
- É possível abandonar listas como
Menlo, Monaco, Consolas, Bitstream Vera Sans Mono, Courier, Courier Newe deixar apenasmonospace - Colocar
Courier Newintencionalmente na pilha de fontes é avaliado de forma fortemente negativa
monospace, monospace e o comportamento dos navegadores
- Ao usar
font-family: monospace;de forma explícita ou implícita, ofont-sizepode ser definido por padrão não como 100%, mas provavelmente como 81,25%- O usuário pode alterar a fonte de família genérica, o tamanho padrão do texto e o tamanho padrão do texto monoespaçado
- Se houver uma segunda family na lista, esse comportamento não ocorre
font-family: my-web-font, monospace;funciona bemfont-family: monospace, monospace;também funciona bem- Especificar
font-sizediretamente também é uma opção
- O Lightning CSS tem um problema que quebra
monospace, monospace- Issue relacionada: parcel-bundler/lightningcss#1221
- Temporariamente, está sendo usado
monospace, m
- Esse problema afeta apenas
monospace - A posição é de que seria desejável convencer os navegadores a abandonarem o comportamento de tamanho de
monospacee aumentarem o valor, provavelmente 13px, para provavelmente 16px- O local para propor isso poderia ser o CSSWG
Não use system-ui e ui-* em conteúdo
- Fontes de UI são para textos curtos de interface, não para conteúdo longo
- Fontes de UI podem não oferecer bom suporte ao idioma do conteúdo
- O macOS é considerado bom nesse aspecto, mas o Windows não
- Como resultado, podem surgir casos em que usuários de CJK veem uma fonte monoespaçada ruim
- Alguns usuários escolhem de propósito fontes de UI do sistema caricatas, algo que aparentemente é bastante comum em algumas comunidades Android
- Há a preocupação de que, ao usar
system-ui, o conteúdo também possa aparecer assim
- Há a preocupação de que, ao usar
- A issue #3658 de w3c/csswg-drafts discutiu vários problemas de
system-uie contém a conclusão de quesystem-uifoi amplamente abusada - A issue #41244 de mdn/content adicionou ao MDN uma nota alertando sobre o uso excessivo
system-uieui-*têm sido usadas como uma espécie de proxy para obter uma fonte padrão melhor, mas esse uso não é bom- A posição é de que
system-uifoi um erro- A visão é que apenas
-apple-systemdeveria ter permanecido, eBlinkMacSystemFontdeveria ter sido transformado nisso - Na época da padronização, outras plataformas não tinham um conceito equivalente útil, e hoje se considera que algumas plataformas passaram a tê-lo
- Entende-se que ela foi majoritariamente abusada para contornar o problema de os navegadores não atualizarem os antigos padrões das famílias genéricas existentes
- A visão é que apenas
- A posição é de que
ui-serif,ui-sans-serif,ui-monospacee especialmenteui-roundedsão erros óbvios que deveriam ser removidos- Em ambientes que não sejam Apple, não se espera que mapeiem para qualquer fonte
- Como o próprio conceito existe apenas nas plataformas Apple, ele não deveria ter sido incluído no padrão
- Se a Apple o tivesse fornecido, deveria ter sido em uma forma com prefixo
-apple, como-apple-system
- Há casos de uso legítimos para
system-uiem web apps, mas a impressão é que, na prática, ela foi quase inteiramente abusada, e uma intervenção para removê-la talvez não fosse ruim
1 comentários
Comentários do Lobste.rs
No https://lindenii.org, a opção foi não definir
font-familyde jeito nenhum, respeitando assim a fonte padrão escolhida pelo usuário no navegadorPessoalmente eu prefiro sans-serif, mas se o usuário usa serif como padrão, não vejo motivo para sobrescrever isso
Ainda assim, em casos como https://runxiyu.org/soc/ta/, em que foi necessário usar caracteres ausentes na maioria das fontes, não teve jeito a não ser incluir uma webfont, e o resultado foi o problema de forçar todo o resto do texto para sans-serif em vez do padrão do usuário
A menos que se envolva cada caractere estranho com algo como
<unusual-character>, não sei se existe uma forma melhor, e também seria bom haver um jeito de especificar algo como “a fonte preferida do usuário para código”A dica de
monospace, monospacefoi útil, e a diferença de tamanho era bem confusaSites de listagem de caracteres Unicode fazem isso assim
monospaceJá elogiaram o design do site, mas na verdade eu só peguei um tema do Zola e reduzi o CSS e os elementos customizados, então concordo bastante com a ideia do texto, especialmente para páginas pessoais
font-familyde jeito nenhum, acho que para o usuário talvez fosse melhor se a fonte padrão padrão do navegador mudasse de serif para sans-serifA maioria dos usuários não escolhe manualmente as fontes, então não há como distinguir entre “a fonte escolhida pelo usuário” e “a fonte padrão do navegador”
Embora eu goste de serif, hoje em dia provavelmente a maioria prefere sans-serif
No meu ambiente, bloqueei páginas de definir fontes e nem instalei fontes CJK adequadas
Foi porque pensei que, mesmo se aparecessem quadrados como “4E2D” no lugar de hanzi, isso continuaria não significando mais nada para mim do que o próprio ideograma
O tratamento desse fallback de fonte foi bem feito, mas infelizmente não existe um jeito de indicar diretamente o nome da fonte padrão
Em vez disso, no JavaScript, se você olhar
getComputedStyle(document.documentElement).fontFamilyem um documento vazio, no meu caso aparece"serif"ou"sans-serif"conforme minhas configurações avançadas de fonteNão sei exatamente o que significa “fonte preferida para código”; parece estar pensando em algo além de
monospaceEste texto ainda é um rascunho, então está bem incompleto, com duas ou três formas diferentes de fragmentos misturadas e por isso meio bagunçado
Provavelmente no fim terá mais de uma página e ficará num formato bem diferente do atual, e parte dele talvez até vire caligrafia, desenho à mão e layout manual
Ultimamente, porém, estou focado em implementar uma linguagem de marcação leve, que agora já está quase utilizável, naquela sensação de que os 90% finais nunca deixam de restar
Depois disso pretendo voltar a escrever e publicar o texto
Achei realmente interessante a parte de que, ao usar
font-family: monospace;, ofont-sizepadrão pode virar 81.25% em vez de 100%, e que isso não acontece se houver uma segunda fonte na listaIsso quer dizer que
font-family: my-web-font, monospace;oufont-family: monospace, monospace;funcionam bem, mas parece que isso não está documentado no MDN no momentoFico curioso se alguém consegue explicar por que isso acontece e por que não está documentado
Então isso também acaba sendo uma causa de inconsistência entre navegadores
Mesmo sendo um rascunho, há uma repetição estranha que parece ter sido causada por copiar e colar a mesma seção uma segunda vez dentro do texto
Isso me incomodou ainda mais porque passa uma nuance de que a fonte monoespaçada de que eu gosto não é muito boa
Se você ler com atenção, ainda estou separando o que vai ficar como recomendação definitiva e o que precisa de uma posição mais sutil, então também há pequenas contradições
Fiquei curioso para saber qual é a fonte monoespaçada de que você gosta
Um motivo para evitar usar só
serifesans-serifé que a fonte serif padrão muitas vezes acaba sendo Times, o que às vezes parece ruimPor isso estou migrando a fonte do corpo de serif para sans-serif
Sobre o conselho de “não listar fontes que provavelmente já estão instaladas no sistema” e “também, no caso de monoespaçadas, usar de preferência apenas a família genérica”, no meu site deixei assim
Uso
--sans-serif: Adwaita Sans, Adwaita Sans Bundled, Inter, sans-serif;e--monospace: Iosevka, Iosevka Web, Cascadia Code, monospace;A ideia é que, se Adwaita Sans estiver instalada no GNOME, a fonte do sistema seja usada sem baixar uma webfont; se não estiver, usar a webfont
Adwaita Sans Bundled, e durante o carregamento cair em Inter esans-serif, que têm métricas parecidasPara a monoespaçada é a mesma lógica: se houver Iosevka no sistema, usa; se não houver, usa a webfont
Iosevka Web, e durante o carregamento faz fallback para Cascadia Code emonospaceTambém levei em conta que o
monospacedo Windows é Consolas, que não gosto muito, e que as versões mais novas do Windows já vêm com Cascadia Code instaladaSei que não é bom que Cascadia Code tenha métricas bem diferentes de Iosevka, mas queria saber o que acham dessa abordagem
Texto bem limpo, e eu não conhecia a dica de
monospace, monospaceComo problema menor de formatação, no meu navegador o texto do parágrafo
.unimportantaparece sobre o fundo amarelo, mas fica por trás do texto da barra fixa.status, então fica estranho quando passo rolando pela seção.unimportantAcho que algo parecido também acontece com a marca-d’água DRAFT na diagonal