28173 sujets

CSS et mise en forme, CSS3

Je sais, le sujet n'est pas neuf et rabâché... Désolé Smiley confused
J'ai des listes que je souhaite mettre sous forme d'images, affichées en ligne (plusieurs lignes parfois) dans un conteneur lui même positionné en float. Mais la liste déborde du conteneur dans tous les cas. J'ai bien lu la FAQ à ce sujet:
http://web.covertprestige.info/test/03-elements-flottants-et-element-parent-1.html
de nombreux articles comme celui-ci
http://web.covertprestige.info/test/03-elements-flottants-et-element-parent-1.html
tenté toutes les ruses, même la solution pas très propre de mettre une div clear:both en fin de liste, rien à faire.

Les solutions semblent fonctionner pour des images seules mais pas quand elles sont en liste inline, elle mêmes gérées en float

Quelqu'un aurait-il une solution à me proposer?

Merci d'avance
Modifié par xaglo (09 May 2007 - 00:53)
Hello et bienvenue ici Smiley smile

Comme tout le monde n'est pas devin, je te rappelle l'une des Règles que tu as dû survoler trop vite :
Règle 13 a écrit :
Enfin, n'hésitez pas à toujours fournir une image explicative et une url où les membres auront un aperçu de votre problème. La règle est simple : il faut toujours donner un maximum de détails pour être sûr d'avoir une chance que les autres comprennent et aident.
non, non, je ne l'ai pas survolée et bien notée Smiley cligne je voulais juste ne pas trop vous saouler avec un premier message. N'ayant pas la possibilité de vous faire tout de suite des images, j'espérais qu'avec ma simple description quelqu'un aurait une idée. Mais promis je reviens... Je vous ferai un petit topo plus descriptif et imagé très bientôt si nécessaire.

J'ai tout de même avancé un peu sur mon problème en retravaillant sur une mise en page simple. Et méa culpa, le <hr> en clear:both semble fonctionner. Mon soucis doit donc se trouver dans mon code complexe qui imbrique certainement trop de div.

La solution du <hr> me déçoit tout de même un peu, j'ai l'impression de retravailler avec une table à insérer des images vides dans tous les sens pour caler les choses Smiley lol

Merci pour ta réponse et à bientôt
xaglo a écrit :
La solution du <hr> me déçoit tout de même un peu, j'ai l'impression de retravailler avec une table à insérer des images vides dans tous les sens pour caler les choses Smiley lol

L'alternative la plus intéressante est l'utilisation d'un overflow: hidden sur le conteneur qui doit venir englober ses enfants et descendants flottants. Seul souci : IE6 n'applique pas le overflow:hidden de cette manière. Il faut donc également passer par le HasLayout... par exemple avec une largeur fixe pour le conteneur.

Pour le HasLayout, il me semble que j'ai casé un lien explicatif dans mes pages sur le dépassement des flottants (le lien que tu as donné ci-dessus).
oui, je n'ai pas encore creusé ni trop compris cette histoire de HasLayout Smiley confused de plus mon conteneur n'est pas en largeur fixe mais fluide. Tant pis si il faut passer par le hr clear:both on le fera

Voilà le code de ma page, nettoyée de ses habillages pour simplifier la lecture
<!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" />
<title>test</title>
<style type="text/css">
<!--
body {
	background-color: #FF9900;
	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 0.8em;
	margin: 5px;
	padding: 5px;
	text-align: center; /* correction bug IE6 */
	color: #333333;
}
a {
	font-weight: bold;
	color: #000;
	text-decoration: none;
}
a:hover {
	color: #FFF;
	background-color: #FF9900;
}
#header {
	height: 85px;
	color: #FFFFFF;
	font-family: "Trebuchet MS", Verdana, Arial, Sans-Serif;
	text-align: left; /* on rétablit l'alignement normal du texte */
}
#header h1{
	font-size: 1.3em;
	padding-top: 38px;
	padding-left: 420px;
}
#global {
	position: relative;
	width: 90%;
	max-width: 1000px;
	min-width: 750px;
	margin-left: auto;
	margin-right: auto;
	text-align: left;
}
#page {
	background-color: #FFFFFF;
	margin-left: 140px;
	padding: 10px 160px 10px 30px;
	left: 0px;
	top: 20px;
}
#column_left {
	position: absolute;
	width: 140px;
	top: 0px;
	left: 0px;
	margin-top: 30px;
}
#column_right {
	width: 130px;
	position: absolute;
	right: 20px;
	top: 40px;
}
#pagebar {
	height: 20px;
	padding-left: 140px;
}

#pagebar a {
	font-family: "Trebuchet MS", Verdana, Arial, Sans-Serif;
	color: #FFE8BF;
	display: block;
	padding: 3px 10px 0px 10px;
	text-align: center;
	height: 17px;
	text-decoration: none; 
	border-right: 2px solid #E67D00;
}
#pagebar a:hover {
	background-color: #FFFFFF;
	color: #000000;
	text-decoration: none; 
}
#pagebar ul {
	list-style:none;
	display: inline;
}
#pagebar li {
	float: left;
	display: inline;
}
#pagebar a.selected {
	background-color: #FFFFFF;
	color: #000000;
	border-right: 1px #E67D00 solid;
}
#footer {
	padding-left: 150px;
}

#footer a {
	font-family: "Trebuchet MS", Verdana, Arial, Sans-Serif;
	color: #FFE8BF;
	display: block;
	padding: 3px 10px 0px 10px;
	margin: 0;
	border-right: 1px #FFF solid;
	text-align: center;
	height: 18px;
	text-decoration: none; 
}
#footer ul {
	display: inline;
}
#footer li {
	float: right;
	display: inline;
}
.boxe_right {
	padding: 10px;
	border: 2px solid #FF9900;
	margin-bottom: 20px;
}
.boxe_left {
	background-color:#FFF;
	margin-bottom: 20px;
	padding: 5px;
}
.boxe_cat {
	width: 60%;
	float: left;
	background-color: #CCCCCC;
	padding: 10px;
	margin-bottom: 20px;
}
.boxe_cat ul, .boxe_main ul {
	list-style: none;
	margin-left: 0px;
	padding-left: 0px;
}
.boxe_cat li, .boxe_main li {
	float: left;
	width: 90px;
	text-align: center;
	height: 120px;
}
.boxe_main {
	float: left;
	background-color: #CCCCCC;
	padding: 10px;
	width: 90%;
}
#boxe_news {
	float: right;
	background-color: #CCCCCC;
	width: 30%;
	top: 0px;
	padding: 10px;
	margin-bottom: 20px;
}
.spacer {
	clear: both;
}
#main {
	float: left;
	width: 60%;
	margin-bottom: 20px;
}
-->
</style>
</head>

<body>
<div id="header">  div header, logo + baseline  </div>
<div id="global">
  <div id="pagebar">
    <ul>
      <li><a href="#" class="selected">Accueil</a></li>
      <li><a href="#">lien1 </a></li>
      <li><a href="#">lien2</a></li>
      <li><a href="#">lien3</a></li>
      <li><a href="#">lien4</a></li>
      <li><a href="#">lien5</a></li>
    </ul>
  </div>
  <div id="page">
    <h2>mon_site.com </h2>
    <div id="main">
      div id main
      <p>le contenu textuel de la page</p>
      <p>Equisis doluptate conse delisse quatio cor sed magnit wis aute velenis adionum nullan vent autat. Si tie dipit in et, consenisisse feuisi eum volenibh eugait iril ipisl er susto dolore tetum alit illaor ad exeratem irilla core velent aut iusto odolor incidunt erit illa feum vel etumsan eliqui blandre mod dunt nit pratet lummodo eriure min ute digna facipsustrud magnis dio essequipisi.</p>
    </div>
    <div id="boxe_news">
      <h3>boxe_news</h3>
	  <p>contenu de la boxe de nouvelles</p>
	  <p>Cing euguero odolor summy nibh et lut nullutem doluptat vercin vel ullam iurem dunt nulla augiam et laore magna conse veniscilit ad dolobor suscilit aliquam dit adip et aut lum volorpe raessis autet lute feugiamcommy nummolor sumsand ipisiss equat, quat, veraesto odolortio er alit lan eugiate tat. Duisi.</p>
    </div>
    <div class="boxe_cat">
      <h3>boxe_cat liste d'images</h3>
      <ul>
        <li><a href="#"><img src="http://xaglo.free.fr/image80-100.gif" alt="" name="" width="80" height="100" border="0" /><br />
        image 1</a></li>
        <li><a href="#"><img src="http://xaglo.free.fr/image80-100.gif" alt="" name="" width="80" height="100" border="0" /><br />
        image 2 </a></li>
        <li><a href="#"><img src="http://xaglo.free.fr/image80-100.gif" alt="" name="" width="80" height="100" border="0" /><br />
        image 3</a></li>
        <li><a href="#"><img src="http://xaglo.free.fr/image80-100.gif" alt="" name="" width="80" height="100" border="0" /><br />
        image 4</a></li>
        <li><a href="#"><img src="http://xaglo.free.fr/image80-100.gif" alt="" name="" width="80" height="100" border="0" /><br />
        image 5</a></li>
      </ul>
    </div>
    <div class="boxe_main">
     <h3>boxe_main liste images 2</h3>
      <ul>
        <li><a href="#"><img src="http://xaglo.free.fr/image80-100.gif" alt="" name="" width="80" height="100" border="0" /><br />
        image 1</a></li>
        <li><a href="#"><img src="http://xaglo.free.fr/image80-100.gif" alt="" name="" width="80" height="100" border="0" /><br />
        image 2 </a></li>
        <li><a href="#"><img src="http://xaglo.free.fr/image80-100.gif" alt="" name="" width="80" height="100" border="0" /><br />
        image 3</a></li>
        <li><a href="#"><img src="http://xaglo.free.fr/image80-100.gif" alt="" name="" width="80" height="100" border="0" /><br />
        image 4</a></li>
        <li><a href="#"><img src="http://xaglo.free.fr/image80-100.gif" alt="" name="" width="80" height="100" border="0" /><br />
        image 5</a></li>
        <li><a href="#"><img src="http://xaglo.free.fr/image80-100.gif" alt="" name="" width="80" height="100" border="0" /><br />
        image 6</a></li>
      </ul>
    </div>
    <hr class="spacer" />
  </div>
  <div id="column_left">
    <div class="boxe_left">
      <h3>boxe left 1</h3>
      <ul>
        <li><a href="#">lien1</a></li>
        <li><a href="#">lien2</a></li>
        <li><a href="#">lien3</a></li>
      </ul>
    </div>
    <div class="boxe_left">
      <h3>boxe left 2</h3>
      <ul>
        <li><a href="#">lien1</a></li>
        <li><a href="#">lien2</a></li>
        <li><a href="#">lien3</a></li>
      </ul>
    </div>
    <div class="boxe_left">
      <h3>boxe left 3</h3>
      <ul>
        <li><a href="#">lien1</a></li>
        <li><a href="#">lien2</a></li>
        <li><a href="#">lien3</a></li>
      </ul>
    </div>
  </div>
  <div id="column_right">
    <div class="boxe_right">
      <h3>boxe right 1</h3>
      <ul>
        <li><a href="#">lien1</a></li>
        <li><a href="#">lien2</a></li>
        <li><a href="#">lien3</a></li>
      </ul>
    </div>
    <div class="boxe_right">
      <h3>boxe right 2</h3>
      <ul>
        <li><a href="#">lien1</a></li>
        <li><a href="#">lien2</a></li>
        <li><a href="#">lien3</a></li>
      </ul>
    </div>
    <div class="boxe_right">
      <h3>boxe right 3</h3>
      <ul>
        <li><a href="#">lien1</a></li>
        <li><a href="#">lien2</a></li>
        <li><a href="#">lien3</a></li>
      </ul>
    </div>
  </div>
  <div id="footer"> 
    <ul>
      <li><a href="#">lien footer 1</a></li>
      <li><a href="#">lien footer 2</a></li>
      <li><a href="#">lien footer 3</a></li>
      <li><a href="#">lien footer 4</a></li>
      <li><a href="#">lien footer 5</a></li>
    </ul>
  </div>
</div>
</body>
</html>

et un lien pour la voir en ligne

Mon soucis d'overflow des listes d'image semble réglé Smiley smile (du moins sur firefox, je n'ai pas testé ailleurs). Il reste juste une <hr> en pied de page pour que tout ne déborde pas du blanc de la "page" dont je n'arrive pas à me débarrasser.

Une autre question concernant ces liste d'images sur laquelle je me casse les dents, comment arriver à centrer les images dans son conteneur? même en centrant le conteneur (boxe) et réapliquant l'alignement gauche des autres éléments, la balise <ul> semble ne pouvoir être gérée que par sa margin_left, impossible de la centrer!!??
xaglo a écrit :
oui, je n'ai pas encore creusé ni trop compris cette histoire de HasLayout


La 1ère chose a maitriser là dedans n'est pas la question du haslayout qui ne concerne que IE, et encore dans ton cas IE inférieur à IE7. Mais plutôt la notion de contexte de formatage qui est elle plus générale.

Mais bon quoiqu'il en soit, au lieu de tourner autour du pot tu ferais mieux de te coller à l'apprentissage et à la maitrise de tout cela.


a écrit :

de plus mon conteneur n'est pas en largeur fixe mais fluide


Rien à voir, si ton élémént est dimensionné alors il est dimensionné.
Christian Le Bouler a écrit :
Mais bon quoiqu'il en soit, au lieu de tourner autour du pot tu ferais mieux de te coller à l'apprentissage et à la maitrise de tout cela.

C'est dit un peu sèchement mais c'est pas faux. Disons que si on veut utiliser des solutions fines et pas les grosses ficelles comme le hr (ou autre élément) avec clear:both, ça demande un minimum d'apprentissage. Smiley cligne

a écrit :
Rien à voir, si ton élémént est dimensionné alors il est dimensionné.

Un élément dimensionné sera doté du layout dans Internet Explorer Windows. Dans ce navigateur uniquement, il aura donc un comportement particulier, dont une des caractéristiques est qu'il empêchera le dépassement de ses enfants et descendants flottants.

Sur le HasLayout : Avoir le layout - Le concept de hasLayout dans IE/Win.

Un élément dimensionné, c'est tout simplement un élément qui a une propriété CSS width ou height avec une valeur autre que "auto".
Par exemple :
div.bloc {width: 100%;}

D'autres propriétés CSS permettent de doter un élément du layout. Mais il n'est pas toujours souhaitable de passer par le HasLayout, qui pose aussi certains problèmes.
Christian Le Bouler a écrit :
Mais bon quoiqu'il en soit, au lieu de tourner autour du pot tu ferais mieux de te coller à l'apprentissage et à la maitrise de tout cela.
je ne tourne pas autour du pot et c'est ce que je fais... et l'apprentissage passe par des questions qui peuvent vous paraitre naïves Smiley confused

a écrit :
il n'est pas toujours souhaitable de passer par le HasLayout, qui pose aussi certains problèmes.
C'est ce que j'avais cru comprendre... D'où mes "grosses ficelles" en attendant de trouver mieux Smiley cligne

Merci en tous cas pour vos réponses, je vais creuser tout ça...

Et sur la question de centrer un <ul>???

N'hésitez pas à critiquer ou commenter la structure de ma page que je vous propose ci-dessus...
Salut,

la balise <ul> étant de type bloc, tu peux utiliser les marges automatiques pour la centrer, si tu imposes la largeur :
ul {
   width: 80%;
   margin: 0 auto;
}
Ca fonctionne effectivement sur le principe de centrer l'objet de largeur donnée 80% ou autre. Dans mon cas (voir la page de test en ligne) je cherchais à centrer les images disponible dans la liste (2, 3 ou 4 suivant la largeur d'écran) et qu'elles prennent le maximum d'espace disponible, cela ne peut donc pas marcher. Mais bon, c'était un détail...

Merci en tous cas pour vos réponses qui me permettent de progresser rapidement et bravo pour votre réactivité Smiley smile
xaglo a écrit :
Dans mon cas (voir la page de test en ligne) je cherchais à centrer les images disponible dans la liste (2, 3 ou 4 suivant la largeur d'écran) et qu'elles prennent le maximum d'espace disponible

En fait tu voulais « justifier » les li flottants de ta liste. À ma connaissance ça n'est pas possible. Avec un bon support par les navigateurs de display: inline-block (ce qui n'est pas le cas, le plus à la traine étant, ça nous change, Mozilla Firefox), tu pourrais les centrer, mais pas les justifier.

Une autre solution est d'utiliser un tableau plutôt qu'une liste, mais dans ce cas il faut choisir à l'avance le nombre de cellules par ligne, ce qui est parfois problématique dans le cas d'un design fluide.
non, je ne cherche pas à justifier toutes les images (quoique pourquoi pas), j'aurais aimé qu'elles gardent une distance fixe entre elles mais que le groupe de 3 ou 4 se centre dans la boxe.

La solution de Thomas D. s'en approche presque mais cela oblige à limiter la largeur à x%, j'aurais aimé que celles-ci prennent les 100% si l'espace le permet et se centrent sinon.
exemple 4 images à 100%:
upload/12182-4images.png

et si l'espace est plus petit 3 images centrées
upload/12182-3images.png

En gros ma solution serait un float:center!!! (je suis sûr qu'il vont nous l'inventer en CS3 ou 4 Smiley lol )

Sinon la solution du tableau, comme tu dis, elle ne fonctionne pas car je veux garder le nombre d'image fluide en fonction de la résolution et j'essaye justement de me détacher de mes vieilles habitudes de <table> Smiley cligne
pour le centrage des images des "listes" on verra plus tard éventuellement...

Je me bat à cette heure avec le menu du haut, qui fonctionne correctement sous Firefox mais pas sous IE

Quelqu'un pourrait-il trouver où se situe ma boulette?? J'ai mis une page de test de ma css complète ici [edit lien supprimé]

je suis également à votre écoute sur votre avis pour la structure globale, certainement encore maladroite...halala qu'il est long le chemin de l'apprentissage des CSS Smiley confused

PS. Je supprimerai le lien rapidement après votre avis, le site est vraiment "en chantier", je ne voudrais pas rendre l'adresse publique trop vite
Modifié par xaglo (09 May 2007 - 00:50)
j'ai résolu mon défaut: j'appliquais le display: block sur les liens a et non les lignes li... Ce que supporte firefox et non IE Smiley confused