IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Mise en page CSS Discussion :

Utilisation "@media print" et "overflow"


Sujet :

CSS

  1. #1
    Membre expert
    Avatar de Samuel_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2012
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 376
    Points : 3 177
    Points
    3 177
    Billets dans le blog
    1
    Par défaut Utilisation "@media print" et "overflow"
    Hello,

    j'ai une page HMTL avec une DIV qui a pour définition :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <div style='height:250px;overflow:scroll;@media print{overflow:initial}'></div>

    Quand je souhaite imprimer ma page, l'ensemble du texte dans ma DIV n'est pas affiché mais seulement le haut.

    Une explication ?

    Samuel_

    Ne pas oublier mais aussi

    "L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai "

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    la règle @media ne peut se mettre dans un attribut style qui n'accepte que des propriétés/valeurs CSS.

  3. #3
    Membre expert
    Avatar de Samuel_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2012
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 376
    Points : 3 177
    Points
    3 177
    Billets dans le blog
    1
    Par défaut
    Ok d'accord ça explique tout.

    Du coup je suis bloqué ....
    Techniquement, je ne peux pas modifier mon header ... Du coup j'ai tenté d'insérer ma balise STYLE avec un bout de code JavaScript :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementsByTagName("head")[0].innerHTML += "<style media=\"print\" type=\"text/css\">zoneScroll{overflow:initial;}</style>"

    Mais aucun changement en vue.

    Quelqu'un aurait-il une autre solution ?

    Ne pas oublier mais aussi

    "L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai "

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    L'écriture de zoneScroll{overflow:initial;} est incorrecte il manque au moins un point précédent le zoneScroll pour que le sélecteur soit une class.

    Dans ce cas il faut que ton HTML ressemble à
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <div class="zoneScroll"></div>
    Comment utiliser les classes en CSS ?

    Dans ton cas la méthode qui me semble la plus propre, séparation des couches, est de passer par une feuille de style externe dans laquelle tu ajoutes ce que bon te semble.

    Dans ta page tu rajoutes un script d'insertion dynamique de la feuille de style, exemple
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var oLink = document.createElement('LINK');
    oLink.rel  = 'stylesheet';
    oLink.type = 'text/css';
    oLink.href = 'include_style.css';
    document.getElementsByTagName('HEAD')[0].appendChild( oLink);

    Avec le code HTML suivant
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <div class="class_div">Bonjour impression sur fond rouge!</div>
    et un fichier style include_style.css contenant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @media print{
      .class_div{
        background:#F00;
      }
    }
    tu devrais voir lors de l’aperçu avant impression le texte sur fond rouge, à toi ensuite d'adapter.

    code de test :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <!DOCTYPE html>
    <html lang="fr">
    <head>
    <meta charset="UTF-8">
    <title>Include LINK STYLE</title>
    <script>
    var oLink = document.createElement('LINK');
    oLink.rel  = 'stylesheet';
    oLink.type = 'text/css';
    oLink.href = 'include_style.css';
    document.getElementsByTagName('HEAD')[0].appendChild( oLink);
    </script>
    </head>
    <body>
    <div class="class_div">Bonjour impression sur fond rouge!</div>
    </body>
    </html>
    Tu peux en profiter pour mettre tous les styles dans ce fichier pour ne plus les avoir dans les balises.
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    .class_div{
      background:#ABC;
    }
     
    @media print{
      .class_div{
        background:#F00;
      }
    }
    attention toutefois à l'ordre de déclaration, le @media en dernier.

  5. #5
    Membre expert
    Avatar de Samuel_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2012
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 376
    Points : 3 177
    Points
    3 177
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par NoSmoking Voir le message
    L'écriture de zoneScroll{overflow:initial;} est incorrecte il manque au moins un point précédent le zoneScroll pour que le sélecteur soit une class.
    C'est une faute de recopiage, j'utilise un id donc j'ai placé un # avant le zoneScroll

    Citation Envoyé par NoSmoking Voir le message
    Dans ton cas la méthode qui me semble la plus propre, séparation des couches, est de passer par une feuille de style externe dans laquelle tu ajoutes ce que bon te semble.
    L'idée est bonne mais je ne peux pas insérer de fichier non plus ...

    En mixant mon code initial et le tiens, je vais essayer le code JS suivant :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var styleNode = document.createElement('style');
    styleNode.type = 'text/css';
    var styleText = document.createTextNode('@media print { #scrollZone {overflow:initial;}}');
    styleNode.appendChild(styleText);
    document.getElementsByTagName('head')[0].appendChild(styleNode);

    Cela te pense être une bonne idée ?

    Je test la solution et je vous redis !

    Ne pas oublier mais aussi

    "L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai "

  6. #6
    Membre expert
    Avatar de Samuel_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2012
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 376
    Points : 3 177
    Points
    3 177
    Billets dans le blog
    1
    Par défaut
    J'ai résolu mon problème !
    Voici le code JS :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    windows.onbeforeprint = function() {
    (document.getElementsById('scrollZone')).setAttribute('style', 'overflow:initial;');
    };

    Attention la fonctionnalité onbeforeprint n'est pas utilisable pour certains navigateurs (Google Chrome en autre, je crois).

    Ne pas oublier mais aussi

    "L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai "

  7. #7
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Tant mieux si ton problème est résolu, mais le code que tu montres ne risque pas de fonctionner...
    L'objet windows n'existe pas en JavaScript, donc lui affecter un événement ne sera pas possible.
    getElementsById() n'existe pas non plus : dans la mesure où un id doit être unique dans la page, seule la méthode getElementById() et renvoie un unique élément et non une collection.

    Ensuite, utiliser setAttribute pour gérer les styles est plutôt maladroit. Si tu travailles sur un objet de type HTMLElement, alors autant utiliser les méthodes propres à la manipulation de ce type d'objet et non des méthodes affectant le HTML.
    Bref, ton code deviendrait :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    window.onbeforeprint = function() {
        document.getElementById('scrollZone').style.overflow = 'initial';
    };
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Shell][sed]utilisation d'un sed pour gérer des doubles quotes
    Par bstevy dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 06/03/2015, 11h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo