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 :

Comment centrer verticalement une image aléatoire ?


Sujet :

JavaScript

  1. #1
    Gunner4902
    Invité(e)
    Par défaut Comment centrer verticalement une image aléatoire ?
    Bonjour,

    Je cherche à centrer verticalement sur toute la hauteur de ma fenêtre une image.

    Déjà que CSS est très limite sur cette pratique (comme s’il ne pouvait exister une propriété comme text-align:center qui lui gère parfairement l’alignement horizontal… d’ailleurs pourquoi text et pas inline-align ?), je ne peux pas utiliser la technique du
    50% en positionnement absolu + marge de -50% de la hauteur de l’image car l’image est aléatoire et à chaque fois de taille différente…

    J’ai bien essayé de mettre un tableau en place pour faire un valign (bah oui, à force de tout compliquer ce qui pourrait etre simple, le CSS avoue ses limites je trouve…), reste que celà n’est pas géré parfaitement et qu’il me faut mettre un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    height:nombre de pixel de la hauteur de la page
    pour que ça soit aligné parfaitement…

    Or je voudrais un truc finallement très simple : aligner tout betement une image sans tenir compte de ses pixels de hauteur sur 100% de l’écran affiché (donc si je fais F11 (sous Windows) je devrais garder l’image centrée…)

    Merci de votre aide.

  2. #2
    BnA
    BnA est déconnecté
    Membre averti Avatar de BnA
    Inscrit en
    Mars 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2006
    Messages : 559
    Points : 397
    Points
    397
    Par défaut
    Images de tailles différentes = récup. de la taille afin d'obtenir un alignement précis = Forum Javascript
    Sans extrait de code, ne vous attendez à aucun miracle (sauf miracle) ...

    ...et n'oubliez pas: RTFM!!

    Téléchargez FireBug pour Firefox (le paracétamol du développement web)

    "MERCI" ne coûte rien, n'hésitez pas à vous en servir!

  3. #3
    Gunner4902
    Invité(e)
    Par défaut
    Ok, je veux bien passer par le JavaScript pour récupérer la hauteur de l’image, mais le JS va donner une valeur dynamique… donc comment mettre cette valeur dynamique dans le code CSS ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #global {
         position:absolute;
         top: 50%;
         height: 400px; /* valeur dynamique */
         margin-top: -200px; /* moitié de height */
         border: 1px solid #000;
         }

  4. #4
    Membre régulier Avatar de rootdaoud
    Inscrit en
    Mars 2005
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 100
    Points : 78
    Points
    78
    Par défaut
    bonjour,
    Essayer se code javascript.
    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
    	var fWidth;
    	var fHeight;
    	//For old IE browsers
    	if(document.all)
    	{
    		fWidth = document.body.clientWidth;
    		fHeight = document.body.clientHeight;
    	}
    	//For DOM1 browsers
    	else if(document.getElementById &&!document.all)
    	{
    		fWidth = innerWidth;
    		fHeight = innerHeight;
    	}
    	else if(document.getElementById)
    	{
    		fWidth = innerWidth;
    		fHeight = innerHeight;
    	}
    	//For Opera
    	else if (is.op)
    	{
    		fWidth = innerWidth;
    		fHeight = innerHeight;
    	}
    	//For old Netscape
    	else if (document.layers)
    	{
    		fWidth = window.innerWidth;
    		fHeight = window.innerHeight;
    	}
     
    document.getElementById('id_de_votre_element').style.left=fWidth/2;
    document.getElementById('id_de_votre_element').style.top=fHeight/2 ;
    Merci Developpez.com

  5. #5
    Gunner4902
    Invité(e)
    Par défaut
    Merci RootDaoud.
    Pourtant celà ne fonctionne pas…

    Je récapitule pour voir d’où peut venir mon erreur :

    Dans le Body, le code JS que tu m’as donné :
    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
    <script type="text/javascript">
    		<!--
    		var fWidth;
    	var fHeight;
    	//For old IE browsers
    	if(document.all)
    	{
    		fWidth = document.body.clientWidth;
    		fHeight = document.body.clientHeight;
    	}
    	//For DOM1 browsers
    	else if(document.getElementById &&!document.all)
    	{
    		fWidth = innerWidth;
    		fHeight = innerHeight;
    	}
    	else if(document.getElementById)
    	{
    		fWidth = innerWidth;
    		fHeight = innerHeight;
    	}
    	//For Opera
    	else if (is.op)
    	{
    		fWidth = innerWidth;
    		fHeight = innerHeight;
    	}
    	//For old Netscape
    	else if (document.layers)
    	{
    		fWidth = window.innerWidth;
    		fHeight = window.innerHeight;
    	}
     
    document.getElementById('id_de_votre_element').style.left=fWidth/2;
    document.getElementById('id_de_votre_element').style.top=fHeight/2 ;
    		//-->
    	</script>
    ensuite le script de l’image :

    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
    <div id="image2">
    <?php
    	$imgpath = "dossier/";
    	if (is_dir($imgpath))
    	{
    	if ($condir = opendir($imgpath))
    	{
    	$i = 0;
    	while (($curfile = readdir($condir)) != false)
    	{
    	  $extension = "";
    $extension = preg_replace("/.+\.(.{3,4})/", "$1", $curfile);		  if ($extension == "jpeg" || $extension == "jpg")
    	  {
    	  $i++;
    	  $images{$i} = $curfile;
    	}	
    	}					
               {
    	  $i = rand(1, $i);
    	  $image = $images{$i};	
                 echo "<img src=\"";		
                 echo $imgpath;
    	  echo "".$image."\" alt=\"\" />";
    	}							}
    	}
    	?>
    </div>
    malgré celà, l’image n’est pas centrée et la console d’erreur d’Opera me précise :
    JavaScript - 127.0.0.1/random.php
    Inline script thread
    Error:
    Error:
    name: TypeError
    message: Statement on line 28: Could not convert undefined or null to object
    Backtrace:
    Line 28 of inline#3 script in 127.0.0.1/random.php
    (document.getElementById("image2")).style.top = fHeight / 2;
    Qu’est-ce qui ne va pas ?

    Merci de votre aide
    Dernière modification par Gunner4902 ; 23/11/2007 à 09h23.

  6. #6
    Gunner4902
    Invité(e)
    Par défaut
    J’ai tenté de simplifier.

    Sachant que je sais mettre l’image à 50% en top et en left en CSS, je souhaites juste faire :

    * -50% de la hauteur de l’image en margin-height
    * -50% de la largeur de l’image en margin-left

    J’ai essayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <script type="text/javascript">
    	var fWidth = img.width;
    	var fHeight = img.height;
    	var img = document.images;
    	document.getElementById('image').style.marginLeft=-fWidth/2;
    	document.getElementById('image').style.marginTop=-fHeight/2;
    		</script>
    Mais ça ne fonctionne pas…
    Si quelqu’un a une idée, je suis preneur, je tourne en rond depuis plus de quinze jours sur ce centrage vertical dynamique.

  7. #7
    Gunner4902
    Invité(e)
    Par défaut
    J’ai pas mal avancé cet après-midi et je sens que je touche au but, mais il me manque un petit coupe de pouce…

    HTML
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="monimage.jpg" name="name_image\" alt="" />
    JAVASCRIPT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <script type="text/javascript">
    1. document.getElementById('id_image').style.position="absolute";
    2. document.getElementById('id_image').style.top="50%";
    3. document.getElementById('id_image').style.left="50%";
    4. document.getElementById('id_image').style.marginLeft="-"document.name_image.height"/2";		
    5. document.getElementById('id_image').style.marginTop="-"document.name_image.width"/2";
    6. document.write(document.name_image.width + " × " + . document.name_image.height + " pixels");
    </script>
    Les lignes 1, 2, 3 et 6 fonctionnent normalement
    Par contre j’aurai besoin d’un coup de main pour les lignes 4 et 5… l’idée c’est de déclarer par exemple "-(120/2)" sous entendu - 60 pixels.

    Merci de votre aide

  8. #8
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    4. document.getElementById('id_image').style.marginLeft=(document.getElementById('name_image').style.height*-1/2)+"px";		
    5. document.getElementById('id_image').style.marginTop=(document.getElementById('name_image').style.width*-1/2)+"px";	;


    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  9. #9
    Gunner4902
    Invité(e)
    Par défaut
    Merci E.Bzz mais en appliquant ton code, j’ai l’image qui commence toujours à 50% top et left, par contre elle l’image est diminuée de 50% en width et height…

    Je l’ai donc modifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <script type="text/javascript">
    document.getElementById('id_image').style.position="absolute";
    document.getElementById('id_image').style.top="50%";
    document.getElementById('id_image').style.left="50%";
    document.getElementById('id_image').style.marginLeft=(document.name_image.width*-1/2)+"px";
    document.getElementById('id_image').style.marginTop=(document.name_image.height*-1/2)+"px";
    document.write(document.name_image.width/2 + " × " + document.name_image.height/2 + " pixels");
    </script>
    L’image est désormais parfaitement centrée, quelque soit la résolution !

    Merci de m’avoir mis sur la piste
    Dernière modification par Gunner4902 ; 23/11/2007 à 17h47.

  10. #10
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par Gunner4902 Voir le message
    Merci E.Bzz mais en appliquant ton code, j’ai l’image qui commence toujours à 50% top et left, par contre elle l’image est diminuée de 50% en width et height…
    J'avoue avoir plus regardé la syntaxe que le résultat attendu

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  11. #11
    Gunner4902
    Invité(e)
    Par défaut
    Pas grave
    Je travaille avec la console d’erreur d’Opera car je débute en JavaScript. Je pense que la syntaxe finale doit être bonne. Ce qui me manquait était donc la logique syntaxique pour déclarer
    J’avoue d’ailleurs que ça ne me parait pas très logique même maintenant .

  12. #12
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par Gunner4902 Voir le message
    J’avoue d’ailleurs que ça ne me parait pas très logique même maintenant .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (-1*(document.name_image.height/2))
    Ca te paraitrait peut-être plus logique comme ça, mais c'est la même chose
    EDIT : je voulais juste limiter le nb de parenthèses ...

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  13. #13
    Gunner4902
    Invité(e)
    Par défaut
    Oui je comprends mieux ainsi.
    Merci

Discussions similaires

  1. [CSS 3] Comment centrer verticalement une image dans un <li>
    Par pierrot10 dans le forum Mise en page CSS
    Réponses: 0
    Dernier message: 23/04/2010, 12h37
  2. Centrer verticalement une image par rapport à un div
    Par zeflex dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 20/10/2008, 22h35
  3. centrer verticalement une image
    Par pimpmyride dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 18/11/2007, 11h51
  4. centrer verticalement une image
    Par Invité dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 14/03/2006, 16h02
  5. Centrer verticalement une image dans un div
    Par sovitec dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 20/12/2005, 16h36

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