發布日期:2024 年 10 月 30 日
從 Chrome 131 開始,您可以在列印頁面時使用 CSS 在頁面邊界新增內容。這篇文章將說明分頁式媒體的頁面模型,以及如何使用這項功能改善網頁的列印輸出內容。
CSS 包含處理分頁式媒體的規格、CSS 分頁式媒體模組和 CSS 產生的分頁式媒體內容。這些屬性定義的功能僅會在列印頁面 (包括列印為 PDF) 時使用。有支援此 CSS 的使用者代理程式,可讓您使用 HTML 和 CSS 產生書籍和其他平面媒體。不過,雖然我們經常需要透過應用程式列印或建立 PDF,但網頁瀏覽器從未提供良好的支援。
Chrome 和 Firefox 支援 @page
at-rule。這個規則可讓您定義要列印的頁面大小,以及內容周圍的邊界大小。自 Chrome 131 起,您也可以指定相關邊界 at-rule,使用產生的內容來新增邊界內容。
網頁模型
分頁式媒體中使用的頁面模型會定義頁面框格,也就是一張紙張。頁面框內包含頁面邊界、頁面邊框、頁面邊框間距,以及最後顯示內容的頁面區域。當內容要列印時,系統會將內容分割成所需的頁面數量。
然後將頁邊界分成 16 個方塊,每個方塊都有對應的 at-rule。
@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
邊界框大小
上方和下方方塊的高度,以及左右方塊的寬度,皆由使用 @page
設定的邊界大小定義。因此,角落方塊的大小固定為這些邊界交會處的大小。不過,每個角落之間的三個方塊是彈性的。這些方塊的行為與使用 flex: auto
的 Flexbox 版面配置中的方塊相似,因此會延伸至填滿空間,但如果您在其中一個方塊中放入長字串,而其他方塊中沒有任何內容,則含有文字的方塊會延伸,而不會將文字換行。
在邊界框中新增內容
如要將內容新增至邊界框,請使用 CSS 產生的內容,就像使用 ::before
和 ::after
疑似元素一樣。在這種情況下,請使用與您要指定的方塊相關的 at-rule。下列 CSS 會將「My book」文字新增至左下方邊界方塊或右側頁面。並為該文字設定樣式。
@page :right {
@bottom-left {
content: "My book";
font-size: 9pt;
color: #333;
}
}
除了文字字串,您也可以在邊界中加入頁面計數器。預先定義的 page
計數器包含目前的頁面。以下 CSS 會將圖片加入右側頁面的右下方,以及左側頁面的左下方。
@page :right {
@bottom-right {
content: counter(page);
}
}
@page :left {
@bottom-left {
content: counter(page);
}
}
此外,還有一個 pages
計數器,一律會包含網頁總數。
使用頁面邊界時的注意事項
如果透過瀏覽器列印,瀏覽器會自動新增一些頁面邊界內容,如果有顯示空間。即使您已新增內容,系統也會執行這項操作。您可以在列印對話方塊中關閉這些自動產生的標頭和頁尾。
如果您將網頁邊界設定為 0,或是設定的值太小,導致瀏覽器標頭和標尾沒有空間,這些元素就不會顯示。
由於 Chromium 中的預設頁面版面配置概念,如果列印文件的第一頁沒有自動內容的空間,瀏覽器內容就無法顯示在後續頁面,即使後續頁面有空間也一樣。
分頁式媒體的未來發展方向
分頁式媒體規格包含其他幾項功能,請參閱「使用 CSS 設計列印內容」一文。如果您有下列任何功能的用途,請將其新增至已連結的錯誤。
設定字串
書籍通常會在邊空印出目前章節的標題。這個標題會隨著書籍內容變動,因此無法硬式編碼至 CSS 中。string-set
屬性可讓您設定 HTML 中的值,以便在產生的內容中使用。以下 CSS 假設章節標題已標示為 <h1>
。它會擷取每個 <h1>
的內容,並在右頁的右上方邊界使用這些內容。當它到達下一個 <h1>
時,系統會更新該點之後的邊界值。
h1 {
string-set: doctitle content();
}
@page :right {
@top-right {
content: string(doctitle);
margin: 30pt 0 10pt 0;
font-size: 8pt;
}
}
string-set
和 string()
的 Chromium 錯誤。
交叉參照資料
文件列印後,系統通常會使用可找到參照項目的頁碼來標示其他頁面的參照項目。這些交叉參照可使用 target-counter
建立。套用至連結時,連結會跳轉至網頁上的參照資料,並在列印時顯示頁碼。
<a class="xref" href="#ref1">my reference</a>
a.xref:after {
content: " (page " target-counter(attr(href, url), page) ")";
}
註釋
頁面式媒體規格也支援附註。在 HTML 中,使用類別來識別應為腳註的文字,例如:
<p>This is some text <span class=”fn”>this is a footnote</span>.</p>
然後使用 float
的 footnote
值,將這段文字轉換為腳註。當文件列印時,這項資訊會從段落中移除,並顯示為附註。
.fn {
float: footnote;
}