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

Contribuez Discussion :

[FAQ] Cacher du javascript dans du CSS (IE-Only)


Sujet :

Contribuez

  1. #1
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 289
    Points
    3 289
    Par défaut [FAQ] Cacher du javascript dans du CSS (IE-Only)
    Voici un fichier CSS qui sera exécuté comme du javascript par IE, mais pas par FF, de quoi combler les problèmes CSS de IE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    html {
       color : expression ((function() {
          // A ne lancer que la première fois :
          if (!window.isCssScriptLoaded) {
            window.isCssScriptLoaded=true;
            // Do something here
          }
          // Retourner la valeur de la propriété CSS ici :
          return '';
          // Celle-ci est mis à jour régulièrement !
       })());
    }
    Pour des codes plus courts :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    html { 
       color : expression(aJSFunction());
    }
    Ou encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    html { 
       color : expression('aValue');
    }
    Une utilisation courrante, en combinaison avec document.body.scrollTop/scrollLeft, est le positionnage fixed (pour IE6, IE7 le gérant nativement (en mode Standard-Compilance)
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  2. #2
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 289
    Points
    3 289
    Par défaut
    Apprendre la balise BLINK à IE via un CSS (IEBlink.css)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
            BLINK {
               visibility: expression((function(){
                  if (!window.IEBlink) {
                    window.IEBlink = "visible";
                    setInterval(function() {
                      window.IEBlink = (window.IEBlink=="visible"?"hidden":"visible");
                      var blinks = document.getElementsByTagName("blink");
                      for (var i=0; i<blinks.length; i++) { blinks[i].style.visibility=window.IEBlink; }
                    }, 700)
                  }
                  return "";
               })());
            }
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  3. #3
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    Fremy : le code CSS n'est reconnu qu'à partir d'IE 7 c'est bien ça ?

    Comment ferais-tu pour les versions antérieures d'IE 7 ?

  4. #4
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 289
    Points
    3 289
    Par défaut
    Citation Envoyé par Auteur
    Fremy : le code CSS n'est reconnu qu'à partir d'IE 7 c'est bien ça ?

    Comment ferais-tu pour les versions antérieures d'IE 7 ?
    IE7, en mode Standard Compilance : fixed supporté.
    IE 7 en mode Back Compat : fixed non-supporté.
    IE 6-- : fixed non-supporté

    Solution (compatible IE 5++; FF 1.0++; Opera 7.0++)
    Code : 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    <html>
        <head>
            <script>
            function IEFixedElementPos() { 
              // IE 7 en mode standard
              if (window.ActiveXObject && window.XMLHttpRequest && window.external && document.compatMode=="CSS1Compat") {
                 return ("fixed");
              }
              return ("absolute");
            }
     
            function IEFixedElementTop(defaultTop) { 
              // IE 7 en mode standard
              if (window.ActiveXObject && window.XMLHttpRequest && window.external && document.compatMode=="CSS1Compat") {
                 return (defaultTop.toString() + "px;")
              }
              return ((document.body.scrollTop+defaultTop) + "px");
            }
     
            function IEFixedElementLeft(defaultLeft) { 
              // IE 7 en mode standard
              if (window.ActiveXObject && window.XMLHttpRequest && window.external && document.compatMode=="CSS1Compat") {
                 return (defaultLeft.toString() + "px;")
              }
              return ((document.body.scrollLeft+defaultLeft) + "px");
            }
     
            function IE100Width() {
                return (document.body.offsetWidth-21) + "px";
            }
     
            </script>
            <style><!--
            /* FF */
            .fixed {
              position:fixed;
              top:0px;
              left:0px;
            }
     
            /* IE */
            .fixed {
             position: expression(IEFixedElementPos());
             top: expression(IEFixedElementTop(0));
             left: expression(IEFixedElementLeft(0));  
            }
     
            /* FF */
            .max { width: 100%; }
     
            /* IE */
            .max { width: expression(IE100Width()); }
     
        --></style></head>
        <body>
            <div class="fixed max" style="background: green;">Always at top !</div>
            <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
            <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
            <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
            <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
            <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
            <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
            <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
            <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
            <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
            <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
        </body>
    </html>
    (Je n'ai volontairement pas mis de DoctType pour qu'IE considère la page comme une page mal-formée ==> Quirks Mode ==> Fixed non-géré
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  5. #5
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 289
    Points
    3 289
    Par défaut
    M^me opération mais pour un objet particulier :
    HTML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <div id="ID" style="cssProperty: expression('value')"></div>
    JavaScript :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById("ID").style.setExpression("cssProperty", "'value'");
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  6. #6
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 868
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 868
    Points : 16 258
    Points
    16 258
    Par défaut
    Plus simple pour le position:fixed :

    http://xhtml.developpez.com/faq/?pag...ans_javascript

  7. #7
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    je crois qu'il y a une erreur dans le code :
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    .fixe { 
      /* un bloc fixe situé en haut qui fait toute la largeur */ 
      position : fixed; 
      top: 0px; 
      left: 0px; 
      right: 0px; 
      width: 100%; 
      /* et le patch pour IE */ 
      position : expression("absolute"); 
      width : expression("100%"); 
      top : expression(document.body.scrollTop + this.offsetHeight - this.offsetHeight); 
      left : expression("0px"); 
    }
    si vous avez une correction à proposer

  8. #8
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 289
    Points
    3 289
    Par défaut
    Citation Envoyé par Bisûnûrs
    Plus simple pour le position:fixed :

    http://xhtml.developpez.com/faq/?pag...ans_javascript
    Le code de la FAQ utilise... expression() ==> exactement ce dont je parle

    Deplus, ca ne tiens pas compte du fait qu'IE 7 peut gérer FIXED en mode Standard Compilance...
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  9. #9
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    Citation Envoyé par Auteur
    je crois qu'il y a une erreur dans le code :
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    .fixe { 
      /* un bloc fixe situé en haut qui fait toute la largeur */ 
      position : fixed; 
      top: 0px; 
      left: 0px; 
      right: 0px; 
      width: 100%; 
      /* et le patch pour IE */ 
      position : expression("absolute"); 
      width : expression("100%"); 
      top : expression(document.body.scrollTop + this.offsetHeight - this.offsetHeight); 
      left : expression("0px"); 
    }
    si vous avez une correction à proposer
    je viens de tester le code avec et sans le
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.offsetHeight - this.offsetHeight
    et ô surprise il faut bien cette syntaxe :

    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     top : expression(document.body.scrollTop + this.offsetHeight - this.offsetHeight);

    et je ne comprends absolument pas pourquoi....

  10. #10
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 289
    Points
    3 289
    Par défaut
    document.body.scrollTop + "px" ?
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  11. #11
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 648
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 648
    Points : 11 137
    Points
    11 137
    Par défaut
    Citation Envoyé par FremyCompany
    document.body.scrollTop + "px" ?
    oui certes, il manque l'unité. Mais ce que je voulais dire c'est que je considerais comme une erreur (en rouge dans le code CSS) n'en est (visiblement) pas une...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    .fixe { 
      /* un bloc fixe situé en haut qui fait toute la largeur */ 
      position : fixed; 
      top: 0px; 
      left: 0px; 
      right: 0px; 
      width: 100%; 
      /* et le patch pour IE */ 
      position : expression("absolute"); 
      width : expression("100%"); 
      top : expression(document.body.scrollTop + this.offsetHeight - this.offsetHeight+"px"); 
      left : expression("0px"); 
    }
    Si j'enlève cette équation (qui logiquement vaut 0) l'élément n'est plus fixed


    Un exemple :
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html>
    <head>
    <title>Titre</title>
     
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <meta http-equiv="Content-Language" content="fr" />
     
    <style type="text/css">
    <!--
    .fond{
     /** Firefox **/
     position: fixed;
     top: 0px;
     left: 0px;
     
     height: 100%;
     width: 100%;
     z-index: 1000;
     display: none;
     border: none;
     
     /** IE **/
     position: expression("absolute");
     top: expression(document.body.scrollTop - this.offsetHeight + this.offsetHeight + "px");
     background-color: #AAAAAA;
    }
     
     
    //-->
    </style>
     
    <script type="text/javascript">
    <!--
    function ouvreBoite()
    {
      document.getElementById("idFond").style.display = "block";
    }
     
    function fermeBoite()
    {
      document.getElementById("idFond").style.display = "none";
    }
     
    //-->
    </script>
     
     
    </head>
     
    <body>
     
    <div id="idFond" class="fond">
    <input type="button" value="Fermer" onclick="fermeBoite()" />
    </div>
     
     
    <div>
     
    <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
    <input type="button" value="Ouvrir boite de dialogue" onclick="ouvreBoite()" />
    <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
    <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
    <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
    <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
    <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
    <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
    <br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
    </div>
     
    </body>
     
    </html>

    • Si tu laisses -this.offsetHeight + this.offsetHeight et que tu fasses un scroll sur la fenêtre pas de problème, la boite idFond est fixe...
    • Par contre, si tu enlèves -this.offsetHeight + this.offsetHeight et que tu fasses un scroll la boite n'est plus fixe

  12. #12
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 289
    Points
    3 289
    Par défaut
    Pour le moins étrange en effet...
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

Discussions similaires

  1. Une variable javascript dans du css
    Par grialat dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 11/01/2014, 12h16
  2. javascript dans du css
    Par Esil2008 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 21/05/2008, 18h11
  3. Réponses: 2
    Dernier message: 22/08/2007, 09h55
  4. Réponses: 4
    Dernier message: 09/07/2007, 16h26
  5. [débutant]javascript dans css?
    Par ozzmax dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 17/11/2005, 15h35

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