Unidades de tallas

The CSS Podcast - 008: Sizing Units

La Web es un medio responsivo, pero, a veces, es necesario controlar sus dimensiones para mejorar la calidad general de la interfaz. Un buen ejemplo de esto es limitar la longitud de las líneas para mejorar la legibilidad. ¿Cómo lo harías en un medio flexible como la Web?

En este caso, puedes usar una unidad ch, que es igual al ancho de un carácter “0” en la fuente renderizada en su tamaño calculado. Esta unidad te permite limitar el ancho del texto con una unidad diseñada para ajustar el tamaño del texto, lo que, a su vez, permite un control predecible independientemente del tamaño de ese texto. La unidad ch es una de las pocas unidades que son útiles para contextos específicos, como este ejemplo.

Numbers

Los números se usan para definir opacity, line-height y hasta para los valores de canal de color en rgb. Los números son números enteros sin unidades (1, 2, 3, 100) y decimales (.1, .2, .3).

Los números tienen significado según su contexto. Por ejemplo, cuando defines line-height, un número representa una proporción si lo defines sin una unidad compatible:

p {
  font-size: 24px;
  line-height: 1.5;
}

En este ejemplo, 1.5 es igual al 150% del tamaño de fuente de píxeles calculado del elemento p. Esto significa que, si p tiene un font-size de 24px, la altura de línea se calculará como 36px.

Los números también se pueden usar en los siguientes lugares:

  • Cuando estableces valores para los filtros, filter: sepia(0.5) aplica un filtro de sepia 50% al elemento.
  • Cuando se establece la opacidad, opacity: 0.5 aplica una opacidad 50%.
  • En los canales de color: rgb(50, 50, 50), en los que los valores de 0 a 255 son aceptables para establecer un valor de color. Consulta la lección sobre colores.
  • Para transformar un elemento, transform: scale(1.2) lo escala en un 120% de su tamaño inicial.

Porcentajes

Cuando usas un porcentaje en CSS, debes saber cómo se calcula. Por ejemplo,width se calcula como un porcentaje del ancho disponible en el elemento superior.

div {
  width: 300px;
  height: 100px;
}

div p {
  width: 50%;
}

En el ejemplo anterior, el ancho de div p es 150px, suponiendo que el diseño usa el box-sizing: content-box predeterminado.

Si configuras margin o padding como un porcentaje, representarán una parte del ancho del elemento superior, independientemente de la dirección.

div {
  width: 300px;
  height: 100px;
}

div p {
  margin-top: 50%; /* calculated: 150px */
  padding-left: 50%; /* calculated: 150px */
}

En el ejemplo anterior, tanto margin-top como padding-left se calcularán como 150px.

div {
  width: 300px;
  height: 100px;
}

div p {
  width: 50%; /* calculated: 150px */
  transform: translateX(10%); /* calculated: 15px */
}

Si estableces un valor transform como un porcentaje, se basa en el elemento con el conjunto de transformaciones. En este ejemplo, p tiene un valor translateX de 10% y un width de 50%. Primero, calcula cuál será el ancho: 150px porque es el 50% del ancho de su elemento superior. Luego, toma 10% de 150px, que es 15px.

Dimensiones y longitudes

Si adjuntas una unidad a un número, se convierte en una dimensión. Por ejemplo, 1rem es una dimensión. En este contexto, la unidad que se adjunta a un número se conoce en las especificaciones como un token de dimensión. Las longitudes son dimensiones que se refieren a la distancia y pueden ser absolutas o relativas.

Largos absolutos

Todas las longitudes absolutas se resuelven en función de la misma base, lo que las hace predecibles dondequiera que se usen en tu CSS. Por ejemplo, si usas cm para ajustar el tamaño de tu elemento y, luego, lo imprimes, debería ser preciso si lo comparas con una regla. Ten en cuenta que las unidades físicas, como cm y in, no se mostrarán de forma confiable en esos tamaños en las pantallas debido a las variaciones en los tamaños de píxeles. Las unidades físicas son más adecuadas para las hojas de estilo impresas, ya que serán más confiables.

div {
  width: 10cm;
  height: 5cm;
  background: black;
}

Si imprimieras esta página, el div se imprimiría como un rectángulo negro de 10 × 5 cm. Ten en cuenta que el CSS no solo se usa para el contenido digital, sino también para aplicar diseño al contenido impreso. Las longitudes absolutas pueden ser muy útiles cuando se diseña para impresión.

Unidad Nombre Equivale a
cm Centímetros 1 cm = 96 px/2.54
mm Milímetros 1 mm = 1/10 de 1 cm
P Cuartos de milímetro 1Q = 1/40 de 1 cm
in Pulgadas 1 in = 2.54 cm = 96 px
pc Picas 1 pza. = 1/6 de 1 in
pt Puntos 1 pt = 1/72 de 1 in
px Píxeles 1 px = 1/96 de 1 in

Longitud relativa

Una longitud relativa se calcula en función de un valor base, al igual que un porcentaje. La diferencia entre estos y los porcentajes es que puedes definir tamaños en función de un tamaño base relevante, como el tamaño de fuente predeterminado o las dimensiones de la ventana. Esto significa que CSS tiene unidades como ch que usan las métricas de tamaño de la fuente como base y vw, que se basa en el ancho del viewport (la ventana de tu navegador). Las longitudes relativas son particularmente útiles en la Web debido a su naturaleza responsiva.

Unidades relativas al tamaño de la fuente

CSS proporciona unidades útiles que son relativas al tamaño de los elementos de la tipografía renderizada, como el tamaño del texto en sí (unidades em) o el ancho de los caracteres de los tipos de letra (unidades ch).

Unidad en relación con lo siguiente:
em En relación con el tamaño de la fuente, es decir, 1.5em será un 50% más grande que el tamaño de fuente calculado de su elemento superior. (históricamente, la altura de la letra mayúscula “M”).
rem Es el tamaño de fuente del elemento raíz (el valor predeterminado es 16px).
ex Heurística para determinar si se debe usar la altura x, una letra "x" o .5em en el tamaño de fuente calculado actual del elemento.
rex Es el valor ex del elemento raíz.
cap Es la altura de las letras mayúsculas en el tamaño de fuente calculado actual del elemento.
rcap Es el valor cap del elemento raíz.
ch Es el avance de caracteres promedio de un glifo estrecho en la fuente del elemento (representado por el glifo "0").
rch Es el valor ch del elemento raíz.
ic Es el avance de caracteres promedio de un glifo de ancho completo en la fuente del elemento, como se representa con el glifo "水" (ideograma de agua CJK, U+6C34).
ric Es el valor ic del elemento raíz.
lh Es la altura de línea del elemento.
rlh Valor de lh de la línea del elemento raíz.

El texto y el CSS son 10 veces mejores con etiquetas para la altura de los ascendentes, la altura de los descendentes y la altura x. La altura en X representa 1ex y el 0 representa 1ch.

Unidades relativas al viewport

Puedes usar las dimensiones del viewport (ventana del navegador) como base relativa. Estas unidades dividen el espacio disponible del viewport.

Unidad en relación con
vw 1% del ancho de la vista del puerto Las personas usan esta unidad para hacer trucos geniales con las fuentes, como cambiar el tamaño de una fuente de encabezado según el ancho de la página, de modo que, a medida que el usuario cambie el tamaño, también lo hará la fuente.
vh 1% de la altura de la viewport. Puedes usar esto para organizar elementos en una IU, por ejemplo, si tienes una barra de herramientas de pie de página.
vi 1% del tamaño del viewport en el eje intercalado del elemento raíz. El eje hace referencia a los modos de escritura. En los modos de escritura horizontal, como el inglés, el eje intercalado es horizontal. En los modos de escritura vertical, como algunos tipos de letra japoneses, el eje intercalado se extiende de arriba abajo.
vb 1% del tamaño del viewport en el eje de bloque del elemento raíz. Para el eje de bloque, esta sería la direccionalidad del idioma. Los idiomas como el inglés tienen un eje de bloque vertical, ya que los lectores en inglés analizan la página de arriba abajo. Un modo de escritura vertical tiene un eje de bloque horizontal.
vmin El 1% de la dimensión más pequeña del viewport
vmax El 1% de la dimensión más grande del viewport
div {
  width: 10vw;
}

p {
  max-width: 60ch;
}

En este ejemplo, div será el 10% del ancho del viewport porque 1vw es el 1% del ancho del viewport. El elemento p tiene un max-width de 60ch, lo que significa que no puede superar el ancho de 60 caracteres "0" en la fuente y el tamaño calculados.

Unidades alternativas relativas al viewport

El valor de las unidades relativas al viewport permanece igual, siempre y cuando el tamaño del viewport no cambie. Sin embargo, los navegadores para dispositivos móviles suelen mostrar o ocultar elementos de la IU para mostrar la mayor cantidad de contenido posible en pantallas pequeñas, sin cambiar el tamaño calculado del viewport. Puedes usar alternativas a las unidades relativas a la vista para tener en cuenta estos cambios en el área visible.

unidades equivalente a
lvw, lvh, lvi, lvb, lvmin, lvmax Unidades de viewport grandes, en relación con el espacio visible del viewport, con todos los elementos opcionales de la IU del navegador ocultos. Igual a las unidades relativas a la ventana gráfica sin variantes. No cambia, siempre y cuando no cambie el tamaño del viewport.
svw, svh, svi, svb, svmin, svmax Son unidades de viewport pequeñas, en relación con el espacio visible del viewport, con todos los elementos opcionales de la IU del navegador visibles. No cambia, siempre y cuando no cambie el tamaño del viewport.
dvw, dvh, dvi, dvb, dvmin, dvmax Son unidades de viewport dinámicas en relación con el espacio visible actual de la viewport. Se producen cambios a medida que se muestran o ocultan los elementos de la IU del navegador.

Unidades relativas al contenedor

Puedes usar las dimensiones del contenedor de un elemento como base relativa. Estas unidades dividen el espacio de contenedor disponible. Son útiles dentro de las consultas de contenedores para establecer tamaños de fuente según el espacio disponible.

unidades en relación con
cqw 1% del ancho del contenedor.
cqh 1% de la altura del contenedor.
cqi El 1% del tamaño intercalado del contenedor
cqb El 1% del tamaño del bloque del contenedor
cqmin El 1% de la dimensión más pequeña del contenedor
cqmax 1% de la dimensión más grande del contenedor

Unidades misceláneas

Hay otras unidades que se especificaron para tratar con tipos de valores particulares.

Unidades de ángulo

En el módulo de color, analizamos las unidades de ángulo, que son útiles para definir valores de grados, como el tono en hsl. También son útiles para rotar elementos dentro de las funciones de transformación.

div {
  width: 150px;
  height: 150px;
  transform: rotate(60deg);
}

Con la unidad de ángulo deg, puedes rotar un div 90° en su eje central.

div {
  background-image: url('a-low-resolution-image.jpg');
}

@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {
  div {
    background-image: url('a-high-resolution-image.jpg');
  }
}

Unidades de resolución

En el ejemplo anterior, el valor de min-resolution es 192dpi. La unidad dpi significa puntos por pulgada. Un contexto útil para esto es detectar pantallas de muy alta resolución, como las pantallas Retina en una consulta de contenido multimedia y publicar una imagen de mayor resolución.

Verifica tu comprensión

Pon a prueba tus conocimientos sobre el tamaño

¿Cuáles de las siguientes opciones son dimensiones válidas?

ux
cm
ch
ex
ui
em
8
en
px

¿En qué se diferencian las unidades absolutas y las relativas?

Una longitud absoluta se calcula en función de un solo valor base compartido, en el que una unidad relativa se compara con un valor base que puede cambiar.
Los valores absolutos no pueden cambiar, pero las unidades relativas sí

Las unidades de viewport son absolutas.

Falso
Verdadero

Recursos