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 :

Centrer un div horizontalement en javascript


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2023
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2023
    Messages : 146
    Par défaut Centrer un div horizontalement en javascript
    Bonjour,
    je voudrais centrer un div horizontalement avec javascript car avec css je ne peux pas car le div doit etre en position absolute.
    Auriez-vous une soluce ?

    J'ai pas de code pour ça, j'en cherche un justement

    Google me propose que du CSS et pourtant j'ai bien écris javascript avant ma question...dans la zone de recherche de google.

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    Attribue ton css avec javascript ...
    par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Element.style.marginLeft="auto"
    Element.style.marginRight="auto"
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre Expert
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 495
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 495
    Par défaut
    au final, ce sera toujours du CSS qui "appliquera" le style a ton element... le JS n'y changera rien... tu peux bien mettre a jour le CSS avec du JS... mais au final, le placement se fait avec du CSS, donc la solution de google n'est pas totalement deconnante.

    meme la solution de SpaceFrog
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Element.style.marginLeft="auto";
    Element.style.marginRight="auto"
    au final, ca applique du CSS a l'element

    position absolute, mais par rapport a quoi ? un element parent ? a la page ? au viewport ?
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  4. #4
    Membre confirmé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2023
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2023
    Messages : 146
    Par défaut
    Merci de vos réponses

    Moi j'avais essayé ça aprés mon message mais ça ne marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	// Centre le message.
    	var element=document.getElementById('intro');
    	element.style.width="800px";
    	var screencenter=Math.trunc(screen.width/2);
    	var pos=""+screencenter-(Math.trunc(element.style.width/2))+"px";
    	element.style.left=pos;
    Je voulais utiliser du javascript car en position absolute le margin.left auto ne fonctionne pas en css.

    Position absolute, d'aprés ce que j'ai compris, c'est par rapport à rien, c'est juste une position directe sur l'écran qui ne tient pas compte des autres éléments mis en position relative.


    Mon problème maintenant c'est de savoir donner une valeur en pixels à element.style.left.
    Dans mon code : element.style.width fonctionne bien mais pas element.style.left.

    C'est ma variable pos qui est mal écrite, car ça marche si j'écris element.style.left="100px";.

    EDIT :

    J'ai essayé comme ça mais ça marche toujours pas ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	// Centre le message.
    	var element=document.getElementById('intro');
    	element.style.width="800px";
    	var screencenter=Math.trunc(screen.width/2);
    	var demilargeur=Math.trunc(element.style.width/2)
    	var pos=screencenter-demilargeur;
    	alert(screencenter);
    	element.style.left="100px";
    L'erreur est dans la définition de la variable demilargeur car elle affiche NaN par alert()
    Alors que la variable screencenter affiche bien 640 par alert().
    Et mon essai de element.style.let="100px" fonctionne bien, donc le pb est bien dans demilargeur mais je sais pas comment bien la définir.

  5. #5
    Membre Expert
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 495
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 495
    Par défaut
    la position absolute est toujours par rapport a un parent referent (un element parent en position:relative)
    => si aucun parent n'est en relative, c'est le body, le referent par default

    le position:fixed est par rapport a l'ecran
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  6. #6
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Plutôt que de faire des alert() pour voir ce qui se passe, utilise la console javascript de ton navigateur (Ctrl + Maj +I). console.log(MaVariable);, console.log(MonElement.style.left), console.log("400px"/2);, console.log(parseInt("400px")/2);, etc.

  7. #7
    Membre confirmé
    Homme Profil pro
    sans
    Inscrit en
    Mai 2023
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mai 2023
    Messages : 146
    Par défaut
    Ah oui, d'accord, je pensais pas à l'écran
    C'est normal oui en effet.

    Quelqu'un a une soluce pour affecter une valeur en pixels à element.style.left ?
    (En javascript)


    EDIT : Ah oui, super Cosmo !
    Merci.

  8. #8
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 209
    Par défaut
    Bonjour,
    Citation Envoyé par Doksuri
    la position absolute est toujours par rapport a un parent referent (un element parent en position:relative)
    => si aucun parent n'est en relative, c'est le body, le referent par default
    je trouve cela très très restrictif car en fait tout parent positionné autre que static est parent référent.
    Cela s'applique donc également aux positions
    • relative
    • absolute
    • fixed
    • sticky

    De plus une propriété comme translate, filter, perspective appliquée à un parent lui confère également le statut de référent.


    Citation Envoyé par Doksuri
    le position:fixed est par rapport a l'ecran
    plus exactement par rapport au viewport mais pas que. Si un parent crée un contexte d'empilement alors celui-ci est candidat à être parent référent.

    Donc en gros si un parent possède une des propriété citées ci dessus, il sera référent.

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

Discussions similaires

  1. Centrer une div , horizontalement et verticalement, dans un TD
    Par neo_2000_2006_59 dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 22/06/2011, 10h53
  2. Centrer un div...
    Par Davboc dans le forum Balisage (X)HTML et validation W3C
    Réponses: 12
    Dernier message: 16/01/2006, 22h57
  3. Centrer la DIV
    Par SangKou dans le forum Balisage (X)HTML et validation W3C
    Réponses: 16
    Dernier message: 20/12/2005, 02h04
  4. [CSS][CrossBrowser] Centrer de divs
    Par francky356 dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 30/11/2005, 14h39
  5. Centrer une <div> en position fixe sous IE
    Par Jorus dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 23/09/2004, 15h29

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