Positionnement d'images

Résolu
Bonjour,

Je voudrais positionner des images en absoolu/relatif !

La page à produire a la structure suivante :

+---------------------------------------------------+
+
+    zone A (hauteur variable)
+
+---------------------------------------------------+
+---------------------------------------------------+
+ 
+    zone B
+ 
+ +----------------+ 
+ +  image 1   
+ +----------------+
+ 
+       +----------------+  
+       +  image 2    
+       +----------------+ 
+                    
+---------------------------------------------------+


images 1 et 2 sont élaborées par le script PHP qui génère la page et détermine également la position des deux images relativement au coin supérieur/gauche de la zone B (rappelons que la zone A a une hauteur variable qu'il me semble difficile de calculer au niveau du serveur).

J'ai essayé des combinaisons de CSS position absolute/relative sans trouver de solution qui permettent de positionner les deux images.

Merci de votre aide.
Configuration: Mac OS X, Safari et Firefox
mysql, Php et Apache en local pour développement

5 réponses

  1. Voici un de mes essais :
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    	<head>
    		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    		<meta http-equiv="Content-Language" content="en-fr" />
    	</head>
    	<body>
    <div style="border:1px solid green">
    	<img src="images/calendrier.png">
    </div>
    <div style="border:1px solid red">
    	<div style="position:relative;left:0px;top:0px">
    		<img src="images/calendrier.png">
    	</div>
    	<div style="position:relative;left:50px;top:0px">
    		<img src="images/calendrier.png">
    	</div>
    	<div style="position:relative;left:100px;top:0px">
    		<img src="images/calendrier.png">
    	</div>
    </div>
    <div style="style="border:1px solid blue">
    	<img src="images/calendrier.png">
    </div>
    <div style="border:1px solid blue">
    	<img style="position:relative;left:0px;top:0px" src="images/calendrier.png">
    	<img style="position:relative;left:50px;top:0px" src="images/calendrier.png">
    	<img style="position:relative;left:100px;top:0px" src="images/calendrier.png">
    </div>
    
    1. Et avec ça ? Sans DIV.

      <!-- IMAGE 1 -->
      <img src="images/calendrier.png" style="height: 200px; display: block;" alt="calendrier.png" />

      <!-- IMAGE 2 -->
      <img src="images/calendrier.png" style="height: 200px; display: block; margin-left: 100px;" alt="calendrier.png" />
      1. Merci,

        Ca pourrait fonctionner dans le sens horizontal puisque la zone B est cadrée à gauche.

        Par contre, ça ne convient pas dans le sens vertical car la zone B commence à une position variable.
    2. Je comprends pas ton problème
      Si le DIV A est de hauteur variable ça ne change rien puisque le DIV B qui suit se déplacera en fonction.
      Ensuite tes 2 images sont à placer à l'intérieur de ton DIV B.
      1. Pour répondre à mon besoi j'ai développé un script Javascript illustré par l'exemple ci-dessous :
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
        	<head>
        		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        		<meta http-equiv="Content-Language" content="en-fr" />
        		<script>
        			//	positionne les images contenues dans une div
        			//
        			//	La position de chaque image est déterminée par l'attribut "position" de la balise <img correspondante
        			//	Cet attribut contient une (left et top) ou deux (left puis top) valeurs numériques séparées par une virgule.
        			//	Ces deux valeurs définissent la distance en pixels du coin sup./gauche de l'image par rapport au 
        			//	coin sup. gauche de la div.
        			//	Les paddings de la div sont pris en compte.
        			function positionneImages( divName )
        				{
        				var m = document.getElementById( divName );
        				//	paddings de la div --> paddings[]
        				var paddings = m.style.padding.split(' ');
        				var i = 0;
        				for( ; i<4; i++ )		//	for each pas dispo avec Safari
        					paddings[i] = parseInt(paddings[i]);
        
        				var maxHeight = 0;
        				var maxWidth = 0;
        				var idxChild = 0;
        				for( ; idxChild < m.childNodes.length; idxChild ++ )		//	for each pas dispo avec Safari
        					{	//	loop on nodes in container div
        					img = m.childNodes[ idxChild ];
        					if( img.nodeType != null && img.nodeType == 1 )
        						{
        						if( img.nodeName == "IMG" )
        							{
        							var position = img.getAttribute("position");
        							i = position.indexOf( "," );
        							var x, y;
        							if( i == -1 )
        								{
        								x = y = parseInt( position );
        								}
        							else
        								{
        								x = parseInt( position );
        								y = parseInt( position.substr( i+1 ) );
        								}
        							img.style.position = "absolute";
        							img.style.left = m.offsetLeft + paddings[3] + x + "px";
        							img.style.top = m.offsetTop + paddings[0] + y + "px";
        							var bottom = y + img.height;
        							if( bottom > maxHeight ) maxHeight = bottom;
        							var right = x + img.width
        							if( right > maxWidth ) maxWidth = right;
        							}
        						}
        					}
        				m.style.height = maxHeight + paddings[2] + "px";
        				m.style.width = maxWidth + paddings[1] + "px";
        				}
        		</script>
        	</head>
        	<body onload="positionneImages( 'hieros' )">
        		<div style="border:1px solid green">
        			<p>Zone A</p>
        		</div>
        		<div id="hieros" style="padding:10px 20px 30px 40px;border:1px solid blue">
        			<img position="0,0" src="images/editButton0100.png">
        			<img position ="50,50" src="images/editButton0100.png">
        			<img position ="-40,350" src="images/editButton0100.png">
        		</div>
        	</body>
        </html>
        


        Ce point est donc clos.
        Merci pour vos messages.