28173 sujets

CSS et mise en forme, CSS3

Bonjour à tous,

Je cherche a réaliser un template à deux colonnes.
Pour cela, j'utilise le code html suivant :

	<body>	
		<div id="conteneur">
			<div id="colonne_gauche">
				Colonne Gauche
			</div>
			<div id="colonne_droite">
				Colonne Droite
			</div>
		</div>
	</body>

Et le code CSS suivant :

body{
	margin: 20px;
	padding: 0px;
	font-family: Verdana, Helvetica, Arial, sans-serif;
	color: #000000;
	font-size: 12px;
	background-color: #ffffff;
}
#conteneur{
	width: 600px;
	margin: 0;
	padding: 0;
}
#colonne_gauche{
	float: left;
	margin: 0;
	padding: 0;
	width: 150px;
	background-color: #eeeeee;
} 
 #colonne_droite{
	color: #58595b;
	margin: 0 0 0 150px;
	padding: 0;
	background-color: #cccccc;
}


La seconde étape pour moi consiste à empiler dans la colonne de droite, une série d'encarts. Ces encarts sont constitués d'une image et d'un texte qui vient envelopper cette image.

Pour ce faire, j'utilise le code html suivant :

	<body>	
		<div id="conteneur">
			<div id="colonne_gauche">
				Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet
				dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl
				ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel
				illum dolore eu feugiat 
			</div>
			<div id="colonne_droite">
				<div class="element">
					<img src="../img.jpg" />Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet
					dolore magna aliquam erat volutpat.Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet
					dolore magna aliquam erat volutpat.
				</div>
				<div class="element">
					<img src="../img.jpg" />Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet
					dolore magna aliquam erat volutpat.Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet
					dolore magna aliquam erat volutpat.
				</div>
				<div class="element">
					<img src="../img.jpg" />Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet
					dolore magna aliquam erat volutpat.Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet
					dolore magna aliquam erat volutpat.
				</div>
			</div>
		</div>
	</body>

et le code css suivant :

body{
	margin: 20px;
	padding: 0px;
	font-family: Verdana, Helvetica, Arial, sans-serif;
	color: #000000;
	font-size: 12px;
	background-color: #ffffff;
}
#conteneur{
	width: 600px;
	margin: 0;
	padding: 0;
}
#colonne_gauche{
	float: left;
	margin: 0;
	padding: 0;
	width: 150px;
	background-color: #eeeeee;
} 
 #colonne_droite{
	color: #58595b;
	margin: 0 0 0 150px;
	padding: 0;
	background-color: #cccccc;
}
 #colonne_droite div.element{
	border: solid 1px #000000;
	margin: 0 0 10px 0;
	padding: 0;
}
 #colonne_droite div.element img{
	margin: 0 10px 10px 0;
	padding: 0;
	float: left;
}


Le résultat obtenu est le résultat escompté : http://www.potatos.fr/test_css/exemple1/exemple1.htm

Mon problème est que la longueur de mes textes et la hauteur de mes images sont variables, ce qui peux me conduire à des situations comme celle-ci : http://www.potatos.fr/test_css/exemple2/exemple2.htm où mes encadrés sont complètement destructurés.

Mon idée pour palier à ce problème a été d'introduire dans mon encadré, un div avec un clear="left" histoire de le forcer à passer sous l'image et entraîner le bas du cadre avec lui sous le bas de l'image.


	<body>	
		<div id="conteneur">
			<div id="colonne_gauche">
				Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet
				dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl
				ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel
				illum dolore eu feugiat 
			</div>
			<div id="colonne_droite">
				<div class="element">
					<img src="../img.jpg" />Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
					<div class="clear"></div>
				</div>
				<div class="element">
					<img src="../img.jpg" />Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet
					dolore magna aliquam erat volutpat.Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet
					dolore magna aliquam erat volutpat.
					<div class="clear"></div>
				</div>
				<div class="element">
					<img src="../img.jpg" />Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet
					dolore magna aliquam erat volutpat.Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet
					dolore magna aliquam erat volutpat.
					<div class="clear"></div>
				</div>
			</div>
		</div>
	</body>

et

body{
	margin: 20px;
	padding: 0px;
	font-family: Verdana, Helvetica, Arial, sans-serif;
	color: #000000;
	font-size: 12px;
	background-color: #ffffff;
}
#conteneur{
	width: 600px;
	margin: 0;
	padding: 0;
}
#colonne_gauche{
	float: left;
	margin: 0;
	padding: 0;
	width: 150px;
	background-color: #eeeeee;
} 
 #colonne_droite{
	color: #58595b;
	margin: 0 0 0 150px;
	padding: 0;
	background-color: #cccccc;
}
 #colonne_droite div.element{
	border: solid 1px #000000;
	margin: 0 0 10px 0;
	padding: 0;
}
 #colonne_droite div.clear{
 	height: 0;
 	margin: 0;
	padding: 0;
	clear: left;
}
 #colonne_droite div.element img{
	margin: 0 10px 10px 0;
	padding: 0;
	float: left;
}


Le problème est que ce float="clear" vient placer le div sous la colonne de gauche qui possède un float="left".

Existe-t'il un moyen pour qu'une propriété clear, ne fonctionne qu'en regard avec juste un élement du même bloc conteneur (ici avec mon image) et pas avec tous les element flottant de la page ?

Si non, existe-t!il un autre moyen pour moi d'arriver à mes fins ?


Merci beaucoup,

Antoine
Modifié par RockMakesMeSweat (30 May 2007 - 12:46)
Salut à tous !

Nouvelle problématique dans la même veine :

Toujours sur la même base d'un template à deux colonnes, je souhaite cette fois mettre dans ma colonne de droite div contenant une image et du texte qui vient s'enrouler autour de l'image.

Je souhaite que ma colonne de gauche possède une bordure à droite de la taille de son contenu et que ma colonne de droite possède une bordure à droite de la longueur de son contenu.

Voici mon code html :

	<body>	
		<div id="conteneur">
			<div id="colonne_gauche">
				Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet
				dolore magna aliquam erat volutpat.
				Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet
				dolore magna aliquam erat volutpat.
				Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet
				dolore magna aliquam erat volutpat.
				Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet
				dolore magna aliquam erat volutpat.
				Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet
				dolore magna aliquam erat volutpat.
				Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet
				dolore magna aliquam erat volutpat.
				Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet
				dolore magna aliquam erat volutpat.
			</div>
			<div id="colonne_droite">
				<div>
					<img src="../img2.jpg" />Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
				</div>
			</div>
		</div>
	</body>


et la css associée :


body{
	margin: 5px;
	padding: 0px;
	font-family: Verdana, Helvetica, Arial, sans-serif;
	color: #000000;
	font-size: 12px;
	background-color: #ffffff;
}
#conteneur{
	width: 800px;
	margin: 0;
	padding: 0;
}
#colonne_gauche{
	float: left;
	margin: 0;
	padding: 0 20px;
	width: 150px;
	border-right: solid 1px #000000;
} 
 #colonne_droite{
	margin: 0 0 0 211px;
	padding: 0;
	border-right: solid 1px #000000;
}
 #colonne_droite div img{
	float: left;
}


j'obtiens ça : http://www.potatos.fr/test_css/exemple5/exemple5.htm

Comme hier, l'image ne participe pas au calcul de la hauteur du div qui la contient et ma bordure est donc trop courte.

Je rajoute donc un div avec un clear à l'intérieur de ma colonne de droite :



			<div id="colonne_droite">
				<div>
					<img src="../img2.jpg" />Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
				</div>
				<div class="clear"><span></span></div>
			</div>


et je rajoute dans la css :


 #colonne_droite div.clear{
	clear: both;
}


J'obtiens : http://www.potatos.fr/test_css/exemple6/exemple6.htm

Toujours comme hier, mon div "clear" passe sous la colonne de gauche.
J'utilise donc la technique d'hier :

 #colonne_droite{
	margin: 0 0 0 211px;
	padding: 0;
	border-right: solid 1px #000000;
	[b]overflow: hidden;[/b]
}


Et là ça ne marche plus comme hier (sur firefox) : http://www.potatos.fr/test_css/exemple7/exemple7.htm

Le div clear, se place bien sous l'image mais une marge est apparue dans ma colonne de droite (c'est le div avec la propriété clear qui récupère la marge du div "colonne_droite", marge qui ne passe pas sous la colonne gauche).

Comment faire pour résoudre ce problème ?

Une solution est de virer la marge de ma colonne droite mais dans ce cas, je me retrouve avec le problème antagoniste sur d'autres navigateurs.
Bonjour à tous !

Je me permet un petit up et j'en profite pour tenter de clarifier mon problème.

J'ai un design en deux colonnes obtenu à l'aide du code suivant :


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">	
	<head>
		<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
		<link rel="stylesheet" type="text/css" href="exemple8.css" media="screen" />
	</head>
	<body>	
		<div id="conteneur">
			<div id="colonne_gauche">
				Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet
				dolore magna aliquam erat volutpat.
				Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet
				dolore magna aliquam erat volutpat.
				Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet
			</div>
			<div id="colonne_droite">
				<div>
					Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
				</div>
			</div>
		</div>
	</body>
</html>


body{
	margin: 5px;
	padding: 0px;
	font-family: Verdana, Helvetica, Arial, sans-serif;
	color: #000000;
	font-size: 12px;
}
#conteneur{
	width: 800px;
	margin: 0;
	padding: 0;
}
#colonne_gauche{
	float: left;
	margin: 0;
	padding: 0 20px;
	width: 150px;
	background-color: grey;
} 
 #colonne_droite{
	margin: 0 0 0 211px;
	padding: 0;
	background-color: pink;
}


Ce qui donne : http://www.potatos.fr/test_css/exemple8/exemple8.htm

Pour les raisons évoquées dans les posts précédents, j'ai besoin de passer la propriété overflow de mon div "colonne_droite" à "hidden" :
 
 #colonne_droite{
	margin: 0 0 0 211px;
	padding: 0;
	background-color: pink
	[b]overflow: hidden;[/b]
}


http://www.potatos.fr/test_css/exemple9/exemple9.htm

Ceci à pour conséquence deux comportements différents suivant les navigateurs :
Par exemple sur opéra (mac), j'obtiens le résultats suivant (qui correspond à ce que je souhaite et qui me parait "naturel") :

upload/11284-opera.png

La marge gauche de ma colonne de droite vient bien se glisser sous ma colonne de gauche.

Par contre sur FireFox (mac), j'obtiens ça :

upload/11284-ff.png

La marge en question ne se glisse pas sous la colonne de gauche !

A quoi est du se comportement et comment y remédier ?


Merci,

Antoine
Modifié par RockMakesMeSweat (28 May 2007 - 19:38)
Bonjour,

Je pense à un truc simple:
Si tu places ta colonne de droite (contenant des éléments en float: left) en float: right et ta colonne de gauche dans le flux; les clear: left de ta colonne de droite ne devrait plus interférer avec ta colonne de gauche et du coup plus besoin de l'overflow: hidden donc plus de problème de marge Smiley cligne
Je ne sais pas si j'ai été clair sur le coup Smiley biggol

Bon en prenant ton premier code:
<style type="text/css">
body{
	margin: 20px;
	padding: 0px;
	font-family: Verdana, Helvetica, Arial, sans-serif;
	color: #000000;
	font-size: 12px;
	background-color: #ffffff;
}

#conteneur{
	width: 600px;
	margin: 0;
	padding: 0;
}

#colonne_gauche{
	margin: 0;
	padding: 0;
	width: 150px;
	background-color: #eeeeee;
} 

 #colonne_droite{
	float: right;
	color: #58595b;
	width: 450px;
	padding: 0;
	background-color: #cccccc;
}

 #colonne_droite div.element{
	border: solid 1px #000000;
	margin: 0 0 10px 0;
	padding: 0;
}

 #colonne_droite div.clear{
 	height: 0;
 	margin: 0;
	padding: 0;
	clear: left;
}

 #colonne_droite div.element img{
	margin: 0 10px 10px 0;
	padding: 0;
	float: left;
}
</style>
</head>
<body>
		<div id="conteneur">
			<div id="colonne_droite">
				<div class="element">
					<img src="image.jpg" />Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
					<div class="clear"></div>
				</div>
				<div class="element">
					<img src="image.jpg" />Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet
					dolore magna aliquam erat volutpat.Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet
					dolore magna aliquam erat volutpat.
					<div class="clear"></div>
				</div>
				<div class="element">
					<img src="image.jpg" />Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet
					dolore magna aliquam erat volutpat.Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet
					dolore magna aliquam erat volutpat.
					<div class="clear"></div>
				</div>
			</div>
			<div id="colonne_gauche">
				Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet
				dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl
				ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel
				illum dolore eu feugiat 
			</div>
		</div>


<edit> Dans ton dernier code, si tu places tes 2 colonnes en float: left, tu risques d'avoir un traitement égal pour ie, ff et opera et en passant le margin-left de ta colonne de droite à 21px au lieu de 211, tout devrait être ok </edit>
Modifié par ghost (29 May 2007 - 01:50)
ghost a écrit :
Dans ton dernier code, si tu places tes 2 colonnes en float: left, tu risques d'avoir un traitement égal pour ie, ff et opera et en passant le margin-left de ta colonne de droite à 21px au lieu de 211, tout devrait être ok

Ca, ça me parait être une super piste !
J'essaye tout de suite !

Merci !