Comprensión del uso de em en CSS: medidas relativas de fuente
Resumen
¿Qué es la medida relativa "em" en CSS?
La medida "em" es una unidad de longitud en CSS que se utiliza con frecuencia para especificar tamaños de fuente, márgenes y rellenos. Su característica distintiva es que depende del tamaño de fuente del elemento padre inmediato, lo que la convierte en una medida relativa que puede generar algunas situaciones confusas para los desarrolladores si no se utiliza adecuadamente.
¿Cómo se utiliza la medida "em" en CSS?
Para comprender cómo funciona "em", necesitamos explorar un ejemplo básico en el que estilizamos un texto en HTML con CSS. Supongamos que tenemos la siguiente estructura HTML:
<mainclass="text-container"><p>Soy un texto ejemplo</p><div><p>Soy otro texto</p></div></main>
Y queremos estilizarlo con CSS, específicamente con la medida "em":
.text-container{font-size:1.5em;}
Este código indica que queremos que el tamaño de fuente de .text-container sea 1.5 veces el tamaño del elemento padre "directo". En este caso, el elemento padre directo es el <html>, que generalmente tiene un tamaño de fuente predeterminado de 16 píxeles.
Ejemplo práctico de "em"
Supongamos que estamos trabajando en un proyecto CSS con las siguientes reglas:
body{font-size:20px;}.text-container{font-size:1em;/* ya no 1.5em */}.text-container div{font-size:1.5em;}
Dado el código anterior:
El <p> dentro de .text-container tendría un tamaño de fuente de 20 píxeles, ya que "em" está calculado en función del tamaño de fuente de su padre directo, body.
El <p> dentro del <div> tendría 1.5 veces el tamaño de fuente de .text-container, que sería 30 píxeles.
¿Cuáles son las confusiones comunes al usar "em"?
El uso de "em" puede ser problemático, especialmente en estructuras complejas con múltiples niveles de anidamiento de elementos, lo que puede llevar a comportamientos inesperados o no deseados en el tamaño de fuente. Un error común es asumir que todos los elementos dentro de una misma estructura heredarán el mismo tamaño de fuente cuando se usa "em", lo cual no es correcto.
El escenario donde un <div> tiene un font-size de 1.5em tomará el tamaño de fuente del padre inmediato (no ancestro), y así sucesivamente, multiplicando acumulativamente si hay anidaciones de tales situaciones.
Cómo evitar problemas con "em"
Uso cuidadoso: Asegúrate siempre de saber cuál es el elemento padre inmediato cuando usas "em", para poder prever el tamaño calculado.
Validación visual: Utiliza herramientas como el inspector de elementos del navegador para verificar rápidamente si los tamaños de fuente se comportan como esperas.
Estado inicial definido: Establece intencionadamente tamaños de base (font-size) en elementos raíz para mantener consistencia y previsibilidad.
Al final, "em" es una poderosa herramienta cuando se necesita escalabilidad y adaptabilidad en el diseño, pero es crucial comprender su dependencia del contexto para utilizarla correctamente y evitar resultados inesperados.
Mantente atento a la próxima clase, donde exploraremos "rem", la unidad que puede ofrecer una mayor consistencia y previsibilidad en tus proyectos de CSS. ¡Sigue aprendiendo y aplica estos conceptos para mejorar tus habilidades de desarrollo web!
EM = es un acronimo de elemento y lo que hace es tomar el tamaño de fuente que tenga el padre directo ejemplo:
.container{ font-size: 20px
}.container div { font-size: 2em
}
aqui los el tamaño del div que esta dentro de la clase container tenda un tamaño de 40px, ya que
.
1em = 20px
.
y como estamos asignandole 2 em seria como 20px + 20px
.
y si por ejemplo tenemos el siguiente caso :
.container{ font-size: 20px
}.container div { font-size: 2em
}.container div p { font-size:1.5em
}
a continuacion veremos que la etiqueta p tendra un tamaño de fuente de 60px
ya que toma como referencia el tamaño de su padre ( 40px ) y haria la siguiente operacion 40*1.5 que es igual a 60, es por eso que la etiqueta p tomo el valor de 60px
Buena explicación💯
Muy buen aporte
++Unidades absolutas++
Generalmente se usa el pixel "px".
h1{width: 500px;}
El problema de usar medidas absolutas es que pueden ser desproporcionadas para distintos tipos de dispositivos.
++Unidades Relativas++
*
Porcentaje
/*Ocupará todo el ancho de la pantalla sin importar el tamaño*/h1{width:100%;}
em
Depende exclusivamente del cuerpo tipográfico. Es decir del font-size de la etiqueta de su elemento padre.
Lo bueno de esta unidad es que si en un futuro modificamos el valor del font-size, entonces sus otros valores se ajustarán como podría pasar en el siguiente ejemplo de código.
p { font-size: 24px; margin-top: 1em;/* 1 x 24 = 24px */ margin-bottom: 1em;/* 1 x 24 = 24 px*/}
Lo malo, es que si lo usamos como el profesor planteó como un problema al usar em, podríamos perder la cuenta de cómo calcular el em si es que tenemos muchos elementos anidados (un elemento dentro de otro) ya que depende de su padre directo.
Si te gustó mi resumen dale me gusta y comenta, así me motivo a hacer más resúmenes ✍
Sigamos aprendiendo juntos 💪
Me encanto!, puedo sumarlo a mis notas?
@jesusrobot Claro que sí :)
Los navegadores tienen por defecto 16px de font-size en el html
Eso es correcto! Mientras no le especifiquemos otro tamaño... ese sera el tamaño por defecto para los elementos que heredan de el :D
Ese es el tamaño por defecto de los párrafos, ya que los h1, h2, etc. tienen otros tamaños por defecto (que son mas grandes).
Una utilidad que se le suele dar a em (Cuando la aplicas bien) es la de escalar una página web, es decir, simplemente cambiando el tamaño de fuente de un padre general, puedes escalar todo un sitio web con base en dicha medida y cambiando solo un valor ^^
gracias
Lo había visto pero le tenía miedo a usarlo. Gracias Master.
Justo como lo explicó Diego, las diferencias de cada uno, acá les dejo esta imagen y que la veremos también en la siguiente clase:
Super claro
Guarde la imagen en mi PC ¡Gracias!
em: va a tomar el tamaño de fuente que tenga el padre directo, o en su defecto, a su ancestro más próximo que tenga un tamaño declarado.
Asi es!
buen aporte!
Está bonito la paleta de colores que utiliza tu VSC.
Gracias por tu aporte, está muy fácil de entender las medidas EM de esta manera :).
Súper recomendado!!! El chavo lo explica de maravilla y da un ejemplo muy completo de como escalar todo un header con solo mover un valor. Puedes ver este video y saltarte las clases de EM y REM sin perderte de nada.
La verdad prefiero el método que se explica en la siguiente clase de llevar el font-size a 62.5% porque eso te permite hacer cálculos con múltiplos de 10 y así no dependes de extensiones ni necesitas tener una calculadora abierta para sacar las medidas que necesitas, pero una cosa que sí vi es el potencial de em cuando se aplica de manera correcta para escalar todo un proyecto cosa que el profesor no supo explicar muy bien en esta clase.
Pixel to Em Converter
Tengo una duda cuando debería usar div y cuando debería usar el section?
Es una muy buena pregunta Federico. Ambos son contenedores, pero <section> es un contenedor específico que sirve para contener (en español) secciones del layout, es decir tiene una funcionalidad específica, sería contra intuitivo colocar por ejemplo una imagen dentro de <section> porque para las imágenes hay una etiqueta específica. Por otro lado <div> es un contenedor genérico y sirve para aquellas cosas que colocaríamos pero que no tienen una etiqueta específica que los pueda contener. Ahora mismo tenemos muchas etiquetas (eso es positivo) y la mayor parte de esas cubren muy bien la mayoría de necesidades. Pero por ejemplo usarías section para crear un dibujo en css desde cero. Nope, lo harías con <div> chécate este blog en donde uso <div> para dibujar y me avisas. ;)
Gracias por preguntar, tenia la misma duda 👍
Así acabe después de esta clase ---> 😵💫🤯
Si quieres tener la vista del Dev tools que tiene el profe, haz click en "Show computed styles sidebar".
em = unidad de medida que toma valor por el elemento padre o mas cercano,
Ejemplo:
<div><!-- font-size: 16px --><p><!-- font-size:.5em; valor 8px r=16/2--><p><!-- font-size: 2em; valor 16px r=8*2--></p></p></div>
Asi es!
Soy muy nuevo en esto y no entiendo cuando dicen que es mala practica iutilizar la etiqueta de <div> y la utilizan alguien que me ponga en contexto. Gracias!
Es mala practica usarla si ya existe una etiqueta que haga eso.
Por ejemplo si vas a colocar un footer; es mejor usar la etiqueta de footer que div. Si no hay una etiqueta que concuerde con lo que estas haciendo, debes usar div.
Sí se puede usar y de hecho es una de las etiquetas que más se usan, el problema es que si usas solamente divs llegará un momento en el que no sabras en que parte de el proyecto andas, por ejemplo si estás haciendo un header ya existe la etiqueta para este elemento
Además el usar html semántico lo que hará es mejorar tu accesibilidad con los lectores de pantalla.
Todos asombrados con esto:
mientras tanto yo:
(⊙o⊙)
Jaja muy bueno.
como saco eso?
Si quieres que un elemento tenga 200 píxeles y el tamaño de la fuente en su contenedor es de 16 píxeles, en em tendrías que darle el valor 200 / 16 = 12.5em
Así es!!
creo que si se puede usar EM, pero hay que tener cierto nivel de habilidad respecto a la aplicación de la medida. para no tener conflictos con etiquetas superiores. es cuestión de gustos y de como se sienta cada desarrollador al trabajar.