Elementos corrientes: folios y encabezados
Elementos corrientes: folios y encabezados
11 reglasPon encabezados y pies corrientes en cajas de margen
Un encabezado o pie corriente se repite en cada hoja desde el margen de la página, no desde la caja de texto. En CSS Paged Media lo colocas en una caja de margen como @top-center o @bottom-right. Hay 16 cajas (cuatro por borde mas las cuatro esquinas); la caja solo imprime si le das content. Mantenlo fuera del bloque de texto para que el cuerpo fluya intacto.
@top-center { content: "Editorial Craft Bible"; }
@bottom-right { content: counter(page); }
}
Numera con counter(page) de counter(pages)
Nunca teclees numeros de pagina a mano. counter(page) da la pagina actual y counter(pages) el total del documento, asi "3 de 20" sigue correcto tras cualquier reflow. Concatena cadenas y contadores dentro de content. Un numero fijo se desincroniza en cuanto un parrafo se recorre.
@bottom-center {
content: counter(page) " de " counter(pages);
}
}
Lleva el titulo de capitulo vivo al header con string-set
Un header corriente dinamico muestra el capitulo actual. Pon string-set: chapter content() en el titulo y luego imprimelo con content: string(chapter) en la caja de margen. Paged.js acepta un segundo argumento: string(chapter, first) toma la primera asignacion de la pagina, start el valor vigente al inicio. Asi el header se mantiene sincronizado con el contenido, sin reteclear nada.
@page {
@top-center { content: string(chapter, start); }
}
Coloca el folio en el borde exterior
En un documento a doble cara el folio va en la esquina exterior, donde descansa el pulgar al hojear. Usa @page :left para mandarlo a @bottom-left y @page :right a @bottom-right. Un folio pegado al lomo (borde interior) es invisible al pasar hojas y pierde su unico proposito: localizar rapido.
@page :right { @bottom-right { content: counter(page); } }
Suprime los corrientes en la portada con @page :first
La portada y las paginas de apertura no deben llevar header corriente y a menudo tampoco folio visible. Apunta a la primera pagina con @page :first y vacia sus cajas de margen con content: none. Dejar el header en la portada se ve amateur y satura una pagina que deberia respirar.
@top-center { content: none; }
@bottom-right { content: none; }
}
Craft Bible
Craft Bible
Sube un elemento real al margen con running()
Cuando el header necesita marcado rico (un logo, spans con estilo, un filete) una named string no basta. GCPM permite sacar un elemento real del flujo con position: running(name) y soltarlo en una caja de margen con content: element(name). El elemento conserva su estructura y estilo. Paged.js lo soporta; ojo, es mover, no copiar, asi que el origen ya no imprime en el cuerpo.
@page {
@top-center { content: element(rh); }
}
Numeracion romana en preliminares, reset a arabiga en el cuerpo
Los preliminares (portada, creditos, indice) se numeran en romano minuscula: counter(page, lower-roman) da i, ii, iii. El cuerpo reinicia en 1 arabigo. En la primera pagina del cuerpo resetea el contador con counter-reset: page 0 sobre una pagina nombrada. Nunca corras una cuenta arabiga continua por los preliminares; delata un export sin editar.
@page body :first { counter-reset: page 1; }
.body { page: body; }
Da encabezado distinto a par e impar
Convencion de libro: el header del verso (izquierda, par) lleva el titulo de la obra y el header del recto (derecha, impar) el titulo del capitulo. Sepáralos con @page :left y @page :right. Asi quien abre en cualquier punto lee a la vez el libro y donde esta dentro. El mismo header en ambos lados desperdicia el par.
@page :right { @top-center { content: string(chapter); } }
Reserva margen para que el folio no encime el texto
Las cajas de margen se dibujan dentro del margen de la pagina, asi que ese margen debe ser lo bastante alto para alojar el header o el folio con aire. Si el margen superior es muy chico, el header corriente choca con la primera linea de texto. Regla practica: deja el header al menos su propio interlineado libre del cuerpo y ajusta el margen de pagina (por ejemplo margin: 20mm 18mm). El folio vive en el margen, no encima de la copia.
Manten el folio pequeno, discreto y en familia
Un folio es una ayuda de orientacion, no un titular. Ponlo un par de puntos bajo el cuerpo (aprox. 8 a 9pt para un cuerpo de 10 a 11pt), en tono tenue (var(--text-2)), en la misma familia que el texto. Un folio grande, en negrita y a color compite con el contenido y abarata la pagina. Discreto y consistente le gana a llamativo siempre.
Sin soporte de margin boxes, recurre a Paged.js o headers HTML
Headless Chrome --print-to-pdf ignora las cajas de margen, las named strings y counter(pages): tu @top-center simplemente no imprime nada. Dos salidas: usar Paged.js (un polyfill JS que construye margin boxes reales, headers corrientes y contadores en el navegador) o WeasyPrint, o dar la plantilla de header/footer propia de Chrome via banderas de --print-to-pdf con class="pageNumber" / class="totalPages". No esperes que Chrome puro respete GCPM.
<script src="paged.polyfill.js"></script>
# o la plantilla de header propia de Chrome
--print-to-pdf --header-template='<span class="pageNumber"></span>'
- R-166 Pon encabezados y pies corrientes en cajas de margen
- R-167 Numera con counter(page) de counter(pages)
- R-168 Lleva el titulo de capitulo vivo al header con string-set
- R-169 Coloca el folio en el borde exterior
- R-170 Suprime los corrientes en la portada con @page :first
- R-171 Sube un elemento real al margen con running()
- R-172 Numeracion romana en preliminares, reset a arabiga en el cuerpo
- R-173 Da encabezado distinto a par e impar
- R-174 Reserva margen para que el folio no encime el texto
- R-175 Manten el folio pequeno, discreto y en familia
- R-176 Sin soporte de margin boxes, recurre a Paged.js o headers HTML