The break-before
CSS property sets how page, column, or region breaks should behave before a generated box. If there is no generated box, the property is ignored.
/* Generic break values */ break-before: auto; break-before: avoid; break-before: always; break-before: all; /* Page break values */ break-before: avoid-page; break-before: page; break-before: left; break-before: right; break-before: recto; break-before: verso; /* Column break values */ break-before: avoid-column; break-before: column; /* Region break values */ break-before: avoid-region; break-before: region; /* Global values */ break-before: inherit; break-before: initial; break-before: unset;
Each possible break point (in other words, each element boundary) is affected by three properties: the break-after
value of the previous element, the break-before
value of the next element, and the break-inside
value of the containing element.
To determine if a break must be done, the following rules are applied:
- If any of the three concerned values is a forced break value (
always
,left
,right
,page
,column
, orregion
), it has precedence. If more than one of them are such a break, the one of the element that appears the latest in the flow is taken (i.e., thebreak-before
value has precedence over thebreak-after
value, which itself has precedence over thebreak-inside
value). - If any of the three concerned values is an avoid break value (
avoid
,avoid-page
,avoid-region
, oravoid-column
), no such break will be applied at that point.
Once forced breaks have been applied, soft breaks may be added if needed, but not on element boundaries that resolve in a corresponding avoid
value.
Syntax
The break-before
property is specified as one of the keyword values from the list below.
Values
Generic break values
auto
- Allows, but does not force, any break (page, column, or region) to be inserted right before the principal box.
avoid
- Avoids any break (page, column, or region) from being inserted right before the principal box.
always
- Forces a page break right after the principal box. The type of this break is that of the immediately-containing fragmentation context. If we are inside a multicol container then it would force a column break, inside paged media (but not inside a multicol container) a page break.
all
- Forces a page break right after the principal box. Breaking through all possible fragmentation contexts. So a break inside a multicol container, which was inside a page container would force a column and page break.
Page break values
avoid-page
- Avoids any page break right before the principal box.
page
- Forces a page break right before the principal box.
left
- Forces one or two page breaks right before the principal box, whichever will make the next page into a left page.
right
- Forces one or two page breaks right before the principal box, whichever will make the next page into a right page.
recto
- Forces one or two page breaks right before the principal box, whichever will make the next page into a recto page. (A recto page is a right page in a left-to-right spread or a left page in a right-to-left spread.)
verso
- Forces one or two page breaks right before the principal box, whichever will make the next page into a verso page. (A verso page is a left page in a left-to-right spread or a left right in a right-to-left spread.)
Column break values
avoid-column
- Avoids any column break right before the principal box.
column
- Forces a column break right before the principal box.
Region break values
avoid-region
- Avoids any region break right before the principal box.
region
- Forces a region break right before the principal box.
Page break aliases
For compatibility reasons, the legacy page-break-before
property should be treated by browsers as an alias of break-before
. This ensures that sites using page-break-before
continue to work as designed. A subset of values should be aliased as follows:
page-break-before | break-before |
---|---|
auto |
auto |
left |
left |
right |
right |
avoid |
avoid |
always |
page |
The always
value of page-break-*
was implemented by browsers as a page break, and not as a column break. Therefore the aliasing is to page
, rather than the always
value in the Level 4 spec.
Formal definition
Initial value | auto |
---|---|
Applies to | block-level elements |
Inherited | no |
Computed value | as specified |
Animation type | discrete |
Formal syntax
auto | avoid | always | all | avoid-page | page | left | right | recto | verso | avoid-column | column | avoid-region | region
Examples
Breaking into neat columns
In the following example we have a container that contains an <h1>
spanning all columns (achieved using column-span: all
) and a series of <h2>
s and paragraphs laid out in multiple columns using column-width: 200px
.
By default, the subheadings and paragraphs were laid out rather messily because the headings were not in a uniform place. However, we used break-before: column
on the <h2>
elements to force a column break before each one, meaning that you end up with an <h2>
neatly at the top of each column.
HTML
<article> <h1>Main heading</h1> <h2>Subheading</h2> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla vitae fringilla mauris. Quisque commodo eget nisi sed pretium. Mauris luctus nec lacus in ultricies. Mauris vitae hendrerit arcu, ac scelerisque lacus. Aliquam lobortis in lacus sit amet posuere. Fusce iaculis urna id neque dapibus, eu lacinia lectus dictum.</p> <h2>Subheading</h2> <p>Praesent condimentum dui dui, sit amet rutrum diam tincidunt eu. Cras suscipit porta leo sit amet rutrum. Sed vehicula ornare tincidunt. Curabitur a ipsum ac diam mattis volutpat ac ut elit. Nullam luctus justo non vestibulum gravida. Morbi metus libero, pharetra non porttitor a, molestie nec nisi.</p> <h2>Subheading</h2> <p>Vivamus eleifend metus vitae neque placerat, eget interdum elit mattis. Donec eu vulputate nibh. Ut turpis leo, malesuada quis nisl nec, volutpat egestas tellus. <h2>Subheading</h2> <p>In finibus viverra enim vel suscipit. Quisque consequat velit eu orci malesuada, ut interdum tortor molestie. Proin sed pellentesque augue. Nam risus justo, faucibus non porta a, congue vel massa. Cras luctus lacus nisl, sed tincidunt velit pharetra ac. Duis suscipit faucibus dui sed ultricies.</p> </article>
CSS
html { font-family: helvetica, arial, sans-serif; } h1 { font-size: 3rem; letter-spacing: 2px; column-span: all; } h2 { font-size: 1.2rem; color: red; letter-spacing: 1px; break-before: column; } p { line-height: 1.5; } article { column-width: 200px; gap: 20px; }
Result
Specifications
Specification | Status | Comment |
---|---|---|
CSS Fragmentation Module Level 3 The definition of 'break-before' in that specification. |
Candidate Recommendation | Adds the recto and verso keywords. Changes the media type of this property from paged to visual . Defines the breaking algorithm with different kinds of breaks. |
CSS Regions Module Level 1 The definition of 'break-before' in that specification. |
Working Draft | Extends the property to handle region breaks. Adds the avoid-region and region keywords. |
CSS Multi-column Layout Module The definition of 'break-before' in that specification. |
Working Draft | Initial definition. Extends the CSS 2.1 page-break-before property to handle both page and column breaks. |
Browser compatibility
Support in multi-column layout
Desktop | Mobile | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Supported in Multi-column Layout | Chrome Full support 50 | Edge Full support 12 | Firefox Full support 65 | IE Full support 10 | Opera
Full support
37
| Safari No support No | WebView Android Full support 50 | Chrome Android Full support 50 | Firefox Android Full support 65 | Opera Android
Full support
37
| Safari iOS No support No | Samsung Internet Android Full support 5.0 |
always | Chrome No support No | Edge No support No | Firefox No support No | IE No support No | Opera No support No | Safari No support No | WebView Android No support No | Chrome Android No support No | Firefox Android No support No | Opera Android No support No | Safari iOS No support No | Samsung Internet Android No support No |
avoid-column | Chrome No support No | Edge No support 12 — 79 | Firefox No support No | IE Full support 10 | Opera No support No | Safari No support No | WebView Android No support No | Chrome Android No support No | Firefox Android No support No | Opera Android No support No | Safari iOS No support No | Samsung Internet Android No support No |
column | Chrome Full support 51 | Edge Full support 12 | Firefox No support No | IE Full support 10 | Opera Full support 38 | Safari No support No | WebView Android Full support 51 | Chrome Android Full support 51 | Firefox Android No support No | Opera Android Full support 41 | Safari iOS No support No | Samsung Internet Android Full support 5.0 |
Legend
- Full support
- Full support
- No support
- No support
- Experimental. Expect behavior to change in the future.
- Experimental. Expect behavior to change in the future.
Support in paged media
Desktop | Mobile | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Supported in Paged Media | Chrome Full support 50 | Edge Full support 12 | Firefox Full support 65 | IE Full support 10 | Opera
Full support
37
| Safari Full support 10 | WebView Android Full support 50 | Chrome Android Full support 50 | Firefox Android Full support 65 | Opera Android
Full support
37
| Safari iOS Full support 10 | Samsung Internet Android Full support 5.0 |
always | Chrome No support No | Edge No support 12 — 79 | Firefox Full support 65 | IE Full support 10 | Opera No support 11.1 — 12.1 | Safari No support No | WebView Android Full support 50 | Chrome Android No support No | Firefox Android Full support 65 | Opera Android No support No | Safari iOS No support No | Samsung Internet Android No support No |
page and avoid-page | Chrome Full support 50 | Edge Full support 12 | Firefox Full support 65 | IE Full support 10 | Opera No support 11.1 — 12.1 | Safari Full support 10 | WebView Android Full support 50 | Chrome Android Full support 50 | Firefox Android Full support 65 | Opera Android Full support 37 | Safari iOS Full support 10 | Samsung Internet Android Full support 5.0 |
recto and verso | Chrome No support No | Edge No support No | Firefox No support No | IE No support No | Opera No support No | Safari No support No | WebView Android No support No | Chrome Android No support No | Firefox Android No support No | Opera Android No support No | Safari iOS No support No | Samsung Internet Android No support No |
Legend
- Full support
- Full support
- No support
- No support