Las unidades de medida establecen una longitud para un determinado elemento o tipografía. Existen dos tipos de medidas: absolutas y relativas.
Qué son las medidas absolutas
Las medidas absolutas son valores fijos, por lo que la medida no cambiará. La unidad absoluta más utilizada son los píxeles px, las demás son muy poco utilizadas, pero es bueno que las conozcas.
Unidad
Nombre
Equivalencia
px
píxeles
1 px = 1/96 in
cm
centímetros
1 cm = 96/2.54 px
mm
milímetros
1 mm = 1/10 cm
Q
cuartos de milímetros
1 Q = 1/4 mm
in
pulgadas
1 in = 2.54 cm = 96 px
pc
picas
1 pc = 1/6 in
pt
puntos
1 pt = 1/72 in
Qué son las medidas relativas
Las medidas relativas son valores variables, por lo que la medida depende de un valor externo. Se debe tener en cuidado con estas porque un pequeño cambio puede desencadenar tamaños muy elevados.
Unidad
Depende de
em
el elemento que lo contiene
rem
el elemento raíz
vw
1% del ancho de la pantalla (view width)
vh
1% de la altura de la pantalla (view height)
vmin
1% de la dimensión más pequeña de la pantalla
vman
1% de la dimensión más grande de la pantalla
ch
anchura del caracter ""0"" del elemento que lo contiene
lh
altura de la línea del elemento que lo contiene
Diferencia entre rem y em
La medida em depende del elemento que lo contiene, es decir, si un elemento tiene font-size de 20px, el valor de em es igual a 20px, el valor de 2em será de 40px y así sucesivamente.
La medida rem depende del elemento raíz, el valor del font-size del elemento raíz es de 16px, por lo tanto, el valor de 2rem es igual a 32px, y así sucesivamente.
Diferencia entre porcentajes y la anchura y altura de la pantalla
Los porcentajes representan el tamaño con respecto al total del elemento padre. Si el elemento padre tiene 20px, entonces el 100% será de 20px.
Por otra parte, las medidas de anchura vw y altura vh representan el tamaño con respecto al total de la pantalla. Si el elemento tiene un tamaño de 100vw será el 100 por ciento de la pantalla.
Si un elemento tiene todo el tamaño de la pantalla, entonces solamente en ese punto la medida 100% será igual a 100vw o 100vh.
Problema con las medidas de texto
Los navegadores tienen una opción para cambiar el tamaño del texto. Con medidas absolutas, el tamaño de la letra no cambiará, por lo que será un problema para el usuario.
Con medidas relativas, el tamaño cambiará con respecto a la fuente del elemento raíz. Por lo que estas son una buena opción para solucionar este problema de accesibilidad, en específico la medida rem.
Sin embargo, la medida rem equivale a 16px y puede ser confuso mientras utilices valores altos. Por lo que vamos a cambiar el valor del elemento de la raíz para que la medida rem sea igual a 10px.
En la etiqueta <html> cambia el valor de la propiedad font-size a 62.5%, resultado de una regla de tres: si 16px es igual al 100% entonces cuál será el porcentaje para 10px.
html{font-size:62.5%;}
Con este cambio, la medida rem será igual a 10px, ahora los puedes utilizar sin problema y tus textos cambiarán según las preferencias de usuario.
Contribución creada por Andrés Guano (Platzi Contributor).
👀 Hay un dilema donde algunas personas dicen que los px no deberían ser medidas absolutas porque dependen del DPI de la pantalla, aclaremos esto 👇:
.
Cuando hablamos de "medidas fijas" o "estáticas" nos referimos a que esta medida siempre va a medir lo mismo es una misma pantalla (sin importar su DPI). No en todas las pantallas 1px mide lo mismo, de hecho incluso cuando hacemos zoom el tamaño de ese píxel se modifica (mide más de 1px, aunque le hayamos puesto 1px).
.
☝ Entonces aclarando esta duda, hablamos de medidas estáticas cuando es una medida que, en una misma pantalla, siempre medirá lo mismo, sin depender de nadie.
.
Las medidas relativas dependen de algo para poder calcular su medida, por ejemplo, los porcentajes dependen del elemento padre, los emrem dependen del font-size, los vw y vh dependen del tamaño del viewport.
.
Básicamente esa es la diferencia entre medidas relativas y absolutas, de nuevo, ninguna es mejor que otra y todas tienen sus casos de uso 👀
Personalmente trato de usar rem para los tamaños de letra y px para lo demás. Aunque he visto que algunos prefieren usar px en todo.
Vi un post de Lupita Code en Twitter diciendo eso mismo
Excelente resumen de lo aprendido en la clase ✨
El bug de Safari con vh
.
Investigando sobre el comportamiento de vh en distintos navegadores que menciona la profe, encontré algo interesante.
Resulta que varios frontends se toparon con problemas en los iphones cuando intentan ocupar el 100% del viewport. Resulta que parte de su contenido se oculta detrás de la barra inferior del teléfono.
.
Para afrontar este problema, surgieron varias propuestas. Sin embargo, la solución de Matt Smith me pareció muy elegante. El propone indicar el valor -webkit-fill-available además del 100vh de esta manera...
body { min-height: 100vh;/* mobile viewport bug fix */ min-height:-webkit-fill-available;}html {height:-webkit-fill-available;}
Pueden leer más de este bug en este post.
Aquí encuentran el artículo de la propuesta de Matt.
Gracias
Excelente aporte hermano!
Medidas Absolutas
Es la unidad de medida que no va a cambiar sin importar el tamaño de la pantalla.
Una unidad absoluta puede ser los píxeles.
p{font-size:18px;}
Medidas Relativas
Estás si pueden cambiar en relación con el dispositivo que lo estamos viendo.
Las unidades relativas pueden ser porcentajes, em (elemento), rem (root em o root elemento), max-width, max-height, min-width, min-height. Estas últimas varían basándonos en el tamaño de la pantalla.
EM es un acrónimo de elemento, va a tomar el tamaño de fuente que tenga el padre directo.
Por default un em es 16px que es de la etiqueta html.
Ejemplo
Yo al colocar 1.5em al tamaño de fuente de un elemento, este elemento pasa a tener un tamaño 50% más grande que la fuente que tiene el padre directo. Esto pasa cada vez que usamos la medida relativa em, los hijos toman como medidas de referencia las medidas que tiene su padre directo y esto puede causar confusiones.
EM no es de las mejores medidas.
REM
Esta medida relativa siempre va a tener referencia o correlación con el estilo que tenga la etiqueta root o el root de nuestro proyecto, que siempre es nuestra etiqueta html.
Por defecto el navegador le da a la etiqueta html un font-size de 16px.
Aun que coloquemos textos anidados veremos que no tendremos ningún cambio como pasaba antes con la medida em.
REM es menos confuso que EM.
Truco para usar rem
Debemos setear nuestra etiqueta html de la siguiente forma:
html{font-size:62.5%;}
Con esto estamos estableciendo un tamaño de 10px al tamaño de fuente.
vw
Lo que hace esta unidad relativa es que toma como referencia el tamaño del viewport o pantalla.
vh
Lo que hace esta medida relativa es que toma como referencia el alto del viewport o pantalla.
Min-width y max-width
Una regla impórtate cuando los usamos es que necesitamos tener un width base que casi siempre es en porcentajes.
Lo que sude con estos dos que limitan el crecimiento del contenedor (max-width) o la reducción del contenedor (min-width). Una vez que llegue al límite que establecemos este contenedor deja de crecer o reducirse.
En este caso el selector crece como máximo hasta los 500 px y se reduce como máximo hasta los 320 px.
En este caso no necesitamos un height base. Se utiliza para evitar problemas de overflow.
Con min-height estamos diciendo que la altura mínima del contenedor va a ser X, pero si tiene contenido que exceda esa altura mínima que se expanda hasta donde el contenido deje de crecer.
Con max-height limitamos cuanto puede crecer el contenedor a lo alto.
Buenas prácticas
Es buena práctica utilizar el rem y em.
No es buena práctica tener un scroll horizontal en dispositivos mobiles.
Estilos que siempre debe estar al comienzo de nuestro archivo.css
Lo mejor es que valla en el body lo que es el reseteo de margin y el padding, y en la universal solor el box-sizing : PORQUE, si estamos utilizando css grid en un proyecto tambien se nos resetea el grid, y va a quedar en cero por eso es recomendado poner en el body el Margin y el Padding 👍🏼
gracias!
Esta es una opción más explícita del cálculo realizado y funciona 😄
html { font-size:calc((100%*10)/16);}
Messirve!, Gracias
soy tu fan
Valió la pena endeudarme para pagar la suscripción, buenas explicaciones. Gracias.
Con suerte sales de esa deuda rápido
la membresia cuesta muy poco ¿como te ha ido en estos 7 meses?
Esto también te lo mencionan en el curso Definitivo de HTML y CSS. La verdad es que con ese curso y este complementas mucho los conocimientos de estos dos lenguajes.
gracias!
Concuerdo contigo, el profe De Granda también explica esta parte y de manera más simple
Chrome/Safari vs Firefox/IE
Encontré una pregunta muy bien elaborada en stackoverflow al respecto. Brevemente dice que chrome y safari resuelven los porcentajes para el alto, en ítems flex, basados en el valor height del padre. Firefox y IE prioriza la propiedad heightde los padres.
Es como un trabalenguas, pero en la primera respuesta, la persona lo explica muy bien.
Si no quieres que se haga scroll del contenedor al usar vh o vw por los márgenes establecidos por el navegador, lo mejor siempre es resetear esto al inicio con el selector universal:
*{ box-sizing: border-box;margin:0;padding:0;}
Ese snipet es muy util, y deberia ser lo primero que uno ponga en los estilos CSS de un proyecto
Muy buen aporte! Partir de esta base para evitar conflictos en la visualización, y luego uno ya va colocando a la medida los márgenes, bordes y rellenos
ya lo tenemos en el pdf
llevo todo el curso buscando ese pdf de donde lo obtengo?
NO sabia que podías manipular de esa forma el valor de 1rem, excelente dato y muy util.
podemos normalizar el html con un archivo css muy popular llamado normalize.css asi mismo lo pueden buscar en google, eso ayudara a tener la misma apariencia en todos los navegadores
Hola compañero, El archivo normalize al colocarlo en el css evita que yo me ponga hacer esos calculos?
Hola, no evita que hagas los calculos, pero formatea los estilos por defecto de html, para que se vean igual en todos los navegadores
Usando 62.5% como el tamaño de rem y viendo en 2 navegadores diferentes (Edge y OperaGX) he podido comprobar que poseen el mismo tamaño predeterminado (16px), ya que he abierto el mismo archivo y poniendo los navegadores del mismo tamaño para evitar cualquier error posible, por consiguiente el alto también es el mismo ya que use 15 rem para los cuadraditos del archivo. Perdón por no poder comprobar en Safari, no tengo Mac :( .
Excelente ejercicio, gracias por compartir tus resultados. 👍🏻
Excelente.
Está genial la imagen, ¡Gracias por tu aporte! 👏
¡Gracias! Lo adjunto a mis notas :smile
¿Cómo funciona el VH en los diferentes navegadores?
Soporte en los distintos navegadores
Basándonos en la información mostrada en Can I use ( https://caniuse.com/viewport-units), podemos observar que la mayoría de los navegadores soportan estas unidades. Igualmente se pueden encontrar algunos bugs e irregularidades que debemos tener en cuenta al momento de usar estas unidades. Por ejemplo, IE9 ( En Internet Explorer9 ) soporta vm en vez de vmin y los exploradores IE10+/Edge no soportan vmax.
Algunas irregularidades son:
En Internet Explorer9 dentro de un iframe, las unidades se calcularan en el contexto de área de la ventana y no del iframe.
Internet Explorer9 no calcula las unidades correctamente cuando el explorador o sistema operativo esta ampliado.
En Internet Explorer 10 y 11 cuando se usan las unidades vw con 3D Transform puede generar extraños comportamientos.
iOS 7 Safari recalcula anchos establecidos en vh como vw, y altos en vw como vh, cuando la orientación cambia.
Internet Explorer 9 en print-mode interpreta vh como paginas. 30vh= 30paginas
Chrome, Safari & iOS Safari (ambos 6 y 7) no soporta estas unidades en anchos de bordes, valores de transform, sombras.
En Firefox hay un bug documentado donde 100vhno tiene efecto alguno cuando su disposición sea establecido como display:table.
Los em toman el tamaño de si padre directo.
.
Los rem siempre tienen la referencia al tamaño de fuente en el root de css.
.
vh y vw se refieren a todo el espacio y se usan de 0-100vh o 0-100vw.
ahorita conseguí un trabajo de front end gracias a este curso y es curioso que muchos de los lineamientos que siguen casi siempre se guían por porcentajes dentro de la pantalla, muy pocas veces utilizo rem espero eso cambie pronto
Y no se puede directamente poner un font-size: 10px al html?
Excelente pregunta, Victoria ! En teoría funcionan igual, el problema radica cuando algún usuario tenga alguna configuración de píxeles (sea de navegador o de dispositivo) que deba respetarse.
Pensé exactamente lo mismo, es como lo más lógico! Pero vea hasta lo más lógico no es la solución. :(
Las unidades se dividen en dos grupos: absolutas y relativas. Básicamente las unidades absolutas definen su valor de forma concreta y determinada, por ejemplo el centímetro.
En cambio las medidas relativas lo hacen tomando otro elemento de referencia y a veces su contexto. En el caso del porcentaje, por ejemplo, cuando se indica sobre el valor width, éste se toma respecto del elemento contenedor.
Es decir que, si tengo un contenedor que mide un ancho máximo de 1000 px y dentro coloco una <div> con un ancho de 25%, esta medida se tomará respecto de los 1000 px del contenedor, por lo tanto, en principio medirá 250px, pero si el contenedor se achica se achicará también.
Es una muy buena practica el use de rem para el font-size de nuestra pagina o aplicación web, básicamente por el tema de la accesibilidad, muchas personas no cuentan con una visión muy buena y tienen que agrandar las letras del navegador para poder ver bien las letras, sin embargo con el uso de pixeles (px) no se va a notar ningún cambio, debido a que es una medida que siempre va a tener su tamaño original.