FORUM Tom's Hardware » Programmation » PHP & MySQL & ASP » [CSS ?] Imprimer le contenu d'un DIV
 

[CSS ?] Imprimer le contenu d'un DIV

Il y a 387 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici
Ajouter une réponse



 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : [CSS ?] Imprimer le contenu d'un DIV
 
Plus d'informations

Bonjour,

Malgré mes recherches sur le net, et la création d'une feuille de style CSS print.css, je ne parviens pas à imprimer le contenu d'un div.

Je m'explique...
J'ai une page, composée de 3 DIV :

---------------------------
| DIV_BANNIERE |
---------------------------
| DIV_MENU |
---------------------------
| DIV_TABLEAU |
| |
| |
---------------------------

Je souhaite imprimer uniquement le contenu du tableau, mais la hauteur du DIV correspondant est fixe : une scrollbar permet d'afficher la suite du texte.

J'ai créé un fichier print.css, contenant ceci :

Code :
  1. /*  début de la Partie a ne PAS imprimer  */
  2. #menu{
  3.   display:none;
  4. }
  5.  
  6. #banniere{
  7.   display:none;
  8. }
  9. /*  fin de la Partie a ne PAS imprimer  */
  10. /*  début de la Partie a imprimer  */
  11. #tableau{
  12.   background-color:#FFFFFF;
  13.   display:block;
  14.   clip:auto;
  15.   overflow:visible;
  16. }
  17.   /*  fin de la Partie a imprimer  */



J'ai donc ajouté la ligne suivante, dans ma page HTML :

Code :
  1. <link rel="stylesheet" type="text/css" media="print" href="print.css" />



Enfin, la procédure d'impression doit être lancée lors du clic sur un bouton "Imprimer" figurant dans le menu :

Code :
  1. <input type = 'button' style='width: 200px;' value = 'Imprimer le tableau actuel' onclick="javascript:window.print()"/>



Mais l'impression ne fonctionne pas, la page entière s'imprime (bannière, menu et tableau).
D'autre part, seule la partie du tableau visible sur la page est imprimée.

Grand merci par avance à ceux qui prendront le temps de m'aider,
Alex


Message édité par Bounty59 le 13-02-2007 à 13:19:47

G.M.G.V.S.O.
Profil : Modo matériel
Plus d'informations

C'est pas

Code :
  1. display:none;



mais

Code :
  1. visibility: hidden;



Qu'il faut mettre ;)


---------------
SPAM & WAREZ = Ban!
Ultimate Boot CD | Memtest+
Mon bar préféré à Lyon ! | Bijoux Fantaisie de Créateur !
Inside my own Second Life

"display: none;" fonctionne très bien..

Il faut juste penser soit à placer la feuille "print" après la feuille générale, soit à définir le média de sortie de la feuille générale à media="screen" ainsi :

Code :
  1. <link rel="stylesheet" type="text/css" media="screen" href="css_principale.css" />


Après, ça fonctionne..

Sans indication de média de sortie sur le lien de la CSS, ça revient à préciser media="all" ;).. Sans oublier que l'ordre des CSS est important, les règles étant toujours cumulatives.

:jap:


Message édité par Johan_et_P irlouit le 13-02-2007 à 18:32:07

---------------
Retrouvez moi sur mon blog : http://www.nicolasullern.net/leblog/
Et aussi sur :
http://www.linkedin.com/in/nicolasullern
http://www.viadeo.com/fr/profile/nicolas.ullern
http://www.copaing.net/johanpirlouit/
G.M.G.V.S.O.
Profil : Modo matériel
Plus d'informations

En effet, toutes mes confuses :jap:

Néanmoins sauf erreur de ma part mettre "display: none;" risque de fusiller ton affichage (enfin pas dans le cas present) si tu alignes des blocs div côte à côte, non ?

(si j'ai le temps je testerais ce soir, vois si ça laisse bien la place ou pas)


---------------
SPAM & WAREZ = Ban!
Ultimate Boot CD | Memtest+
Mon bar préféré à Lyon ! | Bijoux Fantaisie de Créateur !
Je me la pête
Profil : /!\ Docteur - PDG
Plus d'informations

Tu as raisons Boub, display: none et le bloc disparaît y compris sa place. Visibility: hidden le masque mais il garde son emplacement (devenu alors vide).

G.M.G.V.S.O.
Profil : Modo matériel
Plus d'informations

Merci de la précision, ça m'evites de tester :ange:

(mode feignant ON)


---------------
SPAM & WAREZ = Ban!
Ultimate Boot CD | Memtest+
Mon bar préféré à Lyon ! | Bijoux Fantaisie de Créateur !
Inside my own Second Life

Shino-Genin a écrit :

Tu as raisons Boub, display: none et le bloc disparaît y compris sa place.


Ce qui semble intéressant dans le cas présent ;)..

a écrit :

(mode feignant ON)


(bienvenu au club :ange:) ; si si moi aussi, parfois)

:jap:


---------------
Retrouvez moi sur mon blog : http://www.nicolasullern.net/leblog/
Et aussi sur :
http://www.linkedin.com/in/nicolasullern
http://www.viadeo.com/fr/profile/nicolas.ullern
http://www.copaing.net/johanpirlouit/
Profil : Pointeur
Plus d'informations

un développeur DOIT etre fénéant :o

et surtout appliquer le principe DRY (Don't Repeat Yourself)

Je me la pête
Profil : /!\ Docteur - PDG
Plus d'informations

On est pas là pour faire le boulot à votre place :fou:


:D

Plus d'informations

Bonjour,

et merci pour vos réponses.
Cependant, ça ne fonctionne toujours pas... :(

Je m'explique... En fait, j'ai, dans le menu, une combo qui masque ou affiche des DIV en fonction de l'élément sélectionné par l'utilisateur.

Pour ce faire, je passe par une fonction Javascript, en dessous de laquelle j'ai donc indiqué le lien vers la feuille de style print.css, comme suit :

Code :
  1. <html>
  2. <head>
  3. <style type="text/css" media="screen">
  4. body{
  5.   font:arial, verdana;
  6. }
  7. table{
  8.   border-collapse: collapse;
  9. }
  10. td{
  11.   border: 0px solid black;
  12. }
  13. a:hover{
  14.   text-decoration:none;
  15. }
  16. </style>
  17. <script language="javascript">
  18. function foncAfficheBan(){
  19.     if (document.formCritSuivComptable.date.value=='' || document.formCritSuivComptable.date2.value==''){
  20.             alert("Les deux dates doivent être renseignées, merci." );
  21.         }
  22.     else{
  23.     document.formCritSuivComptable.submit();
  24.         }
  25. }
  26. function foncListeClients(selectindex){
  27. if(selectindex==3){
  28.     document.getElementById('cli').style.display = 'block';
  29.     }
  30. else{
  31.     document.getElementById('cli').style.display = 'none';
  32. }
  33. }
  34. function listDeroulCompt(selRub){
  35.         if (selRub == 'produit'){
  36.             document.getElementById('listProd').style.display = 'block';
  37.             document.getElementById('listTransp').style.display = 'none';
  38.         }
  39.         else if (selRub == 'transp'){
  40.             document.getElementById('listProd').style.display = 'none';
  41.             document.getElementById('listTransp').style.display = 'block';
  42.             document.getElementById('cli').style.display = 'none';
  43.         }
  44. }
  45. function effacecli(){
  46. document.formCritSuivComptable.cli.numCli.value = '';
  47. }
  48. </script>
  49. <link rel="stylesheet" type="text/css" media="print" href="print.css" />
  50. </head>



Dans le <body>, par défaut, j'ai mis la propriété display de certaines DIV à none, d'autre à block...
Le souci peut-il provenir de là ? Comment faire alors ?...



G.M.G.V.S.O.
Profil : Modo matériel
Plus d'informations

AMHA il faut redefinir TOUTES les propriétés dans ton print dans ce cas ...

+ es tu sur qu'il soit bien chargé ? ;)


---------------
SPAM & WAREZ = Ban!
Ultimate Boot CD | Memtest+
Mon bar préféré à Lyon ! | Bijoux Fantaisie de Créateur !
Plus d'informations

Salut boubpopsyteam,

Je ne comprends pas trop ta réponse... Quelles autres propriétés puis-je redéfinir dans mon print.css ?!

J'ai fait une page de test, tout simple. Et en effet, lorsque les propriétés "display" des DIV on été entrées en dur dans la page html, le CSS print n'est pas pris en compte lors du clique sur le bouton "Imprimer".

Comment faire ?

Plus d'informations

UP s'il vous plait m'sieurs dames ;(

G.M.G.V.S.O.
Profil : Modo matériel
Plus d'informations

Dans ton print.css redefinie les propriétés de TOUS les éléments.


---------------
SPAM & WAREZ = Ban!
Ultimate Boot CD | Memtest+
Mon bar préféré à Lyon ! | Bijoux Fantaisie de Créateur !
Plus d'informations

Bonjour Boub,

De quels autres éléments parles-tu ?!
Dans mon print.css (voir code au début du topic), je redéfinis bien les propriétés Display de tous les éléments (les 3 div), non ?!


Message édité par Bounty59 le 22-02-2007 à 14:01:57
G.M.G.V.S.O.
Profil : Modo matériel
Plus d'informations

On dirait que tu as raison ;)

Tu l'as bien mis apres la principale ?

(principale mise elle aussi dans un fichier à part)


---------------
SPAM & WAREZ = Ban!
Ultimate Boot CD | Memtest+
Mon bar préféré à Lyon ! | Bijoux Fantaisie de Créateur !
Plus d'informations

Salut Boub,

Oui. Voir mon message et code du 14/02.

Plus d'informations

UP ? :(

Plus d'informations

J'arrive tard, mais qui sait, ça peut aider certains qui viendraient là ...
Pour ma part j'utilise toujours UNE SEULE feuille de style CSS appelée par mes pages html
Dans cette feuille de style, j'ai des sections écran ( entre @media screen { }) des sections imprimante ( entre @media print{ }), le reste (entre rien !) est commun écran et imprimante .

Pour ne pas imprimer, par exemple, le DIV contenant les menus, voilà comment je procède :
@media screen {
div#MENUS
{
position: absolute;
top: 135px; /* doit être égal à 15 + hauteur de img#bandeau_top */
left: 10px;
width: 15%; /* largeur à faire correspondre à celle de img#bandeau_gauche */
}
}

@media print {
div#MENUS { display: none }
}

bien entendu, la recette est applicable à tout élément du CSS : par exemple, vous voulez dans les paragraphes courants du texte 12px à l'écran et 10px à l'imprimante, ça donne
@media screen {p {font-size:12px;}} @media print{p {font-size:10px;}}

zeb
Profil : Modérateur libre
Plus d'informations

Merci jmangelini pour ces précisions.
En général, le déterrage de topic, c'est mal :fou:
Mais à bon escient, c'est bien