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

JavaScript Discussion :

placer un bloc à une hauteur qui dépend de résolution écran


Sujet :

JavaScript

  1. #21
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 075
    Points : 44 657
    Points
    44 657
    Par défaut
    je confirme bien évidement ce qui est dit
    Ca plante
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <!DOCTYPE html>
    <html>
    <head>
    <script type="text/javascript">
    var top = 50;
    // ICI cela ne marche pas BODY n'est pas encore defini
    document.body.innerHTML += '<div style="position:absolute;top:' +top +'%">ICI<\/div>'
    </script>
    </head>
    <body>
    </body>
    </html>
    Ca marche
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <!DOCTYPE html>
    <html>
    <head>
    </head>
    <body>
    <script type="text/javascript">
    var top = 50;
    // ICI cela marche BODY est defini
    document.body.innerHTML += '<div style="position:absolute; top:'+top +'%">ICI<\/div>'
    </script>
    </body>
    </html>
    ou encore
    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>
    <head>
    <script type="text/javascript">
    window.onload = function(){
      var oDiv = document.createElement('DIV');
      oDiv.style.position = 'absolute';
      oDiv.style.top = '50%';
      var oTxt = document.createTextNode('ICI');
      oDiv.appendChild( oTxt);
      document.body.appendChild( oDiv);
    }
    </script>
    </head>
    <body>
    </body>
    </html>

  2. #22
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    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
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
      <title>test</title>
     
     
      <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
     
    </head>
     
     
    <body>
     
    <script type="text/javascript"> var top, res = screen.height;
    alert(res);
    switch(res) {
    case 800 :
    top = 20; alert('ici');
    break;
    default :
    top = 60;
    break;
    }
    document.body.innerHTML +='<div style="position: absolute; top:'+top+ '%">';
    </script>
    <p>coucou</p>
    </div>
     
    </body>
    </html>
    En théorie, ça devrait donc marcher...Et ben, non...

  3. #23
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    En fait, qu'est-ce que c'est censé faire pour marcher ? Ta div doit-elle contenir quelque chose ? À quoi correspond le </div> de la ligne 27 ?

  4. #24
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Encore autre chose : c'est à mon avis plus intéressant de regarder la taille de la fenêtre plutôt que la taille de l'écran, car la barre des tâches, les bords de la fenêtre, les différentes barres d'outils et que-sais-je-encore réduisent la partie visible de ta page.

    Le problème c'est que les navigateurs ont chacun leur avis là-dessus (un aperçu du bordel). Pour simplifier les choses, on va déjà mettre ta page en mode standard. Sous Firefox, fais clic-droit > informations sur la page, tu verras cette ligne :
    Mode de rendu : Mode de compatibilité (quirks)
    C'est parce que ton DOCTYPE n'est pas complet. Utilise celui-ci :
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    	"http://www.w3.org/TR/html4/loose.dtd">
    Avec ta page en mode standard, il ne reste plus que deux cas. Dans le cas le plus courant, on a accès à la variable window.innerHeight. Si celle-ci n'est pas définie, on se rabat sur les versions 6 à 8 d'IE qui utilisent document.documentElement.clientHeight. Ce qui donne un bout de code à peine plus long :
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var top, res;
    if (window.innerHeight) {
    	res = window.innerHeight;
    } else {
    	res = document.documentElement.clientHeight;
    }

    À ma connaissance, les seuls navigateurs qui passent à la trappe sont IE4 et 5, mais avec de tels ancêtres, connaître la hauteur de la fenêtre est le cadet de nos soucis

  5. #25
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    À quoi correspond le </div> de la ligne 27 ?
    Vu que la div est ouverte ligne 24, il vaut mieux la refermer...

    En fait, qu'est-ce que c'est censé faire pour marcher ?
    que la div soit bien à la position verticale donnée par la variable js top.

    c'est à mon avis plus intéressant de regarder la taille de la fenêtre plutôt que la taille de l'écran
    Mon idée est de placer un truc (un pied de page) en bas de le fenêtre, sachant que la mise en page est "cradement" faite avec des tables html, et donc que si le contenu de la page est tout petit, cela remonte le pied de page ; donc même si la mise en page est crade (elle est faite par l'outil générateur de site web utilisé), utiliser une div placée verticalement uniquement en fonction de la taille de la page devrait placer le pied de page là où il faut. (L'idée tient-elle la route ?)

  6. #26
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    Je viens de coder ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var top, res;
    if (window.innerHeight) {
    res = window.innerHeight;
    } else {
    res = document.documentElement.clientHeight;
    } 
    alert(res);
    et le alert(res) donne 0...

  7. #27
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    Ca marche comme il faut en reprenant le code de NoSmoking :
    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
    <script type="text/javascript">
    var top, res;
    if (window.innerHeight) {
    res = window.innerHeight;
    } else {
    res = document.documentElement.clientHeight;
    }
    //res=screen.height;
    alert(res);
    switch(res) {
    case 800 :
    top = 150; alert('ici');
    break;
    default :
    top = 260;
    break;
    }
    window.onload = function(){
    var oDiv = document.createElement('DIV');
    oDiv.style.position = 'absolute';
    oDiv.style.top = top;
    var oTxt = document.createTextNode('coucou');
    oDiv.appendChild( oTxt);
    document.body.appendChild( oDiv);
    }
    </script>
    mais juste avec la hauteur de l'écran, pas celle de la fenêtre : qu'est-ce qui ne va pas ?

  8. #28
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    et le alert(res) donne 0...
    Tu as bien mis le DOCTYPE que je t'ai donné ?

    Citation Envoyé par laurentSc Voir le message
    Vu que la div est ouverte ligne 24, il vaut mieux la refermer...
    Ah ok, j'ai compris sur quoi on se comprenait pas En fait, la <div> de la ligne 24 est bel et bien fermée. Je t'ai déjà parlé de la console F12, regarde l'onglet HTML : tu vois le DOM, la représentation arborescente des éléments de la page. Le innerHTML ne fait rien de plus qu'insérer des objets dans le DOM, et pour ça, il doit refermer les balises qui sont laissées ouvertes.

    Citation Envoyé par laurentSc Voir le message
    utiliser une div placée verticalement uniquement en fonction de la taille de la page devrait placer le pied de page là où il faut. (L'idée tient-elle la route ?)
    Oui, elle est tout à fait pertinente. Cependant, il y a beaucoup plus simple : la propriété CSS bottom

    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
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    	"http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <title>CSS bottom</title>
    <link rel="stylesheet" type="text/css" href="footer.css" />
    </head>
    <body>
     
    <div id="content">
    	<div id="orange"></div>
    	<div id="vert"></div>
    	<div id="bleu"></div>
    </div>
     
    <div id="footer">
    	<p>coucou</p>
    </div>
     
    </body>
    </html>
    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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    html
    {
    	/* important pour positionner le footer */
    	position: relative;
    }
    body
    {
    	/* doit être égal à la hauteur totale du footer
    	(hauteur + padding) */
    	padding-bottom: 3em;
    }
    #footer
    {
    	height: 2em;
    	/* je rajoute un padding pour que les marges des éléments internes
    	ne dépassent pas */
    	padding-bottom: 1em;
    	position: absolute;
    	bottom: 0;
    	left: 0;
    }
     
    /* le dernier élément du footer doit avoir une marge inférieure au
    padding du footer */
    #footer p { margin: 0.8em; }
     
    /* le reste c'est juste pour mieux voir */
    body { width: 150px; margin: 0; }
    #footer { width: 100%; background: gray; color: white; } 
    #content div { width: 200px; height: 500px; margin: 1em; }
    #orange { background: #fd9; }
    #vert { background: #df9; }
    #bleu { background: #ccf; }
    Il reste un léger problème : cette solution ne marche pas sous IE7 et moins. Si tu penses que tu ne peux pas te permettre de laisser de côté tes visiteurs qui utilisent toujours IE7-, on repartira sur la solution JavaScript

  9. #29
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    Je n'ai pas encore regardé la solution CSS (je ne sais pas s'il est important que ça marche pour IE7 ou moins, vu que ce n'est pas pour moi), mais j'ai regardé la solution js ; en effet le doctype n'était pas à jour ; je l'ai fait, mais encore problème : avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var top, res;
    if (window.innerHeight) {
    	res = window.innerHeight;
    } else {
    	res = document.documentElement.clientHeight;
    } 
     
     
    alert('res='+res);
    (désolé, pas encore passé à la console) Le alert me donne 0...

  10. #30
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Hmm Je ne comprends pas. Que t'indique la console pour « mode navigateur » et « mode de document » ?

  11. #31
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    c'est en anglais, même si la langue du PC est le français
    Browser mode : IE8
    Document mode : Quirks

  12. #32
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Tu es toujours en mode quirks (= non standard), donc c'est normal que ça donne 0. Re-vérifie ton DOCTYPE, ça ne peut venir que de là Et vérifie aussi qu'il n'y aucun caractère avant, pas même un espace ou un saut de ligne.

    Ça peut être aussi un problème d'encodage, regarde la config de ton éditeur de texte : il y a un mode UTF8 bizarre qui rajoute un caractère invisible en début de fichier.

  13. #33
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    Bien vu : avant le doctype, il y avait des lignes de PHP et notamment des echos ; je les ai déplacés juste après le doctype, et maintenant, ça affiche 571...
    Et pour un étudiant, tu en connais un rayon...

  14. #34
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Merci du compliment Ça fait pas mal de temps que je bourlingue sur les fora d'entraide, et j'aime bien vérifier ce que je dis avant de répondre. En passant du temps sur Google, j'ai appris des tas de trucs…

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [XL-2010] Ecrire dans un classeur fermé à une page qui dépend d'un paramètre
    Par Grem974 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 10/06/2015, 17h07
  2. concevoir une liste qui dépend d'une autre
    Par doomi26 dans le forum Access
    Réponses: 3
    Dernier message: 27/02/2014, 09h27
  3. Réponses: 0
    Dernier message: 03/03/2010, 17h28
  4. Retourner une valeur qui dépend de plusieurs lignes
    Par oli43 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 22/10/2008, 16h00
  5. Div qui n'a pas une hauteur minimum
    Par Pumpkins dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 26/09/2005, 09h20

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