em
é, simplesmente, o tamanho da fonte. Ou seja, no exemplo abaixo:
.patinho {
font-size: 15px;
padding: 2em;
}
o padding
é o mesmo que 2 * 15
. Ou seja, 30px
. mesmo sem alterar o padding
, você mudar o font-size
para 16px
, o cálculo muda para 2 * 16
, resultando em um espaçamento de 32px
.
já o **r**em
seria referente ao tamanho do font-size da raiz do elemento. ou seja, ele ignora seu próprio font-size
e usa como referência para o cálculo o font-size
do html
ou pseudo elemento :root
.
por exemplo:
html,
:root { // :root de um arquivo html é sempre html
font-size: 14px;
}
.patinho {
font-size: 15px;
padding: 2rem;
}
neste caso, por estar usando unidade de medida rem
, o padding
fará o cálculo de 2 * 14
que resultará em um espaçamento de 28px
.
.patinho {
font-size: 15px;
padding: 2em;
}
por padrão, o font-size de html
é sempre 16px
. portanto, é comum ver pessoas usando em
e rem
com múltiplos de 16
. mas, também é comum o caso abaixo:
html,
:root {
font-size: 62,5%;
}
.patinho {
font-size: 15px;
padding: 2rem;
}
neste caso, o padding
será 20px
, porque 62,5%
de 16px
(ou seja, 16 * 0.625
) é 10
. isso facilita o cálculo para o desenvolvimento, porque é mais fácil multiplicar por 10 do que por 16.
não existe certo ou errado, e sim qual você prefere
chrome://settings/fonts
). isso é importante em acessibilidademedia-query