← Todos los artículos

Tutoriales

Arreglar una mala impresión: una hoja @media print a medida para cualquier sitio

Pulsas Ctrl+P en un artículo largo y la vista previa es un desastre: la barra de navegación se come la primera página, la barra lateral se solapa con el texto, un aviso de cookies flota sobre el tercer párrafo y un fondo oscuro sólido está a punto de vaciar tu cartucho de tinta. El sitio simplemente nunca escribió una hoja de estilos de impresión. Así que escríbela tú mismo — vive en una regla CSS de JustZix y hace que «Guardar como PDF» vuelva a ser usable.

Por qué la mayoría de los sitios imprimen mal

La impresión es la parte más ignorada del desarrollo web. Los diseñadores prueban en pantallas; QA prueba en pantallas; nadie abre la vista previa de impresión. El resultado es que una enorme parte de la web no tiene ningún bloque @media print, o tiene uno escrito hace años que ya no coincide con la maquetación. El navegador entonces imprime la maquetación de pantalla tal cual — cabeceras fijas, rejillas multicolumna, temas oscuros y todo.

El arreglo es una regla CSS que solo se aplica cuando la página se imprime. Todo lo que hay dentro de @media print { ... } es invisible en pantalla y solo entra en juego para el papel y la exportación a PDF. Eso significa que puedes ser agresivo: ocultar regiones enteras, recolorear todo, forzar una sola columna — nada de ello toca la navegación normal.

Paso 1 — ocultar todo lo que no es contenido

Navegación, barras laterales, pies de página, widgets de compartir, avisos de cookies, cajas pegajosas de «suscríbete»: nada de eso pertenece al papel. Empieza ocultando los adornos obvios.

@media print {
  header, nav, aside, footer,
  .sidebar, .site-header, .site-footer,
  .cookie-banner, .newsletter, .share-bar,
  .ad, [class*="advert" i], [id*="cookie" i],
  [role="banner"], [role="navigation"],
  [aria-label*="cookie" i] {
    display: none !important;
  }
}

Si la página sigue imprimiendo basura, abre la vista previa de impresión, encuentra el bloque culpable en DevTools y añade su selector a la lista. Solo tienes que hacer esto una vez por sitio — la regla se guarda.

Paso 2 — expandir el contenido truncado

Muchos sitios recortan el texto a unas pocas líneas, ocultan el desbordamiento o ponen el artículo en una caja de scroll de altura fija. En pantalla está bien; en papel corta tu contenido. Deshaz el recorte.

@media print {
  /* Kill height limits and scroll boxes */
  main, article, .content, .post-body {
    height: auto !important;
    max-height: none !important;
    overflow: visible !important;
  }

  /* Undo line-clamp truncation */
  * {
    -webkit-line-clamp: unset !important;
    overflow: visible !important;
  }

  /* Force the article full width, drop the grid */
  body, main, article {
    display: block !important;
    width: 100% !important;
    max-width: 100% !important;
    margin: 0 !important;
    float: none !important;
  }
}

El overflow: visible general sobre * parece tosco, pero dentro de @media print es exactamente lo que quieres — nada debería recortarse en una impresión.

Paso 3 — controlar los saltos de página

La mayor mejora para una impresión es impedir que las cosas se partan entre páginas en mitad de un elemento. Un bloque de código dividido en dos hojas, un encabezado abandonado al final de una página, una fila de tabla rota por la mitad — todo arreglable con las propiedades de fragmentación.

@media print {
  /* Never split these across a page */
  pre, blockquote, table, figure, img,
  li, .card {
    break-inside: avoid;
  }

  /* Keep a heading with the text that follows it */
  h1, h2, h3, h4 {
    break-after: avoid;
  }

  /* Start each top-level section on a fresh page */
  .chapter, section.page {
    break-before: page;
  }
}

Las propiedades modernas son break-inside, break-before y break-after. Los nombres antiguos page-break-* aún funcionan y Chrome los mapea automáticamente, pero escribe los nuevos para las reglas nuevas.

Paso 4 — mostrar las URL de los enlaces tras los anclajes

Un enlace impreso es inútil — el lector no puede hacer clic en «haz clic aquí». Imprime la URL real junto a él usando un truco de contenido generado.

@media print {
  a[href^="http"]::after {
    content: " (" attr(href) ")";
    font-size: 0.85em;
    color: #555;
    word-break: break-all;
  }

  /* Don't print URLs for in-page anchors or javascript: links */
  a[href^="#"]::after,
  a[href^="javascript:"]::after {
    content: "";
  }
}

Esto extrae el atributo href a texto visible. Sáltatelo para los enlaces de anclaje y los enlaces de imágenes si se vuelve ruidoso — una impresión llena de URL de seguimiento largas es su propio tipo de caos.

Paso 5 — fijar los márgenes con @page

La regla @page controla la propia hoja impresa: sus márgenes y su tamaño. Los navegadores también te dejan fijar los márgenes en el diálogo de impresión, pero hornearlos en la regla significa que cada impresión de ese sitio sea consistente.

@media print {
  @page {
    margin: 18mm 16mm;
    size: A4;
  }

  /* Tighter margin on the first page if you have a title block */
  @page :first {
    margin-top: 12mm;
  }
}

Paso 6 — forzar un fondo claro para ahorrar tinta

Los sitios con tema oscuro se imprimen como un muro de tóner. Por defecto Chrome elimina los colores de fondo al imprimir (a menos que «Gráficos de fondo» esté marcado), pero el texto a menudo se queda gris claro suponiendo un fondo oscuro. Fuerza un negro-sobre-blanco limpio.

@media print {
  html, body, * {
    background: #fff !important;
    background-image: none !important;
    color: #000 !important;
    box-shadow: none !important;
    text-shadow: none !important;
  }

  /* Keep images and real photos intact */
  img, svg, video { filter: none !important; }

  /* Slightly soften secondary text so it still reads as secondary */
  .muted, .meta, time, small { color: #444 !important; }
}

Esto garantiza una salida legible y económica en tinta sin importar el tema del sitio — y combina bien con desactivar «Gráficos de fondo» en el diálogo de impresión.

Juntarlo todo en JustZix

  1. Crea una regla acotada al sitio del que imprimes a menudo — por ejemplo https://docs.example.com/*.
  2. Pega los seis bloques en el panel CSS, envueltos en un solo @media print (o mantén bloques separados — ambas opciones funcionan).
  3. Abre la página, pulsa Ctrl+P y observa la vista previa. Itera: cualquier cosa que siga mal recibe un selector añadido.
  4. Sincroniza tu clave para que la misma configuración de impresión limpia te siga a todos los dispositivos.

Como todo el conjunto está dentro de @media print, puedes dejar la regla activa de forma permanente. Está latente durante la navegación normal y solo despierta cuando imprimes o exportas un PDF.

Trampas que conviene conocer

Mira también

Una buena hoja de estilos de impresión es un trabajo único de quince minutos que rinde cada vez que guardas un PDF. Instala JustZix, acota una regla a tu sitio más impreso y no vuelvas a pelear con la vista previa de impresión.

Valora este artículo

Sin valoraciones — sé el primero.

Pruébalo tú mismo

Instala JustZix y pega cualquier snippet de este artículo. Dos minutos de cero a una regla funcionando en todos tus dispositivos.

Obtener JustZix

Funciones · Cómo funciona · Ejemplos · Casos de uso