Imprimibles con @media print: Conceptos, ejemplos y mejores prácticas
Domina la creación de versiones imprimibles de tus páginas web con CSS. Desde conceptos básicos hasta trucos avanzados, descubre cómo ofrecer una experiencia de impresión profesional y compatible con todos los navegadores.
Estilos en pantalla
- Colores vivos: se usan para captar la atención.
- Animaciones: transiciones, hover effects, etc.
- Layout flexible: grid, flexbox, media queries para dispositivos.
- Elementos interactivos: botones, formularios, menús desplegables.
Estilos en impresión
- Colores sobrios: negro y escala de grises para ahorrar tinta.
- Sin animaciones: los efectos se ignoran.
- Diseño estático: se controla el salto de página y márgenes.
- Elementos ocultos: menús, banners y contenido no esencial se eliminan.
1. Fundamentos de @media print
La regla @media print permite aplicar estilos exclusivamente cuando el documento se envía a la impresora (real o virtual). Su sintaxis básica es:
@media print {
/* reglas CSS específicas para impresión */
}
Los navegadores evalúan la media query "print" cuando el usuario abre el cuadro de diálogo de impresión o guarda como PDF.
2. Propiedades esenciales para una impresión impecable
- Color y fondo:
color,backgroundybackground-image. Se recomiendabackground: none;para evitar consumos de tinta. - Tipografía: aumente el tamaño de fuente para legibilidad (
font-size: 12pt;), use familias tipográficas con buena renderización en papel (serif). - Margenes de página:
@page { margin: 2cm; }controla los márgenes de la hoja. - Saltos de página:
page-break-before,page-break-afterypage-break-inside(aliasbreak-before,break-after,break-inside). - Ocultar elementos no imprimibles:
.no-print { display: none !important; }.
3. Ejemplos prácticos
3.1. Ocultar la barra de navegación y el footer
@media print {
header, nav, footer {
display: none !important;
}
}
3.2. Forzar salto de página después de cada artículo
@media print {
.article {
page-break-after: always; /* o break-after: page; */
}
}
3.3. Añadir encabezado y pie de página con número de página
@page {
size: A4 portrait;
margin: 2cm;
@top-center {
content: "Mi Reporte – " attr(data-title);
font-weight: bold;
font-size: 10pt;
}
@bottom-center {
content: "Página " counter(page) " de " counter(pages);
font-size: 9pt;
}
}
Nota: la sintaxis @top-center y @bottom-center está soportada en Chrome 93+, Safari y Firefox (con prefijos @-moz-document en versiones antiguas).
4. Comparativa con alternativas emergentes
| Característica | @media print (CSS) | PDF.js + HTML2PDF (JS) | Servidor (wkhtmltopdf) |
|---|---|---|---|
| Control de márgenes | Directo con @page |
Requiere opciones de configuración | Altamente preciso, admite CSS avanzado |
| Soporte de encabezado/pie de página dinámico | Limitado, depende del navegador | Posible mediante canvas | Perfecto con CSS @page |
| Velocidad de generación | Instantánea (navegador) | Media (JS en cliente) | Alta (procesamiento en servidor) |
| Compatibilidad | Chrome, Edge, Safari, Firefox (casi 100%) | Depende de la librería | Requiere instalación de binario |
Escoge la solución según tus requerimientos: si la impresión es ocasional, @media print es suficiente; si necesitas PDFs consistentes y con branding, considera una herramienta de servidor.
5. Buenas prácticas y checklist de publicación
- Resetear estilos de fondo:
background: none !important;para evitar manchas. - Usar unidades físicas (
pt, cm, in) en márgenes y fuentes para mayor predictibilidad. - Probar en todos los navegadores principales, especialmente Firefox que maneja
@pagede forma distinta. - Validar saltos de página con contenido dinámico (tablas largas, imágenes).
- Incluir meta‑etiqueta para impresión:
<link rel="stylesheet" href="print.css" media="print">permite cargar un CSS dedicado. - Optimizar imágenes: usar versiones en escala de grises o SVG sin color.
- Evitar fuentes web externas que no se imprimen bien; provee fallback serif.
- Probar con “Guardar como PDF” para validar la generación de archivos digitales.
6. Depuración (troubleshooting)
Si los estilos no aparecen al imprimir:
- Verifica que el
media="print"esté correctamente escrito en el<link>o en la regla@media. - Abre la herramienta de desarrollo (F12) y elige Print Preview o Emulación → Media → print para inspeccionar los estilos aplicados.
- Comprueba que no haya reglas con mayor especificidad que sobrescriban tus reglas de impresión (usa
!importantcon cautela). - En Firefox, revisa la consola por advertencias de
@pageno soportado.
7. Rendimiento y escalabilidad
Los estilos de impresión se cargan solo cuando el usuario abre la vista de impresión, por lo que el impacto en la carga inicial es nulo. Sin embargo, si el CSS imprimible es muy extenso, puede retrasar la generación del PDF. Recomendaciones:
- Separar el CSS imprimible en un archivo
print.cssy servirlo conCache-Control: public, max-age=86400. - Minificar el CSS (ej.
cssnano) para reducir el peso. - Limitar la cantidad de imágenes de alta resolución; usa versiones optimizadas para impresión.
Guía completa de CSS imprimibles con @media print: conceptos, ejemplos y mejores prácticas