Faire une feuille de style CSS « print » pour l`impression

Transcription

Faire une feuille de style CSS « print » pour l`impression
Faire une feuille de style CSS « print » pour l'impression
Référence :
http://www.alsacreations.com/tuto/lire/586-feuille-css-impression.html
Pourquoi une feuille de style pour l'impression ?
Certains concepteurs web ont la fâcheuse habitude de tout lire à l'écran, et de ne jamais imprimer les
pages des sites web qu'ils consultent. Pourtant, un nombre impressionnant d'utilisateurs passe
régulièrement par une imprimante pour accéder aux contenus d'un site web, ou pour les conserver.
C'est pénible de lire à l'écran, je préfère imprimer les articles pour les lire plus tard, tranquillement, etc.
Le réflexe « naturel », pour imprimer une page est, par exemple en faisant « Fichier > Imprimer… ». Mais
le résultat peut être très aléatoire. Le plus souvent, on se retrouve avec trois pages à imprimer, pour une
seule vraie page de contenu.
Certains sites proposent également des versions « imprimables », pages HTML épurées ou documents
PDF, de certains de leurs contenus. Le problème, c'est qu'il est difficile de savoir à l'avance quelle page
un utilisateur voudra imprimer.
Il est donc important de proposer une solution simple, intégrée au navigateur et fonctionnelle pour
toutes les pages d'un site. C'est là qu'interviennent les feuilles de style CSS pour l'impression.
Limites des feuilles de style pour l'impression
Certaines parties des spécifications CSS n'étant pas ou peu supportées par la majorité des navigateurs,
on ne pourra pas utiliser de façon fiable :
• la gestion du format de papier ;
• la gestion des marges d'impression;
• les sauts de page avant/après un élément ;
• les paragraphes solidaires ;
• la gestion des lignes veuves et orphelines ;
• et autres propriétés avancées de mise en forme sur papier.
Il sera donc nécessaire de faire simple. Pensez aux feuilles de style pour l'impression comme à une
facilité offerte à l'utilisateur, mais surtout pas comme à un moyen d'obtenir une version imprimée de
qualité d'un document. Pour les impressions au rendu fidèle, le format de choix est le PDF.
La feuille de style pour l'impression est appelée de la manière suivante :
<link rel="stylesheet" href="print.css" type="text/css" media="print" />
Attention à bien préciser media="screen" à votre CSS principale sous peine de voir la feuille de style
print.css hériter des styles réservés à l’affichage :
<link rel="stylesheet" href="normalize.css" type="text/css" media="screen" />
<link rel="stylesheet" href="style.css" type="text/css" media="screen" />
<link rel="stylesheet" href="print.css" type="text/css" media="print" />
css-print.docx
1/6
Impression d'un document web : que faut-il imprimer ?
La première question qui se pose, c'est celle de l'opportunité d'imprimer – ou pas – certains éléments de
la page. De nombreux éléments utiles à l'écran ne seront pas utiles sur le papier. Il s'agit alors de les
identifier, et de les « supprimer » pour l'impression.
Nous avons donc la possibilité de ne pas imprimer du tout certains éléments. Qu'est-ce qui doit être
imprimé, et qu'est-ce qui ne doit pas l'être ? C'est à chacun de décider de ce qu'il souhaite voir figurer
sur les pages imprimées. Voici tout de même quelques pistes :
•
Faut-il imprimer l'en-tête, le logo ou le titre du site? Ça n'est pas indispensable, mais on peut
vouloir garder, à l'impression, une identification forte du site. En général, si on ne supprime pas
complètement cet élément, on affichera quelque chose de sobre, ne prenant pas une surface
papier trop importante.
•
Faut-il imprimer le menu de navigation? À partir du moment où il est impossible pour
l'utilisateur de cliquer sur le papier (c'est une évidence, mais autant le rappeler), la présence
d'un système de navigation ne se justifie pas vraiment. En général, c'est la première chose que
l'on supprimera pour l'impression.
•
On voudra peut-être imprimer le fil d'Ariane (un système de navigation du type : « Vous êtes
ici : Accueil > Rubrique > Page en cours »), dans la mesure où il permet de situer la page
imprimée dans l'arborescence du site. On pourra aussi considérer que cette information n'est
pas indispensable, voire perturbante sur papier.
•
Faut-il imprimer les formulaires, et plus généralement tous les éléments d'interaction avec le
site? Là encore, c'est peu probable. Pour la feuille de style print d'un blog ou d'un site offrant
la possibilité de laisser des commentaires via un formulaire, on cachera probablement ce
formulaire. S'il s'agit d'un formulaire sur une page d'inscription à un site, par contre, il se
pourrait qu'un utilisateur veuille l'imprimer, et on pourra donc souhaiter le garder.
•
Est-ce utile d'imprimer toutes les images présentes sur une page? Les images prennent de la
place sur la page et consomment beaucoup d'encre. Il ne faut donc imprimer que les images
indispensables à la bonne compréhension du contenu textuel, ou apportant elles-mêmes une
information importante. À noter que, avec les navigateurs ayant une bonne compréhension des
sélecteurs CSS avancés, il est possible de remplacer l'image par son texte alternatif (le contenu
de l'attribut alt).
•
Pour finir, attention à ne pas avoir la main excessivement lourde. Il ne s'agit pas de réduire un
contenu à sa « plus pure expression », en supprimant des informations n'appartenant pas
directement au contenu principal de la page. Certaines informations relatives à un article
(catégorie, auteur, date de publication, date de modification…) sont utiles quel que soit le média
de restitution.
Bien entendu, pour cacher (ou garder affichés) tous ces éléments, il faudra pouvoir les identifier
clairement dans la feuille de style CSS. Cela signifie que le code HTML devra être correctement organisé,
avec des éléments et des conteneurs portant des classes (attribut HTML class) et des identifiants
(attribut HTML id) pertinents.
css-print.docx
2/6
En résumé, organisez bien vos contenus HTML, puis déterminez ce qui, imprimé, sera utile aux
utilisateurs de votre site, et ce qui ne le sera pas. On ne garde à l'impression que le contenu vraiment
utile. Au-delà d'un contenu imprimé plus clair, il ne faut pas douter que l'internaute vous sera
reconnaissant pour le temps d'impression plus court et les économies d'encre, de papier et d'énergie
réalisés.
Les unités adaptées au format papier
Les unités les mieux adaptées à l'impression sont les points (pt), les centimètres (cm) et millimètres
(mm), et les pourcentages (%).
Les points typographiques ou points, symbole pt, sont les plus adaptés pour fixer la taille du texte.
Les millimètres (symbole mm) et centimètres (symbole cm), ainsi que les pourcentages (symbole %)
seront utiles pour le dimensionnement des blocs, pour déterminer les marges des éléments, etc.
Les liens imprimés
Dans un navigateur totalement conforme avec le CSS2, nous pouvons insérer entre parenthèses les URL
des liens après chacun d'entre eux, les rendant ainsi utiles à quiconque ayant un document papier. #div
a:link:after (voir l'exemple).
CSS3 offre la possibilité de transformer un grand nombre de liens relatifs en liens absolues. N'importe
quel sélecteur d'attribut qui utilise l'opérateur ^= sélectionne des éléments basés sur le début de la
valeur de l'attribut. Donc, nous pouvons sélectionner n'importe quel href qui commence par une barre
oblique et insérer suffisamment de texte pour remplir la valeur. Cette règle transforme une valeur
comme /issue/144/ en http://www.alistapart.com/issues/144. Elle ne peut rien pour les URL relatives
qui ne commencent pas par des barres obliques. #content a[href^="/"]:after (voir l'exemple)
Non supporté par IE6. IE7, IE8, Opera et les navigateurs basés les moteurs Webkit (Safari et Chrome) et
Gecko (Firefox) supporte ces sélecteurs.
Saut de page manuel
Si vous voulez forcer ou empêcher un saut de page, vous pouvez le faire au moyen de page-breakbefore ou de page-break-after (voir l'exemple).
Les astuces
Voici quelques exemples :
•
Enlever tout background sur la page imprimable
html body {
background: none;
}
css-print.docx
3/6
•
Supprimer la navigation
#menu, #menu-utilitaire {
display: none;
}
•
Supprimer les éléments qui ne seront pas affichés
#banniere, #col-droite, #footer {
display: none;
}
•
Affichage du titre
h1 {
margin: 0;
padding: 0;
text-indent: 0;
line-height: 25pt;
font-size: 25pt;
}
•
Modification de la couleur des titres et des liens
h2, h3, #contenu h3, #contenu a, a {
color: #000;
}
•
Pour les marges imprimées
@page { margin: 10%; }
•
/* pour les marges de l'imprimante */
Augmenter la largeur du texte à lire
#contenu {
width: 100%;
margin: 0;
padding: 0;
float: none !important;
}
•
/* ou margin: 0 5%; */
Remettre les backgrounds aux valeurs par défaut
body {
background: #fff;
}
/* ou background: none; */
#content {
background: transparent;
}
•
Remettre la couleur des textes par défaut
#author {
color: #000;
}
•
Afficher la destination des liens, les rendant utiles à quiconque ayant un document papier
a:link:after {
content: " (" attr(href) ") ";
}
css-print.docx
4/6
•
CSS3 offre la possibilité de transformer un lien relatif en lien absolue. Elle ne peut rien pour les URL
relatives qui ne commencent pas par des barres obliques.
Par exemple, un lien relatif comme suit : /
a[href^="/"]:after {
content: " (http://www.alistapart.com" attr(href) ") ";
}
#contenu a[href^="/"]:after {
content: " (http://www.alistapart.com" attr(href) ") ";
}
•
Faites ressortir des liens présents dans le texte
a:link {
font-weight: bold;
/* moi, je préfère sans… */
text-decoration: underline;
color: #00f;
/* ou #000; */
}
•
Enlever les bordures autours des liens
img, img a, a {
border: none !important;
}
•
Utiliser des tailles de polices cohérentes avec une imprimante
body {
font-size: 12pt;
}
•
Modifier les polices de caractère
body {
font-family: "times new roman",times,serif;
}
•
Penser à gérer l’affichage des commentaires s’ils sont nombreux
#comments {
page-break-before: always;
}
•
Remettre le texte des droits légaux au centre de la page
#legal {
text-align: center;
}
•
Afficher un message à l’impression uniquement
#printMsg {
display: block;
}
css-print.docx
5/6
Note 1 :
Pour les marges du document imprimé, les spécifications CSS préconisent des marges de 10%, que l'on
peut appliquer avec le code suivant : @page { margin: 10% }.
Cependant, la plupart des navigateurs n'en tiennent pas compte, et appliquent des marges par défaut,
ou bien des marges configurées par l'utilisateur.
Note 2 :
Pensez en particulier au fait que votre document pourra être imprimé en noir et blanc, par exemple sur
une imprimante laser d'entreprise. Et même s'il est imprimé en couleur, il sera imprimé sur papier blanc,
la plupart des navigateurs web désactivant par défaut l'impression des images et couleurs de fond.
Note 3 :
Petit rappel : les images de fond ne sont, la plupart du temps, pas imprimables. Si on veut imprimer un
logo du site, ce logo devra être une image présente dans le contenu HTML, via la balise <img>.
Aller plus loin…
Vous êtes prêt, maintenant, à réaliser une feuille de styles CSS dédiée au média print. Nous vous
proposons ci-dessous quelques liens vers des tutoriels aux techniques plus avancées.
•
•
•
•
http://www.pompage.net/pompe/impression/
http://www.pompage.net/pompe/votreimpression/
http://actuel.fr.selfhtml.org/articles/css/mise_en_page_imp/ (très bien)
http://www.kiwano.fr/utiliser-nouveaux-selecteur-css-3/ (CSS 2.1 et CSS3)
css-print.docx
6/6