Advertisement
  1. Web Design
  2. Typography

Entendo O Tal do Em

Scroll to top
Read Time: 9 min
This post is part of a series called A-Z of Web Typography.
Understanding Typographic Hierarchy
Getting the Hang of Hanging Punctuation

() translation by (you can also view the original English article)

Farei uma afirmação polêmica: Pixels não tem mais vez no web design. Só há um motivo para você ainda depender dos pixels - e isso se dá por você ainda não entender o em. Vamos mudar isso!

demystifying-ems-fightdemystifying-ems-fightdemystifying-ems-fight
M decorativo foi cortesia de Frances Mcleod - vencedor do TypeFight #34

Tamanho é Tudo

Ao construir sites, precisamos dizer ao navegador o quão "grande" as coisas são: "o cabeçalho será desse tamanho", "esse envólucro terá essa altura", "esse formulário será mais largo que aquilo". É assim que projetamos uma página. Os pixels sempre fizeram sentido em ser a escolha para unidade de medida: Nós estamos jogando as coisas em uma tela, então, o que mais poderíamos usar?!

Contudo, os pixels são inerentemente inflexíveis. E, no fim das contas, inflexibilidade não é legal para a web.

Problemas com Pixels

Oliver Reichenstein, há um tempo, afirmou: “A Web é 95% Tipografia”, mas levou alguns anos para as pessoas entenderem essa ideia. Conteúdo e usuários: les são nossas prioridades enquanto web designers e o design tipográfico ajuda a adequar-nos a essas prioridades.

Navegadores apresentam o texto em um tamanho padrão. No desktop, geralmente é 16px, em navegadores móveis, esse valor varia. Os usuários podem mudar esse valor, adequando-o às suas preferências.

demystifying-ems-browser-settingsdemystifying-ems-browser-settingsdemystifying-ems-browser-settings

Geralmente, os web designers usarão CSS para fixar o tamanho da fonte padrão...

demystifying-ems-font-size-12pxdemystifying-ems-font-size-12pxdemystifying-ems-font-size-12px

...prevenindo que o usuário ajuste para sua melhor experiência de leitura, tornando o conteúdo, no fim das contas, menos acessível.

A primeira lição é: devolver esse controle ao usuário. Não previna que os usuários alterem a fonte padrão, porém, garanta que você esteja preparado para esses diferenças. Defina sua fonte base para 100% do tamanho da fonte padrão do navegador:

demystifying-ems-font-size-100demystifying-ems-font-size-100demystifying-ems-font-size-100

Dessa forma, podemos continuar a trabalhar a partir daqui.

Nossa Escala Tipográfica

Ainda teremos de definir o quão grandes os elementos se apresentarão, especialmente se tivermos usado uma técnica de redefinição de CSS (CSS Reset) para remover os tamanhos padrões. Um escala modular bem típica seria mais ou menos assim:

demystifying-ems-modular-scaledemystifying-ems-modular-scaledemystifying-ems-modular-scale

Esses tamanhos tem sido usados por séculos, calculados de modo a otimizar as proporções, sem precisar manufaturar vários blocos usados na impressão. Há várias explicações matemáticas para justificar esse tipo de escala, e tenho certeza que você também achará essa escala agradável ao seus olhos.

Nós passaremos essa escala para nossa tipografia, aplicando um pouco de CSS, dessa forma:

demystifying-ems-modular-scale-pixelsdemystifying-ems-modular-scale-pixelsdemystifying-ems-modular-scale-pixels

Entretanto (como dissemos mais cedo), usar valores fixos para os pixels é inflexível, então, tentemos retificar...

Eis Que Surge O Em

O em é uma unidade de medida. Assim como os pixels, ems podem determinar o tamanho de elementos em uma página web. Diferente dos pixels, que são valores absolutos, os ems são relativos ao tamanho da fonte do seu elemento pai. É esse ponto que gera bastante confusão.

1em é igual ao valor herdado do tamanho da fonte. Se o tamanho da fonte em uma <div> for 16px, 1em dentro dessa <div> é equivalente a 16px. Se o tamanho da fonte dessa <div> muda para 20px, 1em dentro dessa <div> será equivalente a 20px.

Os ems ganharam esse nome lá no design impresso. Para ser "preciso", a primeira vez que o termo foi usado é incerto, mas, como a letra maíscula M (pronunciada eme) é a que mais se aproxima da representaçao de um bloco quadrado de impressão, o qual as letras das impressoras são dispostas, acabou emprestando seu nome para essa medida. Independente do tamanho da fonte em questão, a letra M maíscula definiria o em.

Um em, na verdade, é um pouco maior que a forma da letra em si, mas você entendeu a ideia, não é?.

demystifying-ems-1-emdemystifying-ems-1-emdemystifying-ems-1-em
Uma letra M maíuscula na fonte Calendas Plus - o quadrado ao redor tem 1em de largura e 1em de altura

Convertendo A Partir dos Pixels

Já começamos a definir nossa escala tipográfica em pixels, então, como a convertemos em ems? Um cálculo simples, que expressa o tamanho desejado do tamanho da fonte em relação ao tamanho da fonte de corpo:

demystifying-ems-equationdemystifying-ems-equationdemystifying-ems-equation

Assumindo que o tamanho da fonte de corpo seja 16px, ao tentar converter 36px <h1>, temos:

demystifying-ems-equation-resultdemystifying-ems-equation-resultdemystifying-ems-equation-result

É assim que nossa escala ficará convertida, usando o método acima:

demystifying-ems-modular-scale-emsdemystifying-ems-modular-scale-emsdemystifying-ems-modular-scale-ems

Alguns desses valores podem ficar um pouco complexos, mas não tema em ser bastante preciso com as casas decimais. Os navegadores tentarão o máximo para renderizar os valores exatos.

Dica: Geralmente, é útil criar comentários, para lembrar a você mesmo de como calculou cada um dos valores.

Problemas Com O Efeito Cascata

O maior problema que as pessoas tem com o em vem da complicação que surge do efeito cascata. Um valor em é relativo ao valor do elemento pai mais próximo, que, acidentalmente, acaba bagunçando as coisas se você não prestar atenção. Veja o CSS abaixo, que tenta formatar as âncoras e os parágrafos, igualmente:

demystifying-ems-p-ademystifying-ems-p-ademystifying-ems-p-a

Agora, veja esse pequeno e inocente trecho de código:

demystifying-ems-bieberdemystifying-ems-bieberdemystifying-ems-bieber

Como se espera, tudo aparece muito bem no navegador. Ambos parágrafo e âncora estão com mesmo tamanho, em 1.2em, relativo ao tamanho da fonte do navegador (1.2 * 16px = 19.2px).

demystifying-ems-markup-gooddemystifying-ems-markup-gooddemystifying-ems-markup-good

Porém, se adicionarmos uma segunda âncora, dentro do parágrafo, vejamos o que acontece:

demystifying-ems-markup-baddemystifying-ems-markup-baddemystifying-ems-markup-bad

A âncora dentro do parágrafo ainda está em 1.2em, mas, isso porque está em relação ao tamanho da fonte do parágrafo pai, que já é 19.2px - (1.2 * 19.2px = 23.04px). Isso gerará âncoras maiores em algumas partes de nossa página o que é, altamente, indesejável.

Nota: Itens de lista aninhados em menus de navegação são um exemplo clássico do efeito cascata saindo do controle - fique atento a isso.

A Correção

Não há uma correção para esse problema. A última coisa que você quer fazer é adicionar uma regra extra para diminuir o tamanho das âncoras de dentro dos parágrafos - é um caminho sem volta. Para manter seu CSS e HTML manuteníveis, é importante "Continuar Simples" (Keep It Simple™).

  • Deixe seu código simples e modular;
  • Defina seus ems claramente e de forma moderada - não os lance a torto e a direito pelo código;
  • Tente restringir o tamanho das fontes aos elementos tipográficos; tenha cuidado ao aplicar tamanhos de fontes a elementos estruturais;

Isso deve ajudar! Usar ems significa que você tem de pensar de verdade algumas vezes, mas, fazendo isso, forçará você a tomar a decisão correta e deixar o seu código o mais eficiente possível.

Rems

Os rems são úteis e se comportam exatamente como os ems, porém, sem o efeito cascata. Cada rem que você define é relativa ao tamanho da fonte do corpo do texto. O suporte é relativamente bom, porém, IE8 e anteriores usaram valores em pixel, como alternativa.

E Que Tal Usar Ems Em Outros Lugares?

Nós já falamos sobre a propriedade font-size do CSS; um passo considerável para aprender a usar os ems, mas, agora, vamos falar sobre a propriedade line-height. Line-height é aquela propriedade que clama para não usar valores em pixels. A altura da linha (discutida em um artigo anterior em mais detalhes) de um elemento tipográfico sempre deve ser relativo ao tamanho da fonte. Se você tem um cabeçalho, cujo tamanho é definida em ems e a line-height está definida em pixels, você pode acabar com uma sobreposição horrível e um péssimo relacionamento em geral.

Não há uma regra fixa para o quão grande a line-height pode ser, mas, 1.5 é um valor razoável a se tentar, fazendo com que a tipografia apresente-se agradavelmente legível.

demystifying-ems-line-heightdemystifying-ems-line-heightdemystifying-ems-line-height
Nesse caso, 1.5em é 1.5 * 18px que dá 27px

Dica: Dê uma olhada na sugestão de Bryan Gruhlke nos comentários, em relação ao uso de valores sem unidades para line-height.

Nota: As coisas podem ficar um pouco complicadas se você tentar setar uma linha base de grade em ems, mas isso é um tópico para outro artigo.

Elementos Estruturais

Uma vez que estiver acostumado a criar seus layouts flexíveis, em termos de tamanho de fonte, você perceberá que dependerá cada vez menos dos pixels para posicionar os elementos na página.

Se estivermos falando sobre layouts fluidos, você deve usar valores percentuais para determinar a largura de um elemento. Os pixels não devem ser usados para determinar dimensões horizontais.

Espaçamento vertical pode ser alcançado, facilmente, através dos ems. Novamente, é uma questão de ser direto com seus código e estilo. Considere restringir as margens dos seus elementos somente às do bottom, facilitando, assim, a administração do ritmo vertical.

Se precisar definir a height (que pode ser bem complicado, em layouts flexíveis), também use ems. Talvez esteja construindo uma navegação e precise definir a altura dos links do menu - eles devem crescer e diminuir com o tamanho da fonte.

Cantos arredondados em botões? Defina a propriedade border-radius usando ems, assim, tudo escala perfeitamente.

demystifying-ems-buttondemystifying-ems-buttondemystifying-ems-button
Dê uma olhada nesse Codepen para um exemplo mais visual em relação ao que estou falando

Text Shadow e box shadow funcionam do mesmo jeito.

RWD

E se você precisar mudar o tamanho de tudo sob certas circunstâncias, como em áreas de visualização (viewport) menores? Altere o tamanho da fonte base do corpo na media query apropriada (body { font-size: 90%; }) e shazam!, seu site inteiro escala assim que você apertar a tecla enter.

Exceções

Como todas as excelentes regras científicas, tem de ter uma exceção para provar. Nesse caso, sei de um excelente cenário onde, talvez, você precise usar pixels: As bordas. Se você definir a espessura das bordas (ou a altura de um linha horizontal) em ems, pode ser que ela acabe tão fina que o navegador não seja capaz de renderizá-la.

Assim, você, simplesmente, não será capaz de vê-la.

demystifying-ems-hr-demodemystifying-ems-hr-demodemystifying-ems-hr-demo
Dê uma olhada nessa demonstração

Para linhas horizontais, você talvez tenha estilos mais ou menos assim:

1
hr {
2
  height: .02em;
3
	border: none;
4
	background: white;
5
	margin: 2em 0;
6
	outline: none;
7
	display: block;
8
	clear: both;
9
	width: 100%;
10
}

Para evitar que elas desapareçam quando o tamanho da fonte for muito pequeno, você pode adicionar o seguinte código:

1
	min-height: 1px;

Um único pixel.

Infelizmente, as bordas não podem ter valores mínimos, assim, código semelhante ao de logo acima não é possível. Ao invés disso, você pode usar os valores thick, medium e thin para bordas, embora esses valores não escalem melhor que os pixels.

Conclusão

Passe a usar ems hoje! Seu conteúdo tem como base a tipografia, tenha você percebido ou não. Tornando aos pixels, converter imagens e pensar em termos de layouts fixos não é mais necessário. Comece a pensar em ems e logo esquecerá os pixels.

Se você conseguir imaginar alguma situação onde você, simplesmente, não pode usar ems, gostaria de saber dela. Deixe um comentário falando sobre!

Leitura Adicional

Seja o primeiro a saber sobre novas traduções–siga @tutsplus_pt no Twitter!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Web Design tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.