28173 sujets

CSS et mise en forme, CSS3

Bonjour à tous !

J'ai un léger petit problème ... de débutant. Smiley confused
J'en ai presque honte. J'ai déjà fait des dizaines de thèmes graphiques, certains avec "float" d'autres non, mais là, je bloque complètement depuis hier sans réellement comprendre pourquoi.

Je me permet de publier un exemple ainsi que les sources, ça vaudra largement des dizaines de lignes d'explications :


	<div id="container">
		<div id="menu">
			<h3>Menu.</h3>
			<ul>
				<li>Menu</li>
				<li>Menu</li>
				<li>Menu</li>
				<li>Menu</li>
				<li>Menu</li>
				<li>Menu</li>
				<li>Menu</li>
				<li>Menu</li>
				<li>Menu</li>
				<li>Menu</li>
			</ul>
		</div>
		<div id="page">
	<h3>Page</h3>
<p>Données de la page ....</p>
	<h4 id="comments">Commentaires.</h4>
		<div class="blog_post_comments">
		<div id="comment_1">
			<p class="comment_author">Auteur.</p>
			<p class="comment_author_avatar">Avatar</a></p>
<p>Commentaire</p>
		</div>
		<div id="comment_2">
			<p class="comment_author">Auteur.</p>
			<p class="comment_author_avatar">Avatar</a></p>
<p>Commentaire</p>
		</div>
		<div id="comment_3">
			<p class="comment_author">Auteur.</p>
			<p class="comment_author_avatar">Avatar</a></p>
<p>Commentaire</p>
		</div>
		</div>
	</div>



#menu {
	width: 200px;
	float: left;
}

#page .blog_post_comments div p.comment_author {
	clear: both;
}

#page .blog_post_comments div p.comment_author_avatar {
	width: 50px;
	height: 50px;
	float: left
}


Le problème, que vous découvrez dans l'image que j'ai joint, c'est que tous les commentaires se retrouvent en bas de la page au lieu d'être à droite du menu. Je sais que le problème vient du *clear: both* mais je pensais que, dans ce cas, le *clear: both* (qui doit impérativement être là) n'aurait eu d'effet qu'à l'intérieur de *div: page* et non pas sur l'ensemble des éléments de la page ; j'ai toujours procédé ainsi lorsqu'un élément devait arriver en dessous d'un autre qui a une propriété *float* ... il me semble (oui, j'en arrive même à douter de mes anciens codes maintenant Smiley ravi ).

Si quelqu'un aurait une solution, ce serait fort sympathique.
Bonne fin de journée,
Gaylord.P. Smiley smile

Aperçu :
upload/502-Ahahalsas.png
Modérateur
bonjour,

le clear:both; peut etre remplacé par :
overflow:hidden; et (doublé d'un dsiplay:inline-block; pour IE uniquement .

je te propose aussi une autre imbrication pour le lien avatar et nom de l'auteur(le reste peut-etre

encore ameliorer):

<!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><title>XHTML 

1.0 Strict</title><style type='text/css'>#menu {
	width: 200px;
	float: left;
display:inline;
border:1px solid #777;
} 
#container {
margin-left:220px;
border:1px solid #aaa;
margin:1em;
}
#page {
margin-left:220px;
border:1px solid #aaa;
}
.comment_author {
border:1px solid #eee;
overflow:hidden;/* au lieu de clear */
_display:inline-block;/* pour IE et pas opera ! a passer en commentaires conditionnel */
}
.comment_author_avatar {
	width: 50px;
	height: 50px;
	float: left;
/* mise en forme arbitraire */
margin-right:1em;
border:1px solid #eee;
vertical-align:top;
}</style></head><body><div id="container">
		<div id="menu">
			<h3>Menu.</h3>
			<ul>
				<li>Menu</li>
				<li>Menu</li>
				<li>Menu</li>
				<li>Menu</li>
				<li>Menu</li>
				<li>Menu</li>
				<li>Menu</li>
				<li>Menu</li>
				<li>Menu</li>
				<li>Menu</li>
			</ul>
		</div>


<div id="page">
	<h3>Page</h3>
<p>Données de la page ....</p>
	<h4 id="comments">Commentaires.</h4>
		<div class="blog_post_comments">
		<div id="comment_1">
<p class="comment_author"><a class="comment_author_avatar">
Avatar</a>Auteur.	</p>
<p>Commentaire</p>
		</div>
		<div id="comment_2">
	<p class="comment_author"><a 

class="comment_author_avatar">Avatar</a>Auteur.
	</p>
<p>Commentaire</p>
		</div>
		<div id="comment_3">
	<p class="comment_author"><a 

class="comment_author_avatar">Avatar</a>Auteur.
	</p>
<p>Commentaire</p>
		</div>
		</div>
	</div>
</div></body></html>


des bordures sont appliqué aux elements pour les visualisé , mais des couleurs de fond aurait le même effets , ça aide provisoirement a comprendre ce qu'il se passe sur la page ...

++
D'accord et merci bien pour cette solution de remplacement, mais j'aurais juré qu'on pouvait faire un *clear: both* dans cette situation sans ramener l'élément tout en bas ... il me semble l'avoir déjà fait des dizaines de fois, en plaçant des éléments flottant. En théorie, ça devrait marcher, non ? (oui, je suis têtu mais je déteste ne pas comprendre Smiley smile )
Modérateur
bonjour,

ton clear both; oblige l'element qui reçoit cette attribut a venir se placer sous l'espace d'affichage du dernier element flottant (a droite ou a gauche) dans le code html qui le precede et qui est dans son flux d'affichage.

Pour empecher une zone d'en prendre une autre en compte , il faut sortir l'une ou l'autre du flux et en mettre une en positionnement absolue , avec toutes les contraintes de "reglage" d'affichage que cela occasionne. Smiley smile

un clear:right; ne prendra pas en consideration les elements flottant a gauche par exemple, tu peut alors dans ce cas mettre dans le html "auteur" en float:right, puis "l'image" et enfin le "paragraphe" suivant en clear:right , sans qu'il s'ajuste sous le menu qui lui est en float:left;.

++
Merci de ton aide, gcyrillus, mais pour diverses raisons d'affichage, je dois séparer l'avatar du *p=author*. Autrement dit, le paragraphe comprenant le nom de l'auteur ne doit contenir rien d'autre que le nom de l'auteur.

Et lorsque j'utilise la propriété *overflow* plutôt que *clear*, l'ensemble des commentaires sont décalés. Quelqu'un aurait une autre solution ? C'est bizarre quand même, ce problème parraît si simple, en théorie (disons qu'il y a peu de codes et rien ne parraît vraiment complexe), et j'ai vraiment du mal à le résoudre, là. Smiley sweatdrop


<!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>
	<title>XHTML 1.0 Strict</title>
<style type='text/css'>
#menu {
	width: 200px;
	float: left;
	display:inline;
	border:1px solid #777;
}

#container {
	margin-left:220px;
	border:1px solid #aaa;
	margin:1em;
}

#page {
	margin-left:220px;
	border:1px solid #aaa;
}

.comment_author {
	border:1px solid #eee;
	overflow:hidden;/* au lieu de clear */
	_display:inline-block;/* pour IE et pas opera ! a passer en commentaires conditionnel */
}

.comment_author_avatar {
	width: 50px;
	height: 50px;
	float: left;
	/* mise en forme arbitraire */
	margin-right:1em;
	border:1px solid #eee;
	vertical-align:top
}
</style>
</head>
<body><div id="container">
		<div id="menu">
			<h3>Menu.</h3>
			<ul>
				<li>Menu</li>
				<li>Menu</li>
				<li>Menu</li>
				<li>Menu</li>
				<li>Menu</li>
				<li>Menu</li>
				<li>Menu</li>
				<li>Menu</li>
				<li>Menu</li>
				<li>Menu</li>
			</ul>
		</div>
<div id="page">
	<h3>Page</h3>
<p>Données de la page ....</p>
	<h4 id="comments">Commentaires.</h4>
		<div class="blog_post_comments">
		<div id="comment_1">
			<p class="comment_author">Auteur</p>
			<p class="comment_author_avatar">Avatar</p>
<p>Commentaire</p>
		<div id="comment_1">
			<p class="comment_author">Auteur</p>
			<p class="comment_author_avatar">Avatar</p>
<p>Commentaire</p>
		<div id="comment_1">
			<p class="comment_author">Auteur</p>
			<p class="comment_author_avatar">Avatar</p>
<p>Commentaire</p>
		<div id="comment_1">
			<p class="comment_author">Auteur</p>
			<p class="comment_author_avatar">Avatar</p>
<p>Commentaire</p>
		</div>
		</div>
	</div>
</div>
</body>
</html>