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 diberi nomor halaman, 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 at-rule @page. Aturan ini memungkinkan Anda menentukan ukuran halaman yang akan dicetak, dan ukuran margin di sekitar konten. Dari Chrome 131, Anda juga dapat menggunakan konten yang dihasilkan untuk menambahkan konten ke margin, dengan menargetkan aturan margin yang relevan.

Model halaman

Model halaman yang digunakan dalam media dengan nomor halaman 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 difragmentasikan menjadi sebanyak halaman yang diperlukan untuk memuat konten tersebut.

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 persimpangan 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 besar, bukan menggabungkan teks.

Halaman dengan 16 kotak yang ditampilkan di margin.
Area halaman dikelilingi oleh margin, yang berisi 16 kotak margin bernama.

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 at-rule yang terkait dengan kotak yang ingin Anda targetkan. CSS berikut menambahkan teks "Buku saya" ke kotak margin kiri bawah atau halaman sebelah kanan. Fungsi ini 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 kanan dan kiri bawah halaman 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 konsep tata letak halaman default di Chromium, jika halaman pertama dokumen cetak Anda tidak memiliki ruang untuk konten otomatis, hal ini akan mencegah konten browser ditampilkan di halaman berikutnya, meskipun halaman tersebut memiliki ruang.

Kemungkinan masa depan 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 dapat ditemukan. Referensi silang ini dapat dibuat menggunakan target-counter. Jika diterapkan ke link, link akan berfungsi untuk membuka 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. Di HTML, gunakan class untuk mengidentifikasi teks yang harus berupa catatan kaki, misalnya:

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

Kemudian, 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.