HDP115

Fuentes en CSS

Aprende a trabajar con fuentes en CSS, desde las propiedades básicas hasta técnicas avanzadas como fuentes web, variables y optimización.

CE

Cristian Escalante

Última actualización: 7 de abril de 2025

css
diseño web
desarrollo

Fuentes en CSS

La tipografía es un elemento fundamental en el diseño web. Las fuentes que elijas y cómo las implementes pueden tener un impacto significativo en la legibilidad, la estética y la experiencia general del usuario en tu sitio web. En este artículo, exploraremos en profundidad cómo trabajar con fuentes en CSS.

Propiedades básicas de fuentes

font-family

La propiedad font-family especifica la familia de fuentes que se utilizará para mostrar texto. Es recomendable proporcionar múltiples opciones en orden de preferencia, terminando con una familia genérica como respaldo:

body {
  font-family: 'Helvetica Neue', Arial, sans-serif;
}

Las familias genéricas disponibles son:

  • serif: Fuentes con remates (como Times New Roman)
  • sans-serif: Fuentes sin remates (como Arial)
  • monospace: Fuentes de ancho fijo (como Courier)
  • cursive: Fuentes que imitan la escritura a mano
  • fantasy: Fuentes decorativas

font-size

La propiedad font-size controla el tamaño del texto:

h1 {
  font-size: 2.5rem;
}

p {
  font-size: 16px;
}

.small-text {
  font-size: 0.8em;
}

font-weight

La propiedad font-weight controla el grosor o peso de la fuente:

h1 {
  font-weight: bold; /* o 700 */
}

p {
  font-weight: normal; /* o 400 */
}

.destacado {
  font-weight: 600;
}

Los valores numéricos van desde 100 (muy ligero) hasta 900 (muy grueso), donde 400 equivale a "normal" y 700 a "bold".

font-style

La propiedad font-style se utiliza principalmente para aplicar texto en cursiva:

em {
  font-style: italic;
}

.normal {
  font-style: normal;
}

.oblique {
  font-style: oblique;
}

font-variant

La propiedad font-variant permite mostrar texto en versalitas:

.small-caps {
  font-variant: small-caps;
}

line-height

Aunque técnicamente no es una propiedad de fuente, line-height controla el espacio vertical entre líneas de texto y es crucial para la legibilidad:

p {
  line-height: 1.6;
}

.apretado {
  line-height: 1.2;
}

.espaciado {
  line-height: 2;
}

Propiedad abreviada font

La propiedad font permite establecer varias propiedades de fuente en una sola declaración:

p {
  /* font: font-style font-variant font-weight font-size/line-height font-family */
  font: italic normal bold 16px/1.6 'Helvetica Neue', Arial, sans-serif;
}

Fuentes web (Web Fonts)

Las fuentes web te permiten utilizar fuentes que no están instaladas en el dispositivo del usuario.

@font-face

La regla @font-face te permite definir y utilizar tus propias fuentes web:

@font-face {
  font-family: 'MiFuentePersonalizada';
  src: url('ruta/a/mi-fuente.woff2') format('woff2'),
       url('ruta/a/mi-fuente.woff') format('woff');
  font-weight: normal;
  font-style: normal;
  font-display: swap;
}

body {
  font-family: 'MiFuentePersonalizada', sans-serif;
}

Google Fonts

Google Fonts es un servicio gratuito que facilita el uso de fuentes web:

<head>
  <link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600;700&display=swap" rel="stylesheet">
</head>
body {
  font-family: 'Open Sans', sans-serif;
}

h1 {
  font-weight: 700;
}

h2 {
  font-weight: 600;
}

p {
  font-weight: 400;
}

Formatos de fuentes

Existen varios formatos de archivos de fuentes, cada uno con diferentes niveles de compatibilidad:

  • WOFF2: El formato más moderno y eficiente, con mejor compresión
  • WOFF: Buena compatibilidad con navegadores modernos
  • TTF/OTF: Compatibles con navegadores más antiguos, pero archivos más grandes
  • EOT: Formato antiguo para Internet Explorer
  • SVG: Raramente usado hoy en día

Para una compatibilidad óptima, proporciona al menos WOFF2 y WOFF:

@font-face {
  font-family: 'MiFuente';
  src: url('mi-fuente.woff2') format('woff2'),
       url('mi-fuente.woff') format('woff');
}

Optimización de fuentes

font-display

La propiedad font-display controla cómo se muestra una fuente durante su carga:

@font-face {
  font-family: 'MiFuente';
  src: url('mi-fuente.woff2') format('woff2');
  font-display: swap; /* Muestra texto con fuente alternativa hasta que la personalizada se cargue */
}

Valores comunes:

  • swap: Usa una fuente alternativa hasta que la personalizada se cargue
  • block: Oculta el texto brevemente hasta que la fuente se cargue
  • fallback: Espera un tiempo corto y luego usa una alternativa si es necesario
  • optional: Permite al navegador decidir si usar la fuente personalizada

Subconjuntos de caracteres

Para mejorar el rendimiento, puedes cargar solo los caracteres que necesitas:

<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap&subset=latin" rel="stylesheet">

Precargar fuentes críticas

Para fuentes esenciales, puedes usar la precarga para mejorar el rendimiento:

<link rel="preload" href="mi-fuente.woff2" as="font" type="font/woff2" crossorigin>

Técnicas avanzadas

Variables CSS para sistemas tipográficos

Las variables CSS (custom properties) son excelentes para crear sistemas tipográficos coherentes:

:root {
  --font-primary: 'Roboto', sans-serif;
  --font-secondary: 'Merriweather', serif;
  --font-monospace: 'Fira Code', monospace;
  
  --font-size-xs: 0.75rem;
  --font-size-sm: 0.875rem;
  --font-size-md: 1rem;
  --font-size-lg: 1.125rem;
  --font-size-xl: 1.25rem;
  --font-size-2xl: 1.5rem;
  --font-size-3xl: 1.875rem;
  --font-size-4xl: 2.25rem;
  
  --font-weight-light: 300;
  --font-weight-normal: 400;
  --font-weight-medium: 500;
  --font-weight-semibold: 600;
  --font-weight-bold: 700;
  
  --line-height-tight: 1.2;
  --line-height-normal: 1.5;
  --line-height-relaxed: 1.75;
}

h1 {
  font-family: var(--font-primary);
  font-size: var(--font-size-4xl);
  font-weight: var(--font-weight-bold);
  line-height: var(--line-height-tight);
}

p {
  font-family: var(--font-secondary);
  font-size: var(--font-size-md);
  font-weight: var(--font-weight-normal);
  line-height: var(--line-height-relaxed);
}

code {
  font-family: var(--font-monospace);
  font-size: var(--font-size-sm);
}

Escala tipográfica

Una escala tipográfica crea una jerarquía visual coherente:

:root {
  --base-size: 1rem;
  --scale-ratio: 1.25; /* Escala mayor tercera */
  
  --text-xs: calc(var(--base-size) / var(--scale-ratio));
  --text-sm: var(--base-size);
  --text-md: calc(var(--base-size) * var(--scale-ratio));
  --text-lg: calc(var(--text-md) * var(--scale-ratio));
  --text-xl: calc(var(--text-lg) * var(--scale-ratio));
  --text-2xl: calc(var(--text-xl) * var(--scale-ratio));
  --text-3xl: calc(var(--text-2xl) * var(--scale-ratio));
}

h1 { font-size: var(--text-3xl); }
h2 { font-size: var(--text-2xl); }
h3 { font-size: var(--text-xl); }
h4 { font-size: var(--text-lg); }
h5 { font-size: var(--text-md); }
h6 { font-size: var(--text-sm); }
p { font-size: var(--text-sm); }
.small { font-size: var(--text-xs); }

Tipografía responsiva

Ajusta automáticamente el tamaño de fuente según el tamaño de la ventana:

/* Método 1: Media queries */
h1 {
  font-size: 2rem;
}

@media (min-width: 768px) {
  h1 {
    font-size: 2.5rem;
  }
}

@media (min-width: 1200px) {
  h1 {
    font-size: 3rem;
  }
}

/* Método 2: Unidades viewport */
h1 {
  font-size: calc(1.5rem + 1.5vw);
}

/* Método 3: clamp() */
h1 {
  font-size: clamp(1.5rem, 1rem + 2vw, 3rem);
}

Fuentes variables

Las fuentes variables permiten ajustar múltiples atributos como peso, anchura e inclinación en un solo archivo:

@font-face {
  font-family: 'MiFuenteVariable';
  src: url('mi-fuente-variable.woff2') format('woff2-variations');
  font-weight: 100 900;
}

.light {
  font-weight: 300;
}

.normal {
  font-weight: 400;
}

.bold {
  font-weight: 700;
}

.custom {
  font-weight: 527;
  font-variation-settings: 'wdth' 85, 'ital' 0.5;
}

Ejemplo práctico: Sistema tipográfico completo

Veamos un ejemplo completo de un sistema tipográfico para un sitio web:

/* Base y variables */
:root {
  /* Fuentes */
  --font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
  --font-serif: 'Merriweather', Georgia, serif;
  --font-mono: 'Fira Code', Consolas, Monaco, monospace;
  
  /* Tamaños (escala de tipo) */
  --text-xs: 0.75rem;   /* 12px */
  --text-sm: 0.875rem;  /* 14px */
  --text-base: 1rem;    /* 16px */
  --text-lg: 1.125rem;  /* 18px */
  --text-xl: 1.25rem;   /* 20px */
  --text-2xl: 1.5rem;   /* 24px */
  --text-3xl: 1.875rem; /* 30px */
  --text-4xl: 2.25rem;  /* 36px */
  --text-5xl: 3rem;     /* 48px */
  --text-6xl: 4rem;     /* 64px */
  
  /* Pesos */
  --font-light: 300;
  --font-normal: 400;
  --font-medium: 500;
  --font-semibold: 600;
  --font-bold: 700;
  
  /* Alturas de línea */
  --leading-none: 1;
  --leading-tight: 1.25;
  --leading-snug: 1.375;
  --leading-normal: 1.5;
  --leading-relaxed: 1.625;
  --leading-loose: 2;
  
  /* Espaciado entre letras */
  --tracking-tighter: -0.05em;
  --tracking-tight: -0.025em;
  --tracking-normal: 0;
  --tracking-wide: 0.025em;
  --tracking-wider: 0.05em;
  --tracking-widest: 0.1em;
}

/* Estilos base */
body {
  font-family: var(--font-sans);
  font-size: var(--text-base);
  font-weight: var(--font-normal);
  line-height: var(--leading-normal);
  color: #333;
}

/* Encabezados */
h1, h2, h3, h4, h5, h6 {
  font-weight: var(--font-bold);
  line-height: var(--leading-tight);
  margin-top: 1.5em;
  margin-bottom: 0.5em;
}

h1 {
  font-size: clamp(var(--text-3xl), 5vw, var(--text-5xl));
  letter-spacing: var(--tracking-tight);
}

h2 {
  font-size: clamp(var(--text-2xl), 4vw, var(--text-4xl));
}

h3 {
  font-size: clamp(var(--text-xl), 3vw, var(--text-3xl));
}

h4 {
  font-size: var(--text-xl);
}

h5 {
  font-size: var(--text-lg);
}

h6 {
  font-size: var(--text-base);
  text-transform: uppercase;
  letter-spacing: var(--tracking-wide);
}

/* Párrafos y texto */
p {
  margin-bottom: 1.5em;
}

.lead {
  font-size: var(--text-xl);
  line-height: var(--leading-relaxed);
  margin-bottom: 2em;
}

small, .text-small {
  font-size: var(--text-sm);
}

.text-xs {
  font-size: var(--text-xs);
}

/* Enlaces */
a {
  color: #0066cc;
  text-decoration: underline;
  text-underline-offset: 2px;
  text-decoration-thickness: 1px;
}

a:hover {
  text-decoration-thickness: 2px;
}

/* Listas */
ul, ol {
  margin-bottom: 1.5em;
  padding-left: 1.5em;
}

li {
  margin-bottom: 0.5em;
}

/* Código */
code, pre {
  font-family: var(--font-mono);
  font-size: var(--text-sm);
}

pre {
  background-color: #f5f5f5;
  padding: 1em;
  border-radius: 4px;
  overflow-x: auto;
}

/* Citas */
blockquote {
  font-family: var(--font-serif);
  font-style: italic;
  border-left: 4px solid #ddd;
  padding-left: 1em;
  margin-left: 0;
}

/* Utilidades tipográficas */
.text-center {
  text-align: center;
}

.text-right {
  text-align: right;
}

.uppercase {
  text-transform: uppercase;
}

.capitalize {
  text-transform: capitalize;
}

.italic {
  font-style: italic;
}

.font-light {
  font-weight: var(--font-light);
}

.font-normal {
  font-weight: var(--font-normal);
}

.font-medium {
  font-weight: var(--font-medium);
}

.font-semibold {
  font-weight: var(--font-semibold);
}

.font-bold {
  font-weight: var(--font-bold);
}

/* Responsividad */
@media (max-width: 640px) {
  :root {
    /* Ligeramente más pequeño en móviles */
    --text-base: 0.9375rem;
  }
  
  h1, h2, h3 {
    /* Reducir espacio superior en móviles */
    margin-top: 1em;
  }
}

Mejores prácticas para trabajar con fuentes

  1. Limita el número de fuentes: Usa no más de 2-3 familias de fuentes en un sitio para mantener la coherencia y el rendimiento.
  2. Considera la legibilidad: Elige fuentes legibles y asegúrate de que el tamaño y el contraste sean adecuados.
  3. Proporciona alternativas: Siempre incluye fuentes de respaldo y familias genéricas.
  4. Optimiza el rendimiento: Usa subconjuntos, precarga y formatos modernos como WOFF2.
  5. Prueba en diferentes dispositivos: Asegúrate de que tus fuentes se vean bien en diferentes tamaños de pantalla y resoluciones.
  6. Respeta la jerarquía: Crea una clara jerarquía visual con diferentes tamaños y pesos.
  7. Considera la accesibilidad: Asegúrate de que el texto sea redimensionable y legible para usuarios con discapacidades visuales.
  8. Usa unidades relativas: Prefiere rem, em o porcentajes sobre píxeles para permitir el redimensionamiento.

Conclusión

Las fuentes son un componente esencial del diseño web que afecta tanto a la estética como a la usabilidad. Con CSS moderno, tenemos una amplia gama de herramientas para implementar tipografía sofisticada y responsiva. Desde las propiedades básicas hasta las técnicas avanzadas como fuentes variables y sistemas tipográficos escalables, dominar el uso de fuentes en CSS te permitirá crear experiencias web más atractivas y accesibles.

Modelos de Cajas
Comprende el modelo de cajas en CSS, sus propiedades y cómo ...
Font Size, Weight y Style
Aprende a controlar el tamaño, peso y estilo de las fuentes ...
Referencias

Conceptos Básicos de HTML

Aprende los conceptos básicos de HTML

Conceptos Básicos de JavaScript

Aprende los conceptos básicos de JavaScript

Conceptos Básicos SQL

Aprende los conceptos básicos de SQL

Conceptos Básicos de GIT

Aprende los conceptos básicos de GIT

Conceptos Básicos de Python

Aprende los conceptos básicos de Python

Conceptos Básicos de UML

Aprende los conceptos básicos de UML

Refuerzo Academico de Herramientas de Productividad 2025