The CSS Podcast - 036: Text & Typography
El texto es uno de los componentes básicos de la Web.
Cuando creas un sitio web, no es necesario que apliques diseño a tu texto. En realidad, el HTML tiene algunos diseños predeterminados bastante razonables.
Sin embargo, es probable que el texto represente la mayor parte de tu sitio web, por lo que vale la pena agregar algunos estilos para mejorarlo. Si cambias algunas propiedades básicas, puedes mejorar significativamente la experiencia de lectura para tus usuarios.
En este módulo, comenzaremos con la regla @font-face
, que te permite importar fuentes personalizadas a tus páginas web. Esto garantiza que tengas la tipografía exacta que necesitas, independientemente de las fuentes instaladas por el usuario.
Luego, analizaremos las propiedades de fuente de CSS esenciales, como font-family
, font-style
, font-weight
y font-size
. Estos conceptos básicos preparan el terreno para manipular el texto en función del estilo y la legibilidad.
También trataremos las propiedades específicas de los párrafos, como text-indent
y word-spacing
, antes de concluir con temas avanzados, como las fuentes variables y los pseudoelementos, que definen aún mejor tu control tipográfico.
Se proporcionarán ejemplos y sugerencias prácticos para consolidar tu comprensión y aplicación de estas técnicas de CSS.
La regla @font-face
La regla de at de CSS @font-face
es fundamental en el diseño web, ya que te permite especificar y usar fuentes personalizadas para mostrar texto. Lo bueno de @font-face
es su versatilidad: te permite obtener fuentes desde un servidor remoto o desde una fuente instalada en el dispositivo del usuario.
Sintaxis
@font-face {
font-family: "Trickster";
src:
local("Trickster"),
url("trickster-COLRv1.otf") format("opentype") tech(color-COLRv1),
url("trickster-outline.otf") format("opentype"),
url("trickster-outline.woff") format("woff")
}
Descriptores
ascent-override
- Personaliza la métrica de ascenso, lo que afecta el espacio por encima del valor de referencia.
descent-override
- Ajusta la métrica de descenso, lo que afecta el espacio debajo del modelo de referencia.
font-display
- Controla el comportamiento de visualización de la fuente según su estado de descarga.
font-family
- Asigna un nombre a la fuente para usarla en propiedades relacionadas con la fuente.
font-stretch
- Establece un escalamiento horizontal aceptable, especificado como un solo valor o rango.
font-style
- Define el estilo de fuente y admite rangos de ángulos para los estilos oblicuos.
font-weight
- Determina el grosor de la fuente o el rango de grosores disponibles.
font-feature-settings
- Habilita el acceso a las funciones de la fuente OpenType.
font-variation-settings
- Proporciona un control más preciso sobre la configuración de fuentes variables.
line-gap-override
- Anula el espacio entre líneas predeterminado de la fuente.
size-adjust
- Aplica un factor de escala al contorno y las métricas de la fuente.
src
- Define la fuente de la fuente, ya sea local o remota. Esto es obligatorio para la regla
@font-face
. Combinarurl()
ylocal()
dentro desrc
es una estrategia común que usa una fuente local si está disponible y vuelve a un archivo de fuente remoto como resguardo. Los navegadores priorizan los recursos en función del orden de la declaración, de manera quelocal()
debería preceder aurl()
. unicode-range
- Limita los caracteres para los que se debe usar esta fuente.
Descripción
@font-face
libera a los diseñadores de las restricciones de las fuentes “aptas para la Web” permitiéndoles usar tipografía personalizada. La capacidad de la función local()
para buscar una fuente en el dispositivo del usuario ofrece una experiencia fluida que no depende necesariamente de una conexión a Internet.
Tipos de MIME de la fuente
Formato | Tipo de MIME |
---|---|
TrueType | font/ttf |
OpenType | font/otf |
Formato de fuente abierta web | font/woff |
Web Open Font Format 2 | font/woff2 |
Diferencia entre @font-face y font-family
En CSS, @font-face
y font-family
a menudo se confunden, pero tienen distintos propósitos.
Como ya mencionamos, @font-face
es una regla que se usa para definir las fuentes personalizadas que quieres usar en tu aplicación web. Le indica al navegador dónde descargar la fuente, cómo mostrarla durante la carga (con la propiedad font-display
) y especifica qué subconjunto de caracteres descargar (con unicode-range
).
Por el contrario, font-family
es una propiedad CSS que se usa dentro de una regla CSS para asignar una fuente en particular o una lista de fuentes a un elemento. Las fuentes incluidas en font-family
pueden ser seguras para la Web, fuentes del sistema o fuentes personalizadas definidas con @font-face
.
En resumen, @font-face
declara una fuente y le asigna un nombre, y font-family
aplica esta fuente declarada a los elementos HTML.
Este es un ejemplo de cómo usar ambos:
<table>
<thead>
<tr>
<th><p><pre>
@font-face {
font-family: "CustomFont";
src: url("customfont.woff2") format("woff2");
}
body {
font-family: "CustomFont", Arial, sans-serif;
}
En este ejemplo, @font-face
define "CustomFont" y le indica al navegador dónde encontrarlo. Luego, la propiedad font-family
la aplica al elemento body, con Arial como resguardo si “CustomFont” no está disponible.
Cambia el tipo de letra
Usa font-family
para cambiar el tipo de letra de tu texto.
La propiedad font-family
acepta una lista de cadenas separadas por comas, que hagan referencia a familias de fuentes específicas o genéricas. Las familias de fuentes específicas son cadenas con comillas, como "Helvetica", "EB Garamond" o "Times New Roman". Las familias de fuentes genéricas son palabras clave, como serif
, sans-serif
y monospace
(consulta la lista completa de opciones en MDN). El navegador mostrará el primer tipo de letra disponible de la lista proporcionada.
Cuando uses font-family
, debes especificar al menos una familia de fuentes genérica en caso de que el navegador del usuario no tenga tus fuentes preferidas. En general, la familia de fuentes genéricas de resguardo debe ser similar a tus fuentes preferidas: si usas font-family: "Helvetica"
(una familia de fuentes Sans Serif), tu resguardo debe ser sans-serif
para que coincida.
Usa fuentes cursivas y oblicuas
Usa font-style
para establecer si el texto debe estar en cursiva o no. font-style
acepta una de las siguientes palabras clave: normal
, italic
y oblique
.
Aplicar negrita al texto
Usa font-weight
para establecer la “negrita” del texto. Esta propiedad acepta valores de palabras clave (normal
, bold
), valores de palabras clave relativos (lighter
, bolder
) y valores numéricos (de 100
a 900
).
Las palabras clave normal
y bold
son equivalentes a los valores numéricos 400
y 700
, respectivamente.
Las palabras clave lighter
y bolder
se calculan en relación con el elemento superior. Consulta Signing of Relative Weights de MDN para obtener un gráfico útil que muestra cómo se determina este valor.
Cómo cambiar el tamaño del texto
Usa font-size
para controlar el tamaño de los elementos de texto. Esta propiedad acepta valores de longitud, porcentajes y algunos valores de palabras clave.
Además de los valores de longitud y porcentaje, font-size
acepta algunos valores de palabras clave absolutos (xx-small
, x-small
, small
, medium
, large
, x-large
, xx-large
) y algunos valores de palabras clave relativos (smaller
, larger
). Los valores relativos se relacionan con el font-size
del elemento superior.
Cambiar el espacio entre las líneas
Usa line-height
para especificar la altura de cada línea en un elemento. Esta propiedad acepta un número, una longitud, un porcentaje o la palabra clave normal
. Por lo general, se recomienda usar un número en lugar de una longitud o un porcentaje para evitar problemas con la herencia.
Cambia el espacio entre caracteres
Usa letter-spacing
para controlar la cantidad de espacio horizontal entre los caracteres del texto. Esta propiedad acepta valores de longitud, como em
, px
y rem
.
Ten en cuenta que el valor especificado aumenta la cantidad de espacio natural entre los caracteres. En la siguiente demostración, selecciona una letra individual para ver el tamaño del letterbox y cómo cambia con letter-spacing
.
Cambiar el espacio entre palabras
Usa word-spacing
para aumentar o disminuir la longitud del espacio entre cada palabra del texto. Esta propiedad acepta valores de longitud, como em
, px
y rem
. Ten en cuenta que la longitud que especifiques es para espacio adicional además del espaciado normal. Esto significa que word-spacing: 0
es equivalente a word-spacing: normal
.
Abreviatura de font
Puedes usar la propiedad abreviada font
para establecer muchas propiedades relacionadas con la fuente a la vez. La lista de propiedades posibles es font-family
, font-size
, font-stretch
, font-style
, font-variant
, font-weight
y line-height
.
Consulta el artículo font
de MDN para obtener información específica sobre cómo ordenar estas propiedades.
Cómo cambiar mayúsculas y minúsculas
Usa text-transform
para modificar las mayúsculas del texto sin necesidad de cambiar el código HTML subyacente. Esta propiedad acepta los siguientes valores de palabras clave: uppercase
, lowercase
y capitalize
.
Agrega subrayados, versalitas y líneas horizontales al texto
Usa text-decoration
para agregar líneas al texto. El subrayado es el más utilizado, pero puedes agregar líneas sobre el texto o a lo largo de él.
La propiedad text-decoration
es una abreviatura de las propiedades más específicas que se detallan a continuación.
La propiedad text-decoration-line
acepta las palabras clave underline
, overline
y line-through
. También puedes especificar varias palabras clave para varias líneas.
La propiedad text-decoration-color
establece el color de todas las decoraciones de text-decoration-line
.
La propiedad text-decoration-style
acepta las palabras clave solid
, double
, dotted
, dashed
y wavy
.
La propiedad text-decoration-thickness
acepta cualquier valor de longitud y establece el ancho del trazo de todas las decoraciones de text-decoration-line
.
La propiedad text-decoration
es un atajo para todas las propiedades anteriores.
Agrega una sangría al texto
Usa text-indent
para agregar un sangría a tus bloques de texto. Esta propiedad toma una longitud (por ejemplo, 10px
, 2em
) o un porcentaje del ancho del bloque contenedor.
Cómo controlar el contenido oculto o desbordado
Usa text-overflow
para especificar cómo se representa el contenido oculto. Hay dos opciones: clip
(la predeterminada), que trunca el texto en el punto de desbordamiento, y ellipsis
, que muestra una elipsis (…) en el punto de desbordamiento.
Controla el espacio en blanco
La propiedad white-space
se usa para especificar cómo se deben controlar los espacios en blanco de un elemento. Para obtener más información, consulta el artículo white-space
en MDN.
white-space: pre
puede ser útil para renderizar arte ASCII o bloques de código con sangría cuidadosa.
Controla cómo se dividen las palabras
Usa word-break
para cambiar la forma en que se deben “dividir” las palabras cuando se desbordan en la línea. De forma predeterminada, el navegador no divide las palabras. Si usas el valor de palabra clave break-all
para word-break
, se le indicará al navegador que divida las palabras en caracteres individuales si es necesario.
Cómo cambiar la alineación del texto
Usa text-align
para especificar la alineación horizontal del texto en un bloque o elemento de celda de tabla. Esta propiedad acepta los valores de palabras clave left
, right
, start
, end
, center
, justify
y match-parent
.
Los valores left
y right
alinean el texto a la izquierda y a la derecha del bloque, respectivamente.
Usa start
y end
para representar la ubicación del comienzo y del final de una línea de texto en el modo de escritura actual. Por lo tanto, start
se asigna a left
en inglés y a right
en la escritura árabe, que se escribe de derecha a izquierda (RTL). Son alineaciones lógicas. Obtén más información en nuestro módulo de propiedades lógicas.
Usa center
para alinear el texto en el centro del bloque.
El valor de justify
organiza el texto y cambia los espacios entre palabras automáticamente para que el texto se alinee con los bordes izquierdo y derecho del bloque.
Cómo cambiar la dirección del texto
Usa direction
para establecer la dirección del texto, ya sea ltr
(de izquierda a derecha, el valor predeterminado) o rtl
(de derecha a izquierda). Algunos idiomas, como el árabe, el hebreo o el persa, se escriben de derecha a izquierda, por lo que se debe usar direction: rtl
. Para inglés y todos los demás idiomas que se escriben de izquierda a derecha, usa direction: ltr
.
Cambia el flujo del texto
Usa writing-mode
para cambiar la forma en que se organiza y fluye el texto. El valor predeterminado es horizontal-tb
, pero también puedes establecer writing-mode
en vertical-lr
o vertical-rl
para el texto que deseas que fluya horizontalmente.
Cambia la orientación del texto
Usa text-orientation
para especificar la orientación de los caracteres en el texto. Los valores válidos para esta propiedad son mixed
y upright
. Esta propiedad solo es relevante cuando writing-mode
se configura en un elemento que no sea horizontal-tb
.
Cómo agregar una sombra al texto
Usa text-shadow
para agregar una sombra al texto. Esta propiedad espera tres longitudes (x-offset
, y-offset
y blur-radius
) y un color.
Consulta la sección text-shadow
de nuestro módulo sobre sombras para obtener más información.
Fuentes variables
Por lo general, las fuentes "normales" requieren la importación de diferentes archivos para las diferentes versiones del tipo de letra, como negrita, cursiva o condensada. Las fuentes variables son fuentes que pueden contener muchas variantes diferentes de un tipo de letra en un solo archivo.
Consulta nuestro artículo sobre fuentes variables para obtener más información.
Pseudoelementos
Pseudoelementos ::first-letter
y ::first-line
Los seudoelementos ::first-letter
y ::first-line
se orientan a la primera letra y la primera línea de un elemento de texto, respectivamente.
Seudoelemento ::selection
Usa el seudoelemento ::selection
para cambiar la apariencia del texto que selecciona el usuario.
Cuando se usa este pseudoelemento, solo se pueden usar ciertas propiedades de CSS: color
, background-color
, text-decoration
, text-shadow
, stroke-color
, fill-color
y stroke-width
.
font-variant
La propiedad font-variant
es un atajo para varias propiedades CSS que te permiten elegir variantes de fuente, como small-caps
y slashed-zero
. Las propiedades CSS que incluye esta abreviatura son font-variant-alternates
, font-variant-caps
, font-variant-east-asian
, font-variant-ligatures
y font-variant-numeric
. Consulta los vínculos de cada propiedad para obtener más detalles sobre su uso.
Verifica tu comprensión
Pon a prueba tus conocimientos sobre la tipografía en la Web
¿Cuál de las siguientes palabras clave se puede usar como un resguardo genérico de font-family
?
sci-fi
helvetica
serif
italic
sans-serif
monospace
¿Qué sentencia se usa para convertir la primera letra de cada palabra en mayúscula? p. ej., This is a sentence.
➡ This Is A Sentence.
font-style: capitals;
text-case: capitalize;
font-variant: capitalize;
text-capitalize: true;
text-transform: capitalize;
Verdadero o falso: Usa text-orientation
para alinear el texto a la izquierda, a la derecha o en el centro.
¿Qué propiedad CSS se puede usar para cambiar el espacio entre líneas de texto?
baseline-distance
line-spacing
leading
line-height
Recursos
- En Prácticas recomendadas para fuentes, se analizan la importación de fuentes, la renderización de fuentes y otras prácticas recomendadas para usar fuentes en la Web.
- Texto y estilo de fuente fundamentales de MDN.