How CSS break-before: page Forces Clean Page Breaks
The CSS property break-before: page provides developers
with precise control over pagination when printing web documents or
generating PDFs from HTML. This article explains how the property
functions within CSS fragmentation contexts, why it replaces legacy
printing rules, and how to implement it to ensure specific elements
reliably begin on a fresh printed page.
Understanding the Mechanism
When a browser prepares a document for print, it creates a paged media formatting context. In this context, content is split across multiple discrete containers called fragmentainers (the physical pages). By default, the rendering engine splits content automatically based on page dimensions and margins, which often causes awkward splits across text blocks or headers.
Applying break-before: page explicitly alters the layout
engine's fragmentation behavior. It instructs the browser to terminate
the current page box immediately before rendering the target element. As
a result, any remaining vertical space on the active page is left blank,
and the element—along with all subsequent content—is placed at the top
of the next page.
Modern Standard vs. Legacy Syntax
In earlier CSS specifications, forcing a page break required the
page-break-before property:
/* Legacy approach */
.section-break {
page-break-before: always;
}The CSS Fragmentation Module Level 3 standardized fragmentation
across different media types (pages, multi-column layouts, and regions)
into unified properties: break-before,
break-after, and break-inside.
While page-break-before: always is still supported by
browsers for backward compatibility, break-before: page is
the modern standard. It specifically targets paged media without
interfering with multi-column containers, which use values like
column instead.
Implementation and Usage
To prevent forced breaks from affecting standard screen displays, apply the property within a print style block:
@media print {
.page-break {
break-before: page;
}
}This pattern is commonly applied to:
- Top-level headings: Ensuring major chapters or
sections (
h1,h2) always begin at the top of a new page. - Document boundaries: Separating distinct records, such as invoices, receipts, or medical charts, within a single generated HTML view.
- Tables and charts: Pushing large data tables to a new page so they are not cut off after just a few rows.
Key Considerations for Clean Breaks
- Container Context: For
break-before: pageto work reliably, the target element should be a block-level element in the normal document flow. Applying it to elements inside modern layout containers, such as CSS Grid or Flexbox, can produce inconsistent results depending on the browser's print engine implementation. - Adjacent Breaks: If multiple page break
declarations occur in succession, or if an element with
break-before: pagenaturally falls at the very top of a new page, standard-compliant rendering engines will collapse the breaks to prevent blank pages. - Left and Right Paging: In double-sided printing,
break-beforealso acceptsleftorrightvalues (orrectoandverso), which force the content to the next specific facing page, inserting a blank page automatically if necessary.