Editorial Craft Bible
La regla @page y el área de página
Inicio Paginación HTML/CSS → PDF La regla @page y el área de página
Paginación HTML/CSS → PDF

La regla @page y el área de página

11 reglas W3C CSS Paged Media 3 · Paged.jsW3C CSS Paged Media 3 · Chromium printW3C CSS Paged Media 3 · Ghent WorkgroupW3C CSS Paged Media 3 · CSS Values units
14

La regla @page y el área de página

11 reglas
144

Declara el tamaño de página explícito con size

La regla @page fija el tamaño de cada hoja impresa. Usa un nombre (Letter, A4, Legal) o dimensiones exactas. Si lo omites, cada navegador o motor cae en su propio default (a menudo Letter en EE. UU. y A4 fuera), y el mismo archivo se pagina distinto en cada máquina.

@page {
  size: A4;  /* o: Letter, Legal, A5 */
}
Correcto
A4
size: A4
La hoja mide exactamente lo declarado en cualquier motor.
Evitar
?
Letter?
sin @page
Sin size: el motor adivina Letter o A4 al azar.
W3C CSS Paged Media 3 · Paged.js
145

Define el margen de papel con @page margin; usa 0 para full-bleed

El margin de @page es el borde de papel blanco alrededor del área de contenido, y es donde viven encabezados, pies y folios. Cuando la página lleva un fondo de color que debe llegar al borde, pon margin: 0; si no, Chrome deja márgenes de papel blancos aunque el body sea oscuro. Ver la sección fondos-dark.

@page {
  size: Letter;
  margin: 20mm 18mm;  /* sup/inf izq/der */
}
@page { margin: 0; }  /* fondo full-bleed */
Correcto
margin: 20mm
margin: 0 (bleed)
La página de texto guarda margen; la full-bleed lo pone en 0.
Evitar
fondo + margin default
El margen default deja un marco de papel blanco rodeando el color.
W3C CSS Paged Media 3 · Chromium print
146

Pon la zona segura como padding interno, no como margen de @page, cuando hay fondo

Con @page { margin: 0 } el fondo llega al borde, pero ya nada aleja el texto del corte. Mueve la zona segura a un contenedor de contenido como padding (por ejemplo .doc { padding: 15mm 16mm }). El color llena la hoja mientras el texto queda dentro de su zona segura.

@page { size: Letter; margin: 0; }
.doc {
  background: #10233b;
  padding: 15mm 16mm;  /* zona segura */
}
Correcto
bleed + padding interno
El color llena la hoja; el padding aleja el texto del corte.
Evitar
texto pegado al borde
Sin padding interno: el texto queda en la línea de corte y puede rebanarse.
W3C CSS Paged Media 3 · Ghent Workgroup
147

Usa unidades físicas en tamaños a medida: size: 210mm 297mm, nunca px

Para un trim no estándar, da a size dos longitudes: ancho y luego alto, en mm o in. El píxel es una unidad de pantalla sin significado físico fijo, así que size: 794px 1123px solo coincide con A4 a exactamente 96 dpi y se desvía en otro caso. Especifica siempre las dimensiones de impresión en milímetros o pulgadas.

@page { size: 210mm 297mm; }  /* A4 */
@page { size: 6in 9in; }    /* libro trade */
/* EVITAR */ @page { size: 794px 1123px; }
Correcto
6×9 in
size: 6in 9in
Las unidades físicas dan el trim exacto a cualquier resolución.
Evitar
px?
size: 794px 1123px
Los píxeles se desvían del trim real fuera de 96 dpi.
W3C CSS Paged Media 3 · CSS Values units
148

Estiliza portada y pares/impares con @page :first / :left / :right

Las pseudoclases de pliego permiten que un solo documento lleve configuraciones distintas. @page :first apunta solo a la primera página (típicamente una portada sin encabezado), mientras :left y :right apuntan a pares e impares. También existe :blank para páginas vacías intencionales. Todas cascadean sobre el @page base.

@page { margin: 20mm; }
@page :first { margin-top: 0; }  /* portada */
@page :left  { margin-left: 24mm; }
@page :right { margin-right: 24mm; }
Correcto
:first
:left
:right
Portada, verso y recto reciben su propia disposición.
Evitar
todas iguales
Un @page plano: la portada arrastra un encabezado que no debería.
W3C CSS Paged Media 3 · Paged.js
149

Espeja el margen interior en documentos a doble cara con :left / :right

En trabajo encuadernado el lomo se come el borde interior, así que el margen interior (lomo) debe ser mayor que el exterior. Como el lomo está a la derecha de una página par y a la izquierda de una impar, espeja los márgenes: da a :left más margin-right y a :right más margin-left. Motores con cajas lógicas aceptan margin-inside / margin-outside.

@page :left  { margin: 20mm 16mm 20mm 26mm; }
@page :right { margin: 20mm 26mm 20mm 16mm; }
/* Paged.js / Prince: */
@page { margin-inside: 26mm; margin-outside: 16mm; }
Correcto
:left
:right
El margen ancho queda hacia el lomo en ambas páginas.
Evitar
:left
:right
Mismo margen en ambas: el texto se mete al lomo en un lado.
W3C CSS Paged Media 3 · Prince docs
150

Declara bleed y marks: crop cross para PDFs listos a prensa

Para un archivo que va a imprenta, agrega bleed y marks a @page. bleed: 3mm extiende la caja de página más allá del trim para que el arte full-bleed tenga tolerancia, y marks: crop cross dibuja marcas de corte y cruces de registro fuera del trim. Lo soportan Paged.js y Prince; Chrome headless lo ignora, así que ahí hay que post-procesar.

@page {
  size: 210mm 297mm;
  bleed: 3mm;
  marks: crop cross;  /* corte + registro */
}
Correcto
bleed 3mm + crop marks
El arte pasa el trim punteado; las marcas de corte señalan el corte.
Evitar
sin bleed ni marks
Sin caja de bleed: un corte a 1mm deja filo blanco.
W3C CSS Paged Media 3 · Paged.js docs
151

Define @page antes del contenido; es la base de toda la paginación

El tamaño, el margen, el sangrado y las cajas de margen deciden cuánto espacio tiene cada página, y toda regla de quiebre (break-inside, widows, encabezados corrientes) se mide contra esa caja. Cierra primero la configuración de @page y luego acomoda el contenido dentro. Cambiar el tamaño después reflowía todos los quiebres y deshace cualquier ajuste manual.

/* 1. primero la geometría de página */
@page { size: A4; margin: 22mm 18mm; bleed: 3mm; }
/* 2. luego contenido y reglas de quiebre */
h2 { break-after: avoid; }
figure { break-inside: avoid; }
W3C CSS Paged Media 3
152

Usa cajas de margen como @top-center y @bottom-right para folios y encabezados

El margen de @page aloja dieciséis cajas de margen (@top-left, @top-center, @bottom-right, etc.) donde viven encabezados corrientes, pies y números de página. Define ahí su content y los counters en lugar de forzar HTML posicionado. Chrome headless no renderiza cajas de margen, así que usa Paged.js, Prince o WeasyPrint. Ver la sección corrientes.

@page {
  @top-center  { content: string(chapter); }
  @bottom-right { content: counter(page); }
}
Correcto
CAPÍTULO 3
12
margin boxes
Encabezado y folio viven en el margen, no en el flujo.
Evitar
CAP 3
header dentro del contenido
Encabezado dentro del flujo se encima al texto y baila por página.
W3C CSS Paged Media 3 · WeasyPrint
153

Separa el viewport de pantalla de la hoja impresa con @media print

La pantalla tiene un viewport fluido; la hoja es una caja física fija. Mantén @page y los ajustes solo de paginación dentro de @media print, y úsalo para ocultar el chrome de pantalla (navbars, botones), cambiar a serif de cuerpo y forzar fondo claro. Un tema oscuro en pantalla no debe imprimirse; la impresión va en claro por default. Ver la sección recetas.

@media print {
  @page { size: Letter; margin: 20mm; }
  nav, .toolbar { display: none; }
  body { background: #fff; color: #111; }
}
Correcto
pantalla (dark)
impresión (light)
@media print da a la hoja su propio layout claro y sin chrome.
Evitar
dark impreso
Sin estilos de impresión: el tema oscuro gasta tóner en papel.
W3C CSS Paged Media 3 · MDN @media print
154

Un solo tamaño de @page por documento; landscape solo vía página nombrada

Mezclar tamaños confunde la encuadernación y la configuración de impresión, así que mantén un solo @page maestro para todo el documento. Cuando una tabla ancha o un pliego realmente necesitan landscape, declara una página nombrada (@page landscape { size: A4 landscape }) y engancha elementos específicos con la propiedad page, en vez de cambiar el tamaño global.

@page { size: A4 portrait; }  /* maestro */
@page landscape { size: A4 landscape; }
.wide-table { page: landscape; }
Correcto
A4 portrait (maestro)
page: landscape
Un tamaño maestro; una página nombrada lleva la tabla a landscape.
Evitar
Tamaños distintos regados por el archivo rompen la encuadernación.
W3C CSS Paged Media 3 · Paged.js