Skip to content

Instantly share code, notes, and snippets.

@ferminc
Last active March 25, 2025 20:25
Show Gist options
  • Save ferminc/3838d39e3bfade4b3d5c93d75d4e5c12 to your computer and use it in GitHub Desktop.
Save ferminc/3838d39e3bfade4b3d5c93d75d4e5c12 to your computer and use it in GitHub Desktop.
CSS @page support test in Chrome (page counter, header, footer)
<!DOCTYPE html>
<html>
<head>
<style>
@page {
size: A5 portrait;
margin-top: 15mm;
margin-bottom: 30mm;
@top-center {
content: "Header";
font-size: 3mm;
font-style: italic;
}
}
@page :first {
margin-top: 50mm;
counter-set: page -2;
@top-center {
content: "";
}
@bottom-right {
content: "";
}
@bottom-left {
content: "";
}
}
@page :left {
margin-left: 15mm;
margin-right: 10mm;
@bottom-right {
content: counter(page);
font-size: 3mm;
}
}
@page :right {
margin-right: 15mm;
margin-left: 10mm;
@bottom-left {
content: counter(page);
font-size: 3mm;
}
}
@page :blank {
@top-center {
content: "This page intentionally left blank";
}
@bottom-right {
content: "";
}
@bottom-left {
content: "";
}
}
@media print {
* {
padding: 0;
margin: 0;
box-sizing: border-box;
}
.pages {
display: block;
}
.screen {
display: none;
}
body {
padding: 0 0mm;
width: calc(148mm - 25mm);
max-width: calc(148mm - 25mm);
font-size: 5mm;
font-weight: 400;
line-height: 1.5;
}
blockquote {
font-style: italic;
margin-bottom: 10mm;
border-left: 1mm solid #ccc;
display: block;
padding-left: 5mm;
margin-left: 5mm;
}
p,
h1,
h3 {
margin-bottom: 5mm;
}
.break {
break-after: page;
}
}
@media screen {
.screen {
display: block;
}
.content {
display: none;
}
}
</style>
</head>
<body>
<div class="screen">
<h1>Press <kbd>Ctrl</kbd> + <kbd>P</kbd></h1>
</div>
<div class="content">
<h1 style="text-align: center;">Obcaecati rerum.</h1>
<h3 class="break" style="text-align: center;">Obcaecati rerum, odit nemo harum perferendis ipsa.</h3>
<div class="break"></div>
<div class="break" style="margin-top: 100mm;">
<p>(fake) Copyright notice<br>MMXXV<br>Printed in some country<br>ISBN: XXXXXXXXXX<br>First edition</p>
</div>
<div class="repeat">
<h1>Obcaecati rerum, odit nemo harum perferendis.</h1>
<blockquote>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Voluptatum officia optio ab facilis laborum
a
explicabo, neque debitis magnam tenetur qui, amet aliquam beatae voluptate, necessitatibus voluptas excepturi
nisi
nostrum.</blockquote>
<p>Nobis laborum tenetur iure ullam expedita, perferendis
quia optio accusantium velit impedit, vel dolore! Quo architecto expedita omnis voluptatibus optio reiciendis
culpa!
</p>
<p>Perspiciatis, mollitia quia perferendis laudantium dolorum
accusamus explicabo reprehenderit quis incidunt voluptatum nulla voluptatem ducimus aut eius ex cum repellendus
voluptate expedita?</p>
<p>Veritatis itaque, alias sed doloremque tempora maiores sequi laborum vitae quasi? Repellat nisi repudiandae
facilis explicabo voluptate libero illo iste earum odit? Voluptate ipsam quos sequi quo nulla optio et tempore
recusandae, officiis doloribus est? Perferendis, obcaecati aliquam? Provident eos voluptate mollitia et itaque!
</p>
<h3>Obcaecati rerum, odit nemo harum perferendis ipsa.
Officia, recusandae autem assumenda architecto voluptatem voluptate alias dicta, nobis eos vero laborum neque
tempore.</h3>
<p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Quos reprehenderit ipsam qui ut officiis perferendis
omnis eaque modi, assumenda autem nisi. Iusto harum, commodi similique id illo dolores eveniet! Iste?</p>
<p>Nobis laborum tenetur iure ullam expedita, perferendis
quia optio accusantium velit impedit, vel dolore! Quo architecto expedita omnis voluptatibus optio reiciendis
culpa!
</p>
<p>Harum, quo numquam vitae voluptatem, consequatur veritatis
necessitatibus porro molestiae similique laudantium dolorum ut sint magnam ad fuga ab tempore eligendi sed.</p>
<p>Perspiciatis, mollitia quia perferendis laudantium dolorum
accusamus explicabo reprehenderit quis incidunt voluptatum nulla voluptatem ducimus aut eius ex cum repellendus
voluptate expedita?</p>
<h3>Obcaecati rerum, odit nemo harum perferendis ipsa.
Officia, recusandae autem assumenda architecto voluptatem voluptate alias dicta, nobis eos vero laborum neque
tempore.</h3>
<p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Quos reprehenderit ipsam qui ut officiis perferendis
omnis eaque modi, assumenda autem nisi. Iusto harum, commodi similique id illo dolores eveniet! Iste?</p>
<blockquote style="page-break-before: always;">Ex quidem facere suscipit rerum inventore et sint
sapiente, pariatur quo vero velit earum maxime esse optio porro molestias officiis cum quae!</blockquote>
<p>Nobis laborum tenetur iure ullam expedita, perferendis
quia optio accusantium velit impedit, vel dolore! Quo architecto expedita omnis voluptatibus optio reiciendis
culpa!
</p>
<p>Perspiciatis, mollitia quia perferendis laudantium dolorum
accusamus explicabo reprehenderit quis incidunt voluptatum nulla voluptatem ducimus aut eius ex cum repellendus
voluptate expedita?</p>
<h3>Obcaecati rerum, odit nemo harum perferendis ipsa.
Officia, recusandae autem assumenda architecto voluptatem voluptate alias dicta, nobis eos vero laborum neque
tempore.</h3>
<p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Quos reprehenderit ipsam qui ut officiis perferendis
omnis eaque modi, assumenda autem nisi. Iusto harum, commodi similique id illo dolores eveniet! Iste?</p>
</div>
</div>
<script type="text/javascript">
window.onload = function () {
var repeatElement = document.getElementsByClassName('repeat')[0];
for (var i = 0; i < 10; i++) {
var clone = repeatElement.cloneNode(true);
document.getElementsByClassName('content')[0].appendChild(clone);
}
}
</script>
</body>
</html>
@ferminc
Copy link
Author

ferminc commented Mar 24, 2025

If someone knows how to make page :blank work or how to make rules for individual pages let me know

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment