Свойство CSS `page`
Базовая поддержка Недавно стало доступно
Эта функция работает в последних версиях устройств и браузеров. Она может не работать на старых устройствах или в старых версиях браузеров. Она доступна во всех браузерах с декабря 2024 года.
Свойство page CSS используется для указания именованной страницы — особого типа страницы, определённого правилом @page at-rule.
Если несколько селекторов подряд используют именованную страницу, может потребоваться принудительный разрыв страницы с помощью свойства break-after.
Синтаксис
/* set a named page */ page: exampleName; page: chapterIntro; /* Use ancestors named page */ page: auto; /* default value */ /* Global values */ page: inherit; page: initial; page: revert; page: revert-layer; page: unset;
Значения
-
auto - Значение по умолчанию. Использует значение ближайшего предка, отличное от
auto. Если ни для одного предка не задано значение именованной страницы, используемым значением auto будет пустая строка. -
<custom-ident> - Чувствительное к регистру имя, определённое в правиле
@page.
Формальное определение
| Начальное значение | auto |
|---|---|
| Применяется к | элементам блочного уровня в обычном потоке корневого элемента. Пользовательские агенты могут также применять его к другим элементам, например к элементам <code>table-row</code>. |
| Наследуется | нет |
| Вычисленное значение | как задано |
| Тип анимации | дискретный |
Формальный синтаксис
page =
auto |
<custom-ident>
Примеры
Пример именованной страницы
В этом примере HTML-код состоит из двух частей: элементов управления печатью и содержимого для печати. Элементы управления печатью позволяют пользователю выбрать, как будут напечатаны sections в article.
<!-- print options in a fieldset -->
<fieldset id="printStyle">
<legend>How would you like to print</legend>
<label for="single">
<input type="radio" id="single" name="type" value="single" checked />
No Pages
</label>
<label for="grouped">
<input type="radio" id="grouped" name="type" value="grouped" />Pages with
Grouped Chapters
</label>
<label for="paged">
<input type="radio" id="paged" name="type" value="paged" />
Chapters Paged
</label>
<button id="print">Print</button>
</fieldset>
<!-- Content to be printed -->
<article id="print-area" data-print="single">
<section id="toc">
<h2>Table of contents</h2>
<ul>
<li>Foreword</li>
<li>Introduction</li>
<li>Chapter One - named pages</li>
<li>Chapter Two - page orientation</li>
<li>Chapter Three - page margins</li>
<li>Conclusion</li>
</ul>
</section>
<section id="foreword">
<h2>Foreword</h2>
<p>
This book is all about how the CSS <code>@page</code> at-rule can help
with printing HTML books.
</p>
</section>
<section id="introduction">
<h2>Introduction</h2>
<p>
This book is a concept to show how an <em>HTML</em> document can easily be
printed out in pages.
</p>
</section>
<section id="chapter1" class="chapter">
<h2>Named pages</h2>
<p>Lorem ipsum</p>
</section>
<section id="chapter2" class="chapter">
<h2>Page Orientation</h2>
<p>Lorem ipsum</p>
</section>
<section id="chapter3" class="chapter">
<h2>Page Margins</h2>
<p>There are 16 page margins that can be set:</p>
<ul>
<li>@top-left-corner</li>
<li>@top-left</li>
<li>@top-center</li>
<li>@top-right</li>
<li>@top-right-corner</li>
<li>@left-top</li>
<li>@left-middle</li>
<li>@left-bottom</li>
<li>@right-top</li>
<li>@right-middle</li>
<li>@right-bottom</li>
<li>@bottom-left-corner</li>
<li>@bottom-left</li>
<li>@bottom-center</li>
<li>@bottom-right</li>
<li>@bottom-right-corner</li>
</ul>
<p>They can be used to show what appears in these parts of the margin</p>
</section>
<section id="conclusion">
<h2>Conclusion</h2>
<p>Now go ahead and write books.</p>
</section>
</article>
Первая часть CSS задаёт именованные страницы, включая их размер и ориентацию, а также содержимое, которое будет помещено на @top-center margin печатных страниц.
@page toc {
size: a4 portrait;
@top-center {
content: "Table of contents";
}
}
@page foreword {
size: a4 portrait;
@top-center {
content: "Foreword";
}
}
@page introduction {
size: a4 portrait;
@top-center {
content: "Introduction";
}
}
@page conclusion {
size: a4 portrait;
@top-center {
content: "Conclusion";
}
}
@page chapter {
size: a4 landscape;
@top-center {
content: "Chapter";
}
}
fieldset {
display: flex;
flex-direction: row;
justify-content: space-between;
gap: 1rem;
width: fit-content;
}
body {
font: 1.1em sans-serif;
}
Следующая часть CSS использует селекторы атрибутов, чтобы применить размеры для печати, ориентацию и поля, заданные в правилах @page именованных страниц в предыдущем разделе CSS, к элементам, использующим свойство page. Разделы с class="chapter" идут подряд и отображаются на одной странице. Свойство break-after: page; используется для их разделения, чтобы каждая глава печаталась на отдельной странице.
@media print {
fieldset {
display: none;
}
section {
font-size: 2rem;
font-family: "Roboto", sans-serif;
}
.chapter {
border: tomato 2px solid;
}
[data-print="grouped"] > #toc,
[data-print="paged"] > #toc {
page: toc;
font-family: "Courier New";
}
[data-print="grouped"] > #foreword,
[data-print="paged"] > #foreword {
page: foreword;
font-family: "Courier New";
}
[data-print="grouped"] > #introduction,
[data-print="paged"] > #introduction {
page: introduction;
font-family: "Courier New";
}
[data-print="grouped"] > #conclusion,
[data-print="paged"] > #conclusion {
page: conclusion;
font-family: "Courier New";
}
[data-print="grouped"] > .chapter,
[data-print="paged"] > .chapter {
page: chapter;
}
[data-print="paged"] > .chapter {
border: none;
break-after: page;
}
.chapter > ul {
columns: 2;
}
}
JavaScript обновляет значение атрибута data-print, к которому применяется именованная страница, когда вы выбираете другой вариант печати:
const printArea = document.querySelector("#print-area");
const printButton = document.querySelector("#print");
const printOption = document.querySelector("#printStyle");
printOption.addEventListener("change", (event) => {
if (event.target.value === "single") {
printArea.dataset.print = "single";
} else if (event.target.value === "grouped") {
printArea.dataset.print = "grouped";
} else {
printArea.dataset.print = "paged";
}
});
printButton.addEventListener("click", () => {
window.print();
});
Содержимое печати и его отображение в окне предварительного просмотра будут меняться в зависимости от выбранного переключателя стиля печати:
Спецификации
| Спецификация |
|---|
| Модуль CSS Paged Media, уровень 3 # propdef-page |
Совместимость с браузерами
| Компьютеры | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | WebView на iOS | |
page |
85 |
85 |
110 |
71 |
1 |
85 |
110 |
60 |
1 |
14.0 |
85 |
1 |
auto |
85 |
85 |
110 |
71 |
1 |
85 |
110 |
60 |
1 |
14.0 |
85 |
1 |
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/page