Ve a la fuente oficial
CSS Values and Units Module Level 3
El
em y el
rem toman su valor relativos a otro objeto, su diferencia está de donde lo hacen, en pocas palabras:
em toma su valor del padre inmediato
y
rem toma su valor del elemento root (html)
Para que no te rompas la cabeza con las proporciones, hay un método para que las puedas usar fácilmente
Insertar CODE, HTML o PHP:
body { font-size:62.5%; }
h1 { font-size: 2.4em; } /* =24px */
p { font-size: 1.4em; } /* =14px */
li { font-size: 1.4em; } /* =14px */
Para explicar mejor la diferencias entre
em y
rem y ejemplo
tienes el siguiente html
Insertar CODE, HTML o PHP:
<html>
<body>
<p>
<span>ejemplo</span>
</p>
</body>
</html>
css con
em te daría las siguientes medidas
Insertar CODE, HTML o PHP:
body { font-size:62.5%; }
p { font-size: 2.4em; } /* =24px */
span { font-size: 1.4em; } /* =33.6px */
css con
rem te daría las siguientes medidas
Insertar CODE, HTML o PHP:
html { font-size: 62.5%; }
body { font-size: 1rem; } /* =10px */
p { font-size: 2.4rem; } /* =24px */
span { font-size: 1.4rem; } /* =14px */
He visto que usan
rem para soportar los dispositivos con retina display (donde la resolución se duplica) y cambian solo el valor del html para duplicar el tamaño, generalmente en diseños responsivos, le llaman elastic pixels.
Puedes combinarlo con em o px para navegadores que no lo soporten
Insertar CODE, HTML o PHP:
html { font-size: 62.5%; }
body { font-size: 14px; font-size: 1.4rem; } /* =14px */
h1 { font-size: 24px; font-size: 2.4rem; } /* =24px */
Saludos...