Plan de site Navigation
Blog & Blues Techniques et Standards de la Qualité Web

Accueil > weblog


- Lire le billet précédent - Lire le billet suivant -

Plusieurs styles alternatifs pour imprimer

Par Laurent Denis, le 23 septembre 2004.

Une discussion sur le forum OpQuast me trotte par la tête depuis quelques temps, à propos des feuilles de styles print. Le fait qu'une CSS print permettent d'obtenir un résultat imprimé différent du résultat affiché :

  • serait déroutant pour l'utilisateur qui s'attend à un résultat identique sur les deux médias ;
  • le priverait de la possibilité d'imprimer la page telle qu'il la voit, alors qu'il peut justement souhaiter imprimer les arrières-plans, les éléments décoratifs, les menus de navigations, etc. que la CSS print sert justement le plus souvent à éliminer.

C'est oublier qu'un document peut très bien avoir plusieurs feuilles de style d'impression.

Offrir plusieurs options d'impression CSS ?

En fait, la question se résume à proposer à l'utilisateur le choix entre au moins :

  • Ses propres préférences d'impression ;
  • L'impression limité à ce que l'on considère comme le contenu utile, c'est à dire sans menus et éléments décoratifs propres à l'écran ;
  • L'impression de la page avec tous ses éléments graphiques, mis autant que possible à l'échelle du format papier.

Le premier point est le plus évident : les préférences d'impression de l'utilisateur, définies dans sa propre CSS print, s'imposeront dès lors qu'il désactive le style auteur de la page, ou qu'il utilise systématiquement !important.

Les deux possibilités suivantes devraient pouvoir être gérées simplement par le biais des styles alternatifs, plus habituellement utilisés pour le media screen.

Mise en oeuvre à tester

Créons tout d'abord une simple page-test :

<h1>Test Plusieurs <abbr>CSS</abbr> print</h1>
<p id="style1">Paragraphe imprimé avec le style n°1</p>
<p id="style2">Paragraphe imprimé avec le style n°2</p>

Nous écrivons deux feuilles de style print :

  • print1.css n'imprime que le premier paragraphe :
    #style2 {
    display: none;
    }
    
  • print2.css n'imprime que le second paragraphe :
    #style1 {
    display: none;
    }
    

Nous lions chaque CSS print à notre document à l'aide d'un link, en les différenciant par leur rel et leur title respectifs (rappel : c'est la combinaison de ces valeurs d'attributs qui rend une feuille de style alternative ou préférée, et non plus permanente) :

  • print1.css sera notre style d'impression par défaut :
    <link
        rel="stylesheet"
        type="text/css"
        href="print1.css"
        media="print"
        title="style 1">
  • print2.css sera la feuille de style alternative :
    <link
        rel="alternate stylesheet"
        type="text/css"
        href="print2.css"
        media="print"
        title="style 2">

Pour permettre à l'utilisateur de choisir entre style 1 et style 2, nous devons les associer chacun à un style screen (ou all) : seuls ceux-ci sont en effet retenus par les styles switchers natifs des navigateurs actuels (Opera, Mozilla, Firefox, etc.) Créons donc les deux styles correspondants pour l'écran :

  • screen1.css (style par défaut), lié au document par :
    <link
        rel="stylesheet"
        type="text/css"
        href="style1.css"
        media="all"
        title="style 1">
  • screen2.css, lié au document par :
    <link
        rel="alternate stylesheet"
        type="text/css"
        href="style2.css"
        media="all"
        title="style 2">

screen2.css n'est là que pour permettre aux navigateurs de proposer le lien alternatif vers style 2 : cette feuille peut très bien être vide, voire même tout simplement inexistante. Il suffit qu'elle soit déclarée.

Résultats

Affichons à présent notre page-test dans un navigateur supportant les styles alternatifs, et testons l'aperçu avant impression pour style 1 et style 2 : nous obtenons bien deux impressions différentes de la même page (Testé dans Opera, FireFox et Mozilla Windows).

Il sera facile, sur ce principe, de proposer une impression limitée au contenu utile, et autant de modes d'impression diversement stylés qu'on le voudra...

Trackbacks

Les trackbacks pour ce billet sont temporairement fermés en raison d'une série d'attaques de spam.

Commentaires

roby, le 23 septembre 2004

Hello,
sur le meme sujet (enfin, il se rattache au sujet) une question qui m'intrigue depuis quelques jours. Est-ce qu'il est possible (avec ou sans l'aide des CSS) de ne pas afficher l'en-tete et le pied de page imprimé par defaut par la navigateur (date, nombre de pages, url, titre de la page)?

Il est clair que l'utilisateur peut parametrer cet affichage directement dans les options de son navigateur. J'aimerais trouver un script ou une astuce me permettant de controler cela.

Pour IE il existe un script ActiveX qui permet d'atteindre mon but. Je n'ai rien trouvé pour les autres navigateurs.

Une idee?

François Parmentier, le 23 septembre 2004

Dans mon Firefox 1.0PR, je peux, en Print Preview, voir le premier style, passer au deuxième, mais pas revenir au premier.

Fonctionnalité tellement peu utilisée qu'elle est encore buggée?

Laurent Denis, le 23 septembre 2004

@Roby > Ce n'est ni faisable (sauf cas technologie non sécurisée type ActiveX), ni souhaitable : les options de configuration de l'utilisateur sont là pour répondre à ses besoins spécifiques, dont tu ne peux rien présupposer. C'est la marge de manoeuvre qui peut justement lui rendre ton site accessible ou conforme à ses besoins.

@François > Hum... Je ne rencontre aucun problème dans ma bonne vieille version 0.8 smiley clin d'oeil
(Je repasse au premier style en fermant l'aperçu avant impression et en revenant à "style 1")

roby, le 23 septembre 2004

merci pour ta réponse smiley clin d'oeil

Stéph', le 23 septembre 2004

[HORS SUJET]
Laurent tu devrais retirer ton lien sur Opquast car il renvoit sur une page d'erreur loin d'être personnalisée :-<
Le root du site n'est d'ailleurs pas vraiment mieux.
J'espère qu'on retrouvera l'historique des discuss au retour du site...

Elie, le 23 septembre 2004

Oui Oui Oui, désolé.
Nous sommes en plein travaux, mais tout sera en place lundi et les discussions seront de nouveau opérationnelles (archives compris).

Les commentaires pour ce billet sont temporairement fermés en raison d'une série d'attaques de spam.