Il y a un certain temps, en novembre 2005, AlistApart.com a publié un article sur la façon dont ils ont publié un livre en utilisant uniquement HTML et CSS. Voir: http://alistapart.com/article/boom
Voici un extrait de cet article:
CSS2 a une notion de média paginé (pensez à des feuilles de papier), par opposition à un média continu (pensez à des barres de défilement). Les feuilles de style peuvent définir la taille des pages et leurs marges. Les modèles de page peuvent recevoir des noms et les éléments peuvent indiquer sur quelle page nommée ils souhaitent être imprimés. De plus, les éléments du document source peuvent forcer les sauts de page. Voici un extrait de la feuille de style que nous avons utilisée:
@page {
size: 7in 9.25in;
margin: 27mm 16mm 27mm 16mm;
}
Ayant un éditeur basé aux États-Unis, on nous a donné la taille de la page en pouces. Nous, Européens, avons poursuivi les mesures métriques. CSS accepte les deux.
Après avoir défini la taille et la marge de la page, nous devions nous assurer qu'il y avait des sauts de page aux bons endroits. L'extrait suivant montre comment les sauts de page sont générés après les chapitres et les annexes:
div.chapter, div.appendix {
page-break-after: always;
}
De plus, nous avons utilisé CSS2 pour déclarer les pages nommées:
div.titlepage {
page: blank;
}
Autrement dit, la page de titre doit être imprimée sur les pages portant le nom «vierge». CSS2 a décrit le concept de pages nommées, mais leur valeur ne devient apparente que lorsque des en-têtes et des pieds de page sont disponibles.
En tous cas…
Puisque vous souhaitez imprimer au format A4, vous aurez bien sûr besoin de différentes dimensions:
@page {
size: 21cm 29.7cm;
margin: 30mm 45mm 30mm 45mm;
/* change the margins as you want them to be. */
}
L'article plonge dans des choses comme la définition de sauts de page, etc., donc vous voudrez peut-être lire cela complètement.
Dans votre cas, l'astuce consiste à créer d'abord le CSS d'impression. La plupart des navigateurs modernes (> 2005) prennent en charge le zoom et pourront déjà afficher un site Web basé sur le CSS imprimé.
Maintenant, vous voudrez rendre l'affichage Web un peu différent et adapter la conception entière à la plupart des navigateurs (y compris les anciens, antérieurs à 2005). Pour cela, vous devrez créer un fichier CSS Web ou remplacer certaines parties de votre CSS d'impression. Lors de la création de CSS pour l'affichage Web, n'oubliez pas qu'un navigateur peut avoir N'IMPORTE QUELLE taille (pensez: «mobile» jusqu'aux «téléviseurs grand écran»). Signification: pour le CSS Web, la largeur de la page et la largeur de l'image sont mieux définies en utilisant une largeur variable (%) pour prendre en charge autant de périphériques d'affichage et de clients de navigation Web que possible.
EDIT (26-02-2015)
Aujourd'hui, je suis tombé sur un autre article plus récent de SmashingMagazine qui plonge également dans la conception pour l'impression avec HTML et CSS ... juste au cas où vous pourriez utiliser un autre tutoriel.
EDIT (30-10-2018)
Il a été porté à mon attention que ce size
n'est pas du CSS3 valide, ce qui est en effet correct - j'ai simplement répété le code cité dans l'article qui (comme indiqué) était du bon vieux CSS2 (ce qui est logique lorsque vous regardez l'année de l'article et cette réponse a été publiée pour la première fois). Quoi qu'il en soit, voici le code CSS3 valide pour votre commodité de copier-coller:
@media print {
body{
width: 21cm;
height: 29.7cm;
margin: 30mm 45mm 30mm 45mm;
/* change the margins as you want them to be. */
}
}
Dans le cas où vous pensez avoir vraiment besoin de pixels ( vous devriez en fait éviter d'utiliser des pixels ), vous devrez prendre soin de choisir le DPI correct pour l'impression:
- 72 dpi (Web) = 595 X 842 pixels
- 300 dpi (impression) = 2480 X 3508 pixels
- 600 dpi (impression de haute qualité) = 4960 X 7016 pixels
Pourtant, j'éviterais les tracas et utiliserais simplement cm
(centimètres) ou mm
(millimètres) pour le dimensionnement car cela évite le rendu des problèmes qui peuvent survenir en fonction du client que vous utilisez.