Criando um site decente com o mínimo de CSS (2023)
(thecascade.dev)- Muitos desenvolvedores passam por problemas desnecessários por causa do excesso no design de CSS
- Só com alguns estilos globais mínimos já dá para criar páginas limpas e responsivas
- Limitar o tamanho e definir a exibição em bloco de elementos imagem, SVG e vídeo pode resolver problemas básicos de layout
- Usar a fonte system-ui, um espaçamento entre linhas adequado e limitar a largura máxima dos parágrafos melhora a legibilidade
- É necessário aplicar a propriedade color-scheme para refletir preferências do ambiente, como o modo escuro do sistema operacional
Criando um site decente com o mínimo de CSS
O problema do CSS em excesso e a abordagem proposta
- Muita gente, ao criar um site, torna o design de CSS excessivamente complexo
- Mesmo com o mínimo de CSS, já é possível criar uma página responsiva, suficientemente elegante e fiel ao básico
HTML básico e tratamento de imagens
-
Mesmo escrevendo apenas HTML básico, o site já oferece uma responsividade básica
-
Como imagens podem causar problemas de overflow no layout, aplique o CSS abaixo
img { max-width: 100%; display: block; } -
Se o mesmo tipo de problema ocorrer com elementos SVG e video, é possível ampliar a regra assim
img, svg, video { max-width: 100%; display: block; }
Melhorando a tipografia
-
A fonte padrão do navegador pode parecer sem graça do ponto de vista de design
-
Ao usar system-ui como família tipográfica, é possível aplicar a fonte padrão adequada a cada plataforma
-
Como o tamanho de fonte e o espaçamento entre linhas padrão tendem a ser um pouco pequenos, recomenda-se ajustar assim
body { font-family: system-ui; font-size: 1.25rem; line-height: 1.5; } -
Só essa configuração já traz uma grande melhora em relação aos valores padrão do navegador
Suporte a modo escuro
-
Como muitos usuários preferem o modo escuro, é útil aplicar a propriedade color-scheme para seguir a configuração do sistema operacional
html { color-scheme: light dark; } -
Essa propriedade faz com que os estilos do user agent reflitam automaticamente o tema preferido do sistema
-
Também é possível defini-la como atributo na tag HTML
<html lang="en" color-scheme="light dark"></html> -
Além da preferência do sistema, também é uma boa prática permitir que o usuário escolha diretamente o esquema de cores
Limitação da largura do conteúdo
-
O comprimento dos parágrafos de conteúdo é um fator importante que afeta bastante a legibilidade
-
Em geral, o ideal é configurar o texto principal para aparecer com 45 a 90 caracteres por linha
-
Como abaixo, é possível melhorar a legibilidade dos parágrafos limitando a largura máxima do elemento
mainmain { max-width: min(70ch, 100% - 4rem); margin-inline: auto; } -
A função
min()escolhe o menor valor entre70che100% - 4rem -
Com
margin-inline: auto, o conteúdo fica centralizado horizontalmente -
Se necessário, em vez de
main, também é possível usar classes como .container ou .wrapper
Exemplo final de CSS mínimo
-
Reunindo os pontos acima, é possível montar um site estável com o seguinte conjunto mínimo de CSS
html { color-scheme: light dark; } body { font-family: system-ui; font-size: 1.25rem; line-height: 1.5; } img, svg, video { max-width: 100%; display: block; } main { max-width: min(70ch, 100% - 4rem); margin-inline: auto; }
Encerramento e possibilidade de expansão
- O exemplo acima pode ser usado imediatamente como ponto de partida leve ou em páginas pequenas
- Na maioria dos casos, o ideal é expandi-lo adicionando estilos extras sobre essa base
1 comentários
Comentários no Hacker News
https://infinnie.github.io/blog/2017/systemui.html
stda fonte é tão feia que não quero receber conselhos de fonte desse sitemax-width? O público-alvo é todo mundo que faz uma homepage pessoalIsso está errado. A sintaxe correta é
O autor do texto escreveu corretamente em alguns exemplos, mas errou no primeiro exemplo, o que pode causar confusão
desse jeito. Como tanto
timesquantoTimes New Romanfuncionam bem sem aspas, fico na dúvida se isso é uma exceção por ser uma fonte antiga ou se o CSS é permissivo na correspondência dos nomesIsso aí eu só quero chamar de dinheiro em cache
https://meyerweb.com/eric/books/
content-width, fonte grande e line-height alto. Muitos sites hoje usam fontes grandes demais e espaçamento entre linhas amplo demais, o que aumenta muito a rolagem. O tamanho de fonte padrão do navegador já se encaixa bem ao sistema, então é melhor manter esse tamanho e deixar o zoom cuidar do restoimg { max-width: 100%; }Essa configuração precisa ser usada junto com
height: auto. Caso contrário, a proporção da imagem quebraimg, svg, video { max-width: 100%; }No Chrome 141, por causa de um problema de width/height em elementos SVG aninhados, o cálculo de auto sai errado. Como solução temporária, é preciso tratar com
svg:where(:not(svg svg))A fonte
system-uinão é apenas um substituto simples parasans-serif. Se você usar fonte de UI do sistema no corpo do conteúdo, em algumas combinações de sistema operacional/idioma isso pode ficar quase ilegível de tão desconfortável. Se você precisa desans-serif, o certo é usarsans-serifO tamanho de fonte padrão é um pouco pequeno, então algo em torno de 18~20px (
1.25rem) parece adequado. Mas em telas pequenas, é melhor não passar de1remRecomenda-se
line-heightpadrão de 1.5~1.7, mas 1.7 é amplo demais em telas pequenas. Algo entre 1.4~1.5 é adequado, e pode ser ajustado de 1.4~1.6 conforme o tamanho da telafont-family: System UI;Isso é um erro de sintaxe evidente. Basta revisar a stylesheet para perceber rapidamente
Separar o tema escuro/claro do sistema e o tema da web é uma boa ideia. O Firefox, por padrão, já faz o conteúdo seguir o tema do sistema, e isso também pode ser ajustado separadamente
main { max-width: min(70ch, 100% - 4rem); margin-inline: auto; }Isso significa uma margem mínima de cerca de 2rem (somando a margin padrão do body, vira 2rem+8px). Há espaço demais, e o local onde isso é aplicado também fica estranho. Se for aplicar no
main, faz mais sentido usar padding, assimMas, na prática,
headerefootertambém precisam do mesmo espaço lateral, então faz mais sentido ajustar a margem dobodyAssim, dá para reduzir o espaço lateral de ~40px para algo na faixa de 16px