Meu entendimento ao ler tópicos como este é que o objetivo do ems é definir todas as medidas em sua página da Web, pelo tamanho da fonte base , que pode ser definido pelo seu navegador.
Por exemplo, no Chrome, você pode fazer isso indo settings -> show advanced settings -> web content -> font size: very large
. Eu poderia fazer isso se estivesse usando um monitor grande e de alta resolução, que estivesse longe.
Eu criei um plunker que demonstra a diferença entre ems e px no dimensionamento.
#div1 {
width: 320px
}
#div2 {
width: 20em;
}
Se, no meu navegador, eu definir o tamanho da fonte como médio, essas divs terão o mesmo tamanho, o tamanho da fonte base será 16px, então 20em = 320px.
No entanto, quando altero o tamanho da fonte do navegador para muito grande, podemos ver que a div medida em ems aumentou o tamanho.
No entanto, esse efeito será negado se eu definir o tamanho da fonte na tag body, por exemplo.
body {
font-size: 16px;
}
Porque agora meu CSS está substituindo o tamanho da fonte definido pelo navegador.
Entendo que o ems teria sido importante nos dias de navegadores mais antigos, onde o zoom na página aumentaria apenas as fontes. Atualmente, porém, os navegadores modernos aumentam os pixels e as fontes, tornando o problema do zoom discutível.
Olhando ao redor da web - um monte de sites fazer o tamanho da fonte set em sua tag body.
O Estouro de pilha, por exemplo, define o tamanho da fonte como 13px na tag body. Definir o tamanho da fonte no meu navegador não afeta o layout do Stack Overflow nem um pouco.
Os resultados de pesquisa do Google não fazem isso.
(essas duas capturas de tela tiradas com tamanho de fonte do Chrome definido como muito grande e 100% de zoom).
Portanto, talvez você possa argumentar que definir o tamanho da fonte na tag body é uma má idéia, pois impede as configurações de acessibilidade do usuário. Mas, como o usuário pode aumentar o zoom para aumentar os tamanhos (o que aumentará proporcionalmente todos os pixels também) - isso não parece um problema real.
body { font-size: XYZ; }
usando uma folha de estilo do usuário combody { font-size: ZYX !important; }