Spec-Zone.ru › CSS

`@page` CSS at-rule

Baseline Newly available

This feature works across the latest devices and browser versions. This feature might not work in older devices or browser versions. It's been available across browsers since December 2024.

The @page at-rule is a CSS at-rule used to modify different aspects of printed pages. It targets and modifies the page's dimensions, orientation, and margins. The @page at-rule can be used to target all pages in a print-out or a subset using its various pseudo-classes.

Syntax

/* Targets all the pages */
@page {
  size: 8.5in 9in;
  margin-top: 4in;
}

/* Targets all even-numbered pages */
@page :left {
  margin-top: 4in;
}

/* Targets all odd-numbered pages */
@page :right {
  size: 11in;
  margin-top: 4in;
}

/* Targets all selectors with `page: wide;` set */
@page wide {
  size: a4 landscape;
}

@page {
  /* margin box at top right showing page number */
  @top-right {
    content: "Page " counter(pageNumber);
  }
}

Page properties

The @page at-rule can contain only page descriptors and margin at-rules. The following descriptors have been implemented by at least one browser:

margin
Specifies the page margins. Individual margin properties margin-top, margin-right, margin-bottom, and margin-left can also be used.
page-orientation
Specifies the orientation of the page. This does not affect the layout of the page; the rotation is applied after the layout in the output medium.
size
Specifies the target size and orientation of the page box's containing block. In the general case, where one page box is rendered onto one page sheet, it also indicates the size of the destination page sheet.

The specification mentions following CSS properties to be applicable to page boxes via @page at-rule. But these have not been supported by any user agent yet.

Remaining page properties | Feature | CSS properties | | --------------------- | --------------------- | | bidi properties | direction | | background properties | background-color | | | background-image | | | background-repeat | | | background-attachment | | | background-position | | | background | | border properties | border-top-width | | | border-right-width | | | border-bottom-width | | | border-left-width | | | border-width | | | border-top-color | | | border-right-color | | | border-bottom-color | | | border-left-color | | | border-color | | | border-top-style | | | border-right-style | | | border-bottom-style | | | border-left-style | | | border-short-style | | | border-top | | | border-right | | | border-bottom | | | border-left | | | border | | counter properties | counter-reset | | | counter-increment | | color | color | | font properties | font-family | | | font-size | | | font-style | | | font-variant | | | font-weight | | | font | | height properties | height | | | min-height | | | max-height | | line height | line-height | | margin properties | margin-top | | | margin-right | | | margin-bottom | | | margin-left | | | margin | | outline properties | outline-width | | | outline-style | | | outline-color | | | outline | | padding properties | padding-top | | | padding-right | | | padding-bottom | | | padding-left | | | padding | | quotes | quotes | | text properties | letter-spacing | | | text-align | | | text-decoration | | | text-indent | | | text-transform | | | white-space | | | word-spacing | | visibility | visibility | | width properties | width | | | min-width | | | max-width |

Description

The @page rule defines properties of the page box. The @page at-rule can be accessed via the CSS object model interface CSSPageRule.

Note: The W3C is discussing how to handle viewport-related <length> units, vh, vw, vmin, and vmax. Meanwhile do not use them within a @page at-rule.

Related properties

The @page at-rule, allows the user to assign a name to the rule, which is then called in a declaration using the page property.

page
Allows a selector to use a user-defined named page

Formal syntax

Where the <page-body> includes:

  • page-properties
  • page-margin properties

and <pseudo-page> represents these pseudo-classes:

  • :blank
  • :first
  • :left
  • :right

Margin at-rules

The margin at-rules are used inside of the @page at-rule. They each target a different section of the document printed page, styling the area of the printed page based on the property values set in the style block:

@page {
  @top-left {
    /* page-margin-properties */
  }
}

@top-left targets the top-left of the document and applies the changes based on the page-margin-properties set.

Other margin-at rules include:

@top-left-corner
@top-left
@top-center
@top-right
@top-right-corner
@bottom-left-corner
@bottom-left
@bottom-center
@bottom-right
@bottom-right-corner
@left-top
@left-middle
@left-bottom
@right-top
@right-middle
@right-bottom

Page-margin properties

The page-margin properties are the set of CSS properties can be set in any individual margin at-rule. They include:

Page-margin properties | Feature | CSS properties | | --------------------- | --------------------- | | bidi properties | direction | | background properties | background-color | | | background-image | | | background-repeat | | | background-attachment | | | background-position | | | background | | border properties | border-top-width | | | border-right-width | | | border-bottom-width | | | border-left-width | | | border-width | | | border-top-color | | | border-right-color | | | border-bottom-color | | | border-left-color | | | border-color | | | border-top-style | | | border-right-style | | | border-bottom-style | | | border-left-style | | | border-short-style | | | border-top | | | border-right | | | border-bottom | | | border-left | | | border | | counter properties | counter-reset | | | counter-increment | | content | content | | color | color | | font properties | font-family | | | font-size | | | font-style | | | font-variant | | | font-weight | | | font | | height properties | height | | | min-height | | | max-height | | line height | line-height | | margin properties | margin-top | | | margin-right | | | margin-bottom | | | margin-left | | | margin | | outline properties | outline-width | | | outline-style | | | outline-color | | | outline | | padding properties | padding-top | | | padding-right | | | padding-bottom | | | padding-left | | | padding | | quotes | quotes | | text properties | letter-spacing | | | text-align | | | text-decoration | | | text-indent | | | text-transform | | | white-space | | | word-spacing | | vertical alignment | vertical-align | | visibility | visibility | | width properties | width | | | min-width | | | max-width | | z-index | z-index |

Named pages

Named pages enable performing per-page layout and adding page-breaks in a declarative manner when printing.

Named pages can be applied using the page property. This allows the user to create different page configurations for use in print layouts.

An example of this can be found on the page examples.

Examples

Using the size property to change the page orientation

This example shows how to split the <section>s into individual pages in landscape format with each page having a 20% margin when printed. Clicking the print button will launch a print dialog with the HTML sections split into individual pages.

<button>Print page</button>
<article>
  <section>
    <h2>Header one</h2>
    <p>Paragraph one.</p>
  </section>
  <section>
    <h2>Header two</h2>
    <p>Paragraph two.</p>
  </section>
  <section>
    <h2>Header three</h2>
    <p>Paragraph three.</p>
  </section>
</article>
const button = document.querySelector("button");

button.addEventListener("click", () => {
  window.print();
});
@page {
  size: landscape;
  margin: 2cm;
}

section {
  page-break-after: always;
  break-after: page;
}

@media print {
  button {
    display: none;
  }
}
body {
  font-family: "Helvetica", sans-serif;
  background-color: silver;
}

article {
  width: 100%;
}

section {
  display: grid;
  background-color: white;
  border-radius: 0.6rem;
  justify-items: center;
  padding: 1rem;
  width: 50%;
  print-color-adjust: exact;
  -webkit-print-color-adjust: exact;
  margin: 0 auto;
  margin-block-end: 1rem;
  border: 1px dashed;
}

@page pseudo-class examples

See the various pseudo-classes of @page for examples.

  • :blank
  • :first
  • :left
  • :right

Specifications

Specification
CSS Paged Media Module Level 3
# at-page-rule
CSS Logical Properties and Values Module Level 1
# page

Browser compatibility

Desktop Mobile
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet WebView Android WebView on iOS
page
2
12
19
6
18.2
18
19
14
18.2
1.0
37
18.2
bottom-center
131
131
No
116
No
131
No
87
No
29.0
131
No
bottom-left
131
131
No
116
No
131
No
87
No
29.0
131
No
bottom-left-corner
131
131
No
116
No
131
No
87
No
29.0
131
No
bottom-right
131
131
No
116
No
131
No
87
No
29.0
131
No
bottom-right-corner
131
131
No
116
No
131
No
87
No
29.0
131
No
left-bottom
131
131
No
116
No
131
No
87
No
29.0
131
No
left-middle
131
131
No
116
No
131
No
87
No
29.0
131
No
left-top
131
131
No
116
No
131
No
87
No
29.0
131
No
page-orientation
85
85
122
71
No
85
122
60
No
14.0
85
No
right-bottom
131
131
No
116
No
131
No
87
No
29.0
131
No
right-middle
131
131
No
116
No
131
No
87
No
29.0
131
No
right-top
131
131
No
116
No
131
No
87
No
29.0
131
No
size
15
79
95
15
18.2
18
95
14
18.2
1.5
37
18.2
top-center
131
131
No
116
No
131
No
87
No
29.0
131
No
top-left
131
131
No
116
No
131
No
87
No
29.0
131
No
top-left-corner
131
131
No
116
No
131
No
87
No
29.0
131
No
top-right
131
131
No
116
No
131
No
87
No
29.0
131
No
top-right-corner
131
131
No
116
No
131
No
87
No
29.0
131
No

See also

  • The page property
  • The @page size descriptor
  • CSS paged media module
  • [META] CSS Paged Media Module Level 3 Bugzilla for tracking progress on the subject (page-based counters, etc.)

© 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/At-rules/@page

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API