La regla @page y el área de página
La regla @page y el área de página
11 reglasDeclara 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.
size: A4; /* o: Letter, Legal, A5 */
}
Letter?
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.
size: Letter;
margin: 20mm 18mm; /* sup/inf izq/der */
}
@page { margin: 0; } /* fondo full-bleed */
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.
.doc {
background: #10233b;
padding: 15mm 16mm; /* zona segura */
}
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: 6in 9in; } /* libro trade */
/* EVITAR */ @page { size: 794px 1123px; }
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 :first { margin-top: 0; } /* portada */
@page :left { margin-left: 24mm; }
@page :right { margin-right: 24mm; }
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 :right { margin: 20mm 26mm 20mm 16mm; }
/* Paged.js / Prince: */
@page { margin-inside: 26mm; margin-outside: 16mm; }
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.
size: 210mm 297mm;
bleed: 3mm;
marks: crop cross; /* corte + registro */
}
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.
@page { size: A4; margin: 22mm 18mm; bleed: 3mm; }
/* 2. luego contenido y reglas de quiebre */
h2 { break-after: avoid; }
figure { break-inside: avoid; }
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.
@top-center { content: string(chapter); }
@bottom-right { content: counter(page); }
}
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.
@page { size: Letter; margin: 20mm; }
nav, .toolbar { display: none; }
body { background: #fff; color: #111; }
}
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 landscape { size: A4 landscape; }
.wide-table { page: landscape; }
- R-144 Declara el tamaño de página explícito con size
- R-145 Define el margen de papel con @page margin; usa 0 para full-bleed
- R-146 Pon la zona segura como padding interno, no como margen de @page, cuando hay fondo
- R-147 Usa unidades físicas en tamaños a medida: size: 210mm 297mm, nunca px
- R-148 Estiliza portada y pares/impares con @page :first / :left / :right
- R-149 Espeja el margen interior en documentos a doble cara con :left / :right
- R-150 Declara bleed y marks: crop cross para PDFs listos a prensa
- R-151 Define @page antes del contenido; es la base de toda la paginación
- R-152 Usa cajas de margen como @top-center y @bottom-right para folios y encabezados
- R-153 Separa el viewport de pantalla de la hoja impresa con @media print
- R-154 Un solo tamaño de @page por documento; landscape solo vía página nombrada