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 :

Récupérer la width d'une table pour définir max-width sur éléments suivants


Sujet :

JavaScript

  1. #21
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    En plus, comme c'est le texte qui remplit les cellules qui détermine la largeur, je pense que la largeur du texte dépend du navigateur.
    Ben si tu utilises la même police et la même taille de caractère, en théorie non... mais si en plus les définitions de taille d'écran sont différentes :
    essaie aussi de définir les tailles non en (px) pixels fixes mais en (em) taille proportionnelle à la police de caractère utilisée...
    Mais ça va t'obliger à revoir toutes les tailles, au moins à partir du tableau en question...

    [EDIT 13:50]
    Tu peux aussi essayer de manipuler la taille obtenue, la faire varier d'un coefficient 0.9 ou 1.1 par exemple et de récupérer la partie entière obtenue avec floor pour l'affecter...
    ça pourrait donner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var w = document.getElementById('compcab').offsetWidth;
    var ww = Math.floor(w * .9);  // OU var ww = Math.floor(w * 1.1); //....etc
    
    var bul = document.getElementById('bul');
    bul.setAttribute('width-max', ww);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    bul.setAttribute('width-max', ww+'px');
    bul.setAttribute('width-max', w+'em');
    ...
    em acceptant des valeurs réelles (nombre avec virgule)

    Code non testé...

  2. #22
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 671
    Points : 128
    Points
    128
    Par défaut
    Encore merci.

    Je teste en fin de journée, ce week-end au plus tard.

    Je te tiens au courant.

  3. #23
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    OK, de rien,
    Modifier la taille obtenue reste tiré par les cheveux...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bul.setAttribute('width-max', w+'px');
    (ou équivalent)
    devrait suffire, sinon ça voudrait dire qu'il faudrait tester le navigateur et la police de caractères, et faire en conséquence...
    Une norme CSS3 plus récente

  4. #24
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bul.setAttribute('width-max', w+'px');


    D'une part, width-max n'existe que dans ton imagination.
    Ensuite, une fois la page affichée, il n'y a aucune raison de modifier les attributs HTML avec setAttribute() / getAttribute(), ce sont les propriété du DOM qu'il faut manipuler
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bul.style.maxWidth = w + 'px';
    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

  5. #25
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    merci bovino pour ton intervention je débute dans le domaine,

    Cependant je fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    this.canvas = document.createElement('canvas');
    		document.getElementById('DIVG').appendChild(this.canvas);
    		this.imgdimx = document.getElementById('DIVG').offsetWidth;
    		this.imgdimy = document.getElementById('DIVG').offsetHeight;
    		// alert ("LARG="+ this.imgdimx +" HAUT="+ this.imgdimy +"=");
    		this.canvas.setAttribute('width', this.imgdimx);
    		this.canvas.setAttribute('height', this.imgdimy);
    		this.ctx = this.canvas.getContext('2d');
    car si je crée le canvas dans HTML j'ai des pb de proportion,
    c'est tout ce que j'ai trouvé pour me sortir d'affaire, mais autant c'est nul...

    [EDIT 15:12]
    J'avais rapidement testé comme ceci

  6. #26
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 957
    Points : 44 119
    Points
    44 119
    Par défaut
    @dmganges :
    car si je crée le canvas dans HTML j'ai des pb de proportion,
    c'est tout ce que j'ai trouvé pour me sortir d'affaire, mais autant c'est nul...
    la différence c'est qu'un élément CANVAS possède des atrributs width et height 4.11.4 The canvas element.

    @boteha :peut être serait-il temps de nous fournir le code HTML/CSS pour que l'on appréhende mieux ce que tu veux car les origines possibles sont nombreuses, DOCTYPE, définition font par défaut ... et aussi bien, une solution HTML est suffisante!

  7. #27
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    MERCI pour le lien NoSmoking,
    Je me retire.
    Je suivrai les réponses avec intérêt.

  8. #28
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 671
    Points : 128
    Points
    128
    Par défaut
    Bonjour,

    @boteha :peut être serait-il temps de nous fournir le code HTML/CSS pour que l'on appréhende mieux ce que tu veux car les origines possibles sont nombreuses, DOCTYPE, définition font par défaut ... et aussi bien, une solution HTML est suffisante!
    Avec plaisir.

    J'espère avoir ce soir le temps de vous envoyer les URL de mes pages de test.

    J'ai trouvé une piste intéressante pour le bug Safari.

    Le bug disparaît si j'enlève les éléments HTML entre la table à mesurer et le DIV où appliquer la mesure.

    Cela sera beaucoup plus clair avec les liens de mes pages de test.

  9. #29
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 671
    Points : 128
    Points
    128
    Par défaut
    Bonjour,

    Ce qui marche sur PC (Chrome, Firefox, IE) mais pas sur Safari :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <table id="compcab">
    ...
    </table>
    <p  id="D1654">...</p>
     
    <div id="bul" >
    <p>...</p>
    </div>
    Ce qui marche partout, j'ai simplement supprimé id="D1654" entre tabe et div :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <table id="compcab">
    ...
    </table>
    <p>...</p>
     
    <div id="bul" >
    <p id="D1654">...</p>
    </div>

  10. #30
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 671
    Points : 128
    Points
    128
    Par défaut
    Bonjour,

    Pour info, le problème avec Safari est réglé.
    Il faut simplement éviter d'avoir un élément avec id entre l'élément à mesurer et celui où la mesure est affectée.

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // Safari n'aime pas :
     
    <table id="compcab">
    ...
    </table>
    <p id="D1654">...</p>
    <ul id="bul">
    ...
    </ul>

    Safari réagit correctement :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <table id="compcab">
    ...
    </table>
    <p>...</p>
    <ul id="bul">
    ...
    </ul>

    C'est clairement un bogue de Safari, il est vrai que j'emploie une version ancienne et non mlse à jour.

    Autrement quel outil conseillez-vous pour estimer le poids du script dans le temps d'affichage de la page ?

  11. #31
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 957
    Points : 44 119
    Points
    44 119
    Par défaut
    C'est clairement un bogue de Safari...
    si tu es obligé de réajuster un élément pour qu'il "taille" comme le précédent, c'est parce que ton document est mal conçu et que les navigateurs font au mieux pour réaliser ce que tu veux, ils leur arrivent même de deviner juste
    On notera également que tu as modifié la structure pour arriver à tes fins...alors...

    Qu'arrive t-il à ta page si tu redimensionnes l'écran ou si l'utilisateur à par défaut une police plus petite/grosse, il te vaudrait mieux tant qu'à réajuster réajuster le parent de ta TABLE à savoir la FORM, et laisser les enfants occuper leur place naturelle.

    Autrement quel outil conseillez-vous pour estimer le poids du script dans le temps d'affichage de la page ?
    concernant ta page, tu peux estimer à 0 le plus de chargement.

  12. #32
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 671
    Points : 128
    Points
    128
    Par défaut
    Citation Envoyé par NoSmoking Voir le message
    Qu'arrive t-il à ta page si tu redimensionnes l'écran ou si l'utilisateur à par défaut une police plus petite/grosse, il te vaudrait mieux tant qu'à réajuster réajuster le parent de ta TABLE à savoir la FORM, et laisser les enfants occuper leur place naturelle.
    Bonjour,

    Je ne comprends pas ta remarque.

    Le FORM est un bloc qui par défaut occupe 100 % de la largeur disponible.
    La largeur de TABLE dépend de la taille de la police, c'est bien elle que je dois mesurer.

  13. #33
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 957
    Points : 44 119
    Points
    44 119
    Par défaut
    Si tu opte pour cette solution, il te faut réajuster le parent, ta FORM, et laisser les enfants 'block' prendre la place normale qu'ils doivent occuper.

  14. #34
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 671
    Points : 128
    Points
    128
    Par défaut
    Bonjour,

    Merci de ton intérêt.

    Je n'ai pas été assez clair.

    Dans cette histoire, la variable qui m'intéresse est la largeur dynamique de la TABLE.

    Est-ce que tu me conseilles de mesurer cette largeur et de l'appliquer au FORM parent plutôt qu'au DIV frère ?

    Si tu veux dire que je dois attribuer au FORM une largeur qui va s'appliquer aux enfants dont la TABLE, je ne peux pas le faire sans avoir mesuré TABLE.

    Autrement, quand une page passe sur Chrome, Firfox et IE et que seul Safari ne comprend pas je pense pouvoir dire qu'il y a un bug de Safari.
    C'est d'ailleurs intéressant à savoir et facile à corriger si l'on peut toucher à la structure.

  15. #35
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 957
    Points : 44 119
    Points
    44 119
    Par défaut
    Est-ce que tu me conseilles de mesurer cette largeur et de l'appliquer au FORM parent plutôt qu'au DIV frère ?
    oui cela me paraît plus judicieux, même si, de souvenir, la structure de ta FORM me semblait englober toute la partie centrale dont une multitude d'éléments qui n'ont pas grand chose à faire dans cette FORM justement.

    Autrement, quand une page passe sur Chrome, Firfox et IE et que seul Safari ne comprend pas je pense pouvoir dire qu'il y a un bug de Safari.
    Il serait intéressant d'avoir le code qui ne fonctionne pas, car dans certains cas les moteurs de rendu font des prouesses et cela ne veut pas dire que certains sont buggés!

  16. #36
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 671
    Points : 128
    Points
    128
    Par défaut
    Bonjour,

    Encore merci de ton intérêt.

    J'ai supprilmé les liens car ils étaient sur mon site de test qui est un peu confidentiel.

    Effectivement, le FORM dont tu parles est le containeur de la partie principale de la page.
    Je n'aime pas multiplier les balises de structure.

    J'ai déjà décrit le bug de la vieille version Safari. En gros, aucun élément ne doit avec de sélecteur id entre le bloc à mesurer et le bloc où appliquer la largeur. Dis-moi s'il faut plus d'explications.

Discussions similaires

  1. Réponses: 5
    Dernier message: 17/07/2013, 08h23
  2. [Toutes versions] Récupérer les valeurs d'une table pour une autre table
    Par spacesheep dans le forum Access
    Réponses: 3
    Dernier message: 29/03/2013, 17h06
  3. Réponses: 11
    Dernier message: 22/06/2009, 09h58
  4. Réponses: 62
    Dernier message: 16/04/2009, 10h09
  5. Réponses: 2
    Dernier message: 18/02/2007, 21h30

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