Menambahkan konten ke margin halaman web saat dicetak menggunakan CSS

Dipublikasikan: 30 Oktober 2024

Mulai Chrome 131, Anda dapat menggunakan CSS untuk menambahkan konten ke margin halaman saat dicetak. Postingan ini menjelaskan model halaman untuk media yang di-page, dan cara menggunakan fitur ini untuk meningkatkan output cetak dari halaman web Anda.

CSS menyertakan spesifikasi yang menangani media dengan penomoran halaman, Modul Media dengan Penomoran Halaman CSS dan Konten Buatan CSS untuk Media dengan Penomoran Halaman. Elemen ini menentukan fitur yang hanya digunakan saat halaman dicetak (termasuk ke PDF). Ada agen pengguna yang mendukung CSS ini, dan memungkinkan Anda membuat buku serta materi cetak lainnya dari HTML dan CSS. Namun, fungsi ini tidak pernah didukung dengan baik di browser web, meskipun kita sering kali perlu mencetak atau membuat PDF dari aplikasi.

Chrome dan Firefox mendukung aturan @page. Aturan ini memungkinkan Anda menentukan ukuran halaman yang akan dicetak, dan ukuran margin di sekitar konten. Mulai Chrome 131, Anda juga dapat menggunakan konten yang dihasilkan untuk menambahkan konten ke margin, dengan menargetkan margin yang relevan sesuai aturan.

Model halaman

Model halaman yang digunakan dalam media yang dibagi-bagi menentukan kotak halaman, yaitu lembar kertas Anda. Di dalam kotak halaman terdapat margin halaman, batas halaman, padding halaman, dan akhirnya area halaman tempat konten Anda ditampilkan. Saat dicetak, konten akan difragmentasi menjadi halaman sebanyak yang diperlukan untuk menampungnya.

Margin halaman kemudian dibagi menjadi 16 kotak, dengan masing-masing memiliki at-rule yang sesuai.

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

Ukuran kotak margin

Tinggi kotak atas dan bawah serta lebar kotak sisi kiri dan kanan ditentukan oleh ukuran margin yang ditetapkan menggunakan @page. Oleh karena itu, kotak sudut memiliki ukuran tetap yang dibuat oleh perpotongan dari margin-margin tersebut. Namun, tiga kotak di antara setiap sudut bersifat fleksibel. Perilakunya mirip dengan kotak dalam tata letak fleksibel menggunakan flex: auto, sehingga kotak tersebut akan meluas untuk mengisi ruang, tetapi jika Anda menempatkan string teks yang panjang di salah satu kotak, dan tidak ada di kotak lainnya, kotak yang berisi teks akan bertambah, bukan menggabungkan teks.

Halaman dengan 16 kotak yang ditampilkan di margin.
Area halaman dikelilingi oleh margin dan berisi 16 kotak margin yang telah diberi nama.

Menambahkan konten ke kotak margin

Untuk menambahkan konten ke kotak margin, gunakan konten buatan CSS, seperti yang Anda lakukan dengan elemen pseudo ::before dan ::after. Dalam hal ini, gunakan aturan yang terkait dengan kotak yang ingin ditarget. CSS berikut menambahkan teks "Buku saya" ke kotak margin kiri bawah atau halaman sebelah kanan. Ia juga menata gaya teks tersebut.

@page :right {
  @bottom-left {  
    content: "My book";  
    font-size: 9pt;  
    color: #333; 
  }
}

Selain string teks, Anda dapat menambahkan penghitung halaman ke margin. Penghitung page yang telah ditetapkan berisi halaman saat ini. CSS berikut menambahkannya ke kanan bawah halaman sebelah kanan dan kiri bawah halaman sebelah kiri.

@page :right {  
  @bottom-right {  
    content: counter(page);  
  }
}

@page :left {
  @bottom-left {
    content: counter(page);
  }
}

Ada juga penghitung pages yang selalu berisi jumlah total halaman.

Hal yang perlu diperhatikan saat menggunakan margin halaman

Jika mencetak dari browser, browser akan otomatis menambahkan beberapa konten margin halaman jika ada ruang untuk ditampilkan. Tindakan ini akan dilakukan meskipun Anda telah menambahkan konten. Header dan footer yang dibuat secara otomatis ini dapat dinonaktifkan di dialog cetak.

Jika Anda menetapkan margin di halaman ke 0, atau nilai yang sangat kecil sehingga tidak ada ruang untuk header dan footer browser, header dan footer tidak akan ditampilkan.

Karena adanya konsep tata letak halaman default di Chromium, jika halaman pertama dokumen cetak tidak memiliki ruang untuk konten otomatis, konten browser tidak akan ditampilkan di halaman berikutnya meskipun halaman tersebut memiliki ruang.

Kemungkinan mendatang untuk media dengan penomoran halaman

Spesifikasi media dengan penomoran halaman mencakup beberapa fitur lainnya, yang dijelaskan dalam artikel Mendesain untuk Cetak dengan CSS. Jika Anda memiliki kasus penggunaan untuk salah satu fitur berikut, tambahkan ke bug tertaut.

Menetapkan string

Buku sering kali mencetak judul bab saat ini di margin. Judul ini tidak dapat di-hardcode ke dalam CSS karena akan berubah saat Anda membaca buku. Properti string-set memungkinkan Anda menetapkan nilai dari HTML untuk kemudian digunakan dalam konten yang dihasilkan. CSS berikut mengasumsikan bahwa judul bab ditandai sebagai <h1>. Fungsi ini mengambil konten dari setiap <h1> dan menggunakannya di margin kanan atas di halaman sebelah kanan. Saat mencapai <h1> berikutnya, nilai akan diperbarui untuk margin setelah titik tersebut.

h1 {
  string-set: doctitle content();
}

@page :right {
  @top-right {
    content: string(doctitle);
    margin: 30pt 0 10pt 0;
    font-size: 8pt;
  }
}

Bug Chromium untuk string-set dan string().

Referensi silang

Setelah dokumen dicetak, referensi ke halaman lain biasanya ditunjukkan dengan menggunakan nomor halaman tempat referensi tersebut dapat ditemukan. Referensi silang ini dapat dibuat menggunakan target-counter. Jika diterapkan ke link, link tersebut berfungsi untuk melompat ke referensi di web, saat dicetak, nomor halaman akan ditampilkan.

<a class="xref" href="#ref1">my reference</a>
a.xref:after {
  content: " (page " target-counter(attr(href, url), page) ")";
}

Bug Chromium untuk referensi silang.

Catatan kaki

Catatan kaki juga merupakan fitur dari spesifikasi media yang diberi nomor halaman. Dalam HTML, gunakan class untuk mengidentifikasi teks yang harus menjadi catatan kaki, misalnya:

<p>This is some text <span class=”fn”>this is a footnote</span>.</p>

Lalu, gunakan nilai footnote dari float, untuk mengubah teks ini menjadi catatan kaki. Catatan tersebut akan dihapus dari paragraf saat dokumen dicetak dan ditampilkan sebagai catatan kaki.

.fn {
  float: footnote;
}

Bug Chromium untuk catatan kaki.