Data di pubblicazione: 30 ottobre 2024
A partire da Chrome 131, puoi utilizzare il CSS per aggiungere contenuti ai margini delle pagine quando vengono stampate. Questo post spiega il modello di pagina per i contenuti multimediali paginati e come utilizzare questa funzionalità per migliorare l'output di stampa delle tue pagine web.
Il CSS include le specifiche che riguardano i contenuti multimediali con pagine, il Modulo dei contenuti multimediali a impaginazione dei CSS e i contenuti generati dai CSS per i media a pagine. Definiscono le funzionalità che vengono utilizzate solo quando una pagina viene stampata (incluso in PDF). Esistono user-agent che supportano questo CSS e ti consentono di generare libri e altro materiale stampato da HTML e CSS. Tuttavia, questa funzionalità non è mai stata supportata bene nei browser web, nonostante il fatto che molto spesso sia necessario stampare o creare PDF dalle applicazioni.
Chrome e Firefox supportano la regola at-rule di @page
. Questa regola consente di definire le dimensioni della pagina su cui stai stampando e le dimensioni dei margini attorno ai contenuti. A partire da Chrome 131, puoi anche utilizzare i contenuti generati per aggiungere contenuti ai margini, scegliendo come target la regola at-rule per i margini pertinente.
Il modello di pagina
Il modello di pagina utilizzato nei contenuti multimediali paginati definisce una casella di pagina, ovvero il foglio di carta. All'interno della casella della pagina sono presenti un margine, un bordo, un spazio interno e infine l'area della pagina in cui vengono visualizzati i contenuti. Quando vengono stampati, i contenuti vengono frammentati in tutte le pagine necessarie per contenerli.
Il margine della pagina viene quindi suddiviso in 16 caselle, ciascuna con un at-rule corrispondente.
@top-left-corner
@top-left
@top-center
@top-right
@top-right-corner
@left-top
@left-middle
@left-bottom
@right-top
@right-middle
@right-bottom
@bottom-left-corner
@bottom-left
@bottom-center
@bottom-right
@bottom-right-corner
Dimensionamento della casella del margine
L'altezza delle caselle superiore e inferiore e la larghezza delle caselle
laterali sinistra e destra sono definite dalle dimensioni dei margini impostate utilizzando @page
. Di conseguenza, le caselle agli angoli hanno una dimensione fissa creata dall'intersezione di questi margini. Tuttavia, le tre caselle tra ogni angolo sono flessibili. Si comportano in modo simile alle caselle in un layout flessibile che utilizza flex: auto
, quindi si estendono per riempire lo spazio, ma se inserisci una lunga stringa di testo in una e non nelle altre, quella con il testo aumenterà di dimensioni anziché a capo.
Aggiungere contenuti ai riquadri di margine
Per aggiungere contenuti alle caselle di margine, utilizza i contenuti generati da CSS, come faresti con gli pseudo-elementi ::before
e ::after
. In questo caso, utilizza la regola at مربوط مربوط alla casella che vuoi scegliere come target. Il seguente CSS aggiunge il testo "Il mio libro"
alla casella del margine inferiore sinistro o alle pagine a destra. Inoltre, definisce gli stili del testo.
@page :right {
@bottom-left {
content: "My book";
font-size: 9pt;
color: #333;
}
}
Oltre alle stringhe di testo, puoi aggiungere contatori di pagine ai margini. Il contatore page
predefinito contiene la pagina corrente. Il seguente CSS la aggiunge
in basso a destra nelle pagine a destra e in basso a sinistra nelle pagine di sinistra.
@page :right {
@bottom-right {
content: counter(page);
}
}
@page :left {
@bottom-left {
content: counter(page);
}
}
Esiste anche un contatore pages
che contiene sempre il numero totale di pagine.
Aspetti da tenere presenti quando si utilizzano i margini di pagina
Se stampi da un browser, il browser aggiunge automaticamente alcuni contenuti ai margini della pagina se c'è spazio per visualizzarli. Ciò avviene anche se hai aggiunto contenuti. Queste intestazioni e questi piè di pagina generati automaticamente possono essere disattivati nella finestra di dialogo di stampa.
Se imposti i margini di una pagina su 0 o su un valore così piccolo che non c'è spazio per le intestazioni e i piè di pagina del browser, questi non verranno visualizzati.
A causa del concetto di layout di pagina predefinito in Chromium, se la prima pagina del documento stampato non ha spazio per i contenuti automatici, impedirà la visualizzazione dei contenuti del browser nelle pagine successive, anche se hanno spazio.
Possibilità future per i contenuti multimediali suddivisi in pagine
Le specifiche dei contenuti multimediali paginati includono diverse altre funzionalità, descritte nell' articolo Design per la stampa con CSS. Se hai un caso d'uso per una delle seguenti funzionalità, aggiungila ai bug collegati.
Imposta stringhe
Nei libri, il titolo del capitolo corrente viene spesso stampato a margine. Questo titolo non può essere codificato nel CSS perché cambia man mano che avanzi nel libro. La proprietà string-set
ti consente di impostare un valore dal codice HTML da utilizzare poi nei contenuti generati. Il seguente CSS presuppone che i titoli dei capitoli siano contrassegnati come <h1>
. Prende i contenuti di ogni <h1>
e li utilizza nel margine superiore a destra delle pagine a destra. Quando arriva al <h1>
successivo, il valore viene aggiornato per i margini successivi a quel punto.
h1 {
string-set: doctitle content();
}
@page :right {
@top-right {
content: string(doctitle);
margin: 30pt 0 10pt 0;
font-size: 8pt;
}
}
Bug di Chromium per string-set
e string()
.
Riferimenti incrociati
Una volta stampato un documento, i riferimenti ad altre pagine vengono solitamente indicati utilizzando il numero di pagina in cui si trova il riferimento. Questi riferimenti incrociati
possono essere creati utilizzando target-counter
. Se applicato a un link, il link consente di saltare al riferimento sul web. Quando la pagina viene stampata, viene visualizzato il numero di pagina.
<a class="xref" href="#ref1">my reference</a>
a.xref:after {
content: " (page " target-counter(attr(href, url), page) ")";
}
Bug di Chromium per i riferimenti incrociati.
Note a piè di pagina
Le note a piè di pagina sono anche una funzionalità delle specifiche dei contenuti multimediali paginati. In HTML, utilizza una classe per identificare il testo che deve essere una nota a piè di pagina, ad esempio:
<p>This is some text <span class=”fn”>this is a footnote</span>.</p>
Quindi, utilizza il valore footnote
di float
per trasformare questo testo in note a piè di pagina. Verrà rimosso dal paragrafo quando il documento verrà stampato e visualizzato come nota a piè di pagina.
.fn {
float: footnote;
}