28173 sujets

CSS et mise en forme, CSS3

Bonjour,

Aujourd'hui, une question sur les listes.

CE QUE JE VEUX FAIRE

J'ai des <li> organisés dans un <ul> (normal jusque là), positionnés en float, ce qui fait qu'ils se retrouvent sur plusieurs lignes (voir le screenshot pour l'exemple).
La hauteur de ces <li> varie en fonction du contenu (on entre un texte).

upload/6514-good.png

CE QUI SE PASSE

Le comportement observé dans la première image s'applique lorsque l'on rentre un texte dans le deuxieme <li> de la rangée, ou tous les <li> de la dernière rangée. Je vous explique pourquoi un peu plus loin.

Le problème que j'ai, c'est pour le premier <li>. Voilà ce qui se passe:



Vous aurez reconnu un probleme courant avec les floats, c'est à dire qu'il manque un clear:both sous la première rangée pour aligner tout ce petit monde.

Si ce problème n'apparait pas pour les éléments de la dernière rangée, c'est qu'il y a effectivement un "footer" clear: both à la fin.

LES QUESTIONS QUE JE ME POSE

Si on refléchi bien, il suffirait de rajouter un <div> ou un <hr> clear: both tous les 2 éléments pour palier au problème. Ceci marche sous FF mais petit problème sous IE.
Mais ce n'est pas là ou je veux aller. En effet, les éléments <li> doivent etre ABSOLUMENT SEULS dans le<ul> car tous ces éléments "bougent" dans le DOM (avec un peu de javascript, API "tool-man" pour ceux qui connaissent).

Donc pas possible de rajouter des éléments.

Questions:
1/ Pourquoi est-ce que ca fonctionne correctement avec le deuxième élément d'une rangée (comme illustré dans la première image) ? Intuitivement, je m'attendais à ce que ça foire...

2/ Comment résoudre le problème illustré dans la seconde image an utilisant uniquement des propriété de style pour l'élément <li> ?

En espérant que l'on puisse trouver une réponse ensemble Smiley sweatdrop
Merci d'avance ! Smiley biggrin

CODE

HTML:

<ul class="graphescontainer">
  <li>
    <div class="handle"><span class="edittitle">$varname</span></div>
      <object type="application/x-shockwave-flash" 
         bla bla bla   
      </object>
      <div class="edittext">Click here to add text</div>
   </li>
   
   ...
   Repeter 4 fois le <li>
   ... 
          
</ul>
<div class="clear"></div>


CSS:

.graphescontainer
{
  list-style-type: none;
  width: 100%;
  padding: 0px;
  margin: 0px;
}

.graphescontainer li
{
  border: 1px solid #333333;
  margin: 3px;
  position: relative;
  float: left;
  width: 49%;
}

.graphescontainer li .handle
{
  cursor: move;
  background-color: #333333;
  color: #FFFFFF;
  width: 100%;
  border: none;
  padding: 0px;
  margin-top: 0px;
  text-align: center;
  font-weight: bold;
  padding-bottom: 1px;
}

div.edittext
{
  margin-top: 5px;
  cursor: text;
  text-align: left;
  padding: 3px;
  padding-top: 2px;
  background-color: #FFFFE1;
}

.clear
{
  clear: both;
}


Smiley smile
Modifié par vinzzonline (20 Jul 2006 - 10:23)
salut,
Je crois que tu te complique la tache mais c'est mon avis.
Et les ul ne peuvent contenir que des éléments li (voir faq), d'ou ma question est-ce que les li peuvent contenir des div ??

+
Administrateur
Bonjour,

testé (IE5/6/7 Fx 1.0x 1.5 Opera 8/9 Safari Konqueror Galeon, portables, Jaws, Lynx et enfin le navigateur qui n'existera que dans 3 ans) ou lu dans la recommandation du W3C? (l'un n'étant pas toujours lié avec l'autre et vice-versa Smiley rolleyes )
Sans vouloir trop m'avancer, je crois que <li> agit comme un conteneur inline et par là, peut contenir tout ce qu'on veut....

Mais non je n'ai pas testé exhaustivement, et je n'ai pas fourré mon nez dans la recommandation, donc ce ne sont pas paroles d'évangile Smiley lol

Mais heu... on s'éloigne du sujet initial là Smiley biggol Smiley bawling
vinzzonline a écrit :
Sans vouloir trop m'avancer, je crois que <li> agit comme un conteneur inline et par là, peut contenir tout ce qu'on veut....

C'est l'inverse : un élément de type en-ligne de peut contenir que des éléments de type en-ligne (du moins en XHTML Strict). Seuls les éléments de type bloc peuvent contenir des éléments de type bloc ET des éléments de type en-ligne (avec un certain nombre d'exceptions notables : UL ou TR ne peuvent pas contenir n'importe quoi…).

Pour ton problème
Suite du message édité, j'y avais écrit des bêtises… Smiley confused
Modifié par mpop (30 Jun 2006 - 17:24)
Je reprends : pour ton problème, ça serait bien d'avoir une page en ligne pour constater de visu, et pouvoir faire des tests. Parce que là, on ne sait pas ce que tu as utilisé niveau float, clear, sur quels éléments, etc.

À priori, si tu donnes à tes li une largeur fixe, et à ton ul une largeur fixe telle qu'il ne peut pas contenir plus de deux li, alors le retour à la ligne sera automatique. Tu n'auras donc pas besoin de la propriété clear.

Le problème de la propriété clear appliquée aux li (un sur deux pour obtenir l'effet que tu souhaites), c'est qu'elle est mal interprétée par Internet Explorer, me semble-t-il.

Voilà un peu ce que ça donne, avec et sans la propriété clear :
upload/2043-float-et-cl.png
Attention, image toute légère (10Ko) mais maousse en largeur.

EDIT : en fait non, tu vas avoir besoin d'un clear pour éviter qu'un bloc impair ne vienne se placer à droite… Mais je ne sais pas si le rendu d'IE peut créer des problèmes d'affichage. À tester.
Modifié par mpop (30 Jun 2006 - 17:43)
Gourou, tu as apporté une réponse parfaite à mes questions avec ton image !!!

Si tu l'a crée spécialement pour ce post, c'est super pratique ! merci beaucoup ! Smiley biggrin

J'ai essayé, et j'ai le comportement illustré par les deux dernières vignettes, à savoir IE est un peu spécial (quoique ce n'est pas dramatique).

Malheureusement, je n'ai pas de page à proposer pour faire des tests, car c'est un dev interne (entreprise...).

Bon, ce problème résolu, j'en ai un nouveau avec l'API tool man (les <li> peuvent etre déplacés dans le <ul>, en drag&drop), car du coup, les li gardent leur propriétés (clear ou pas), mais ne sont plus nécessairement aux endroits impairs Smiley biggol

Allez, un petit [Résolu] ! Smiley biggrin
Pour rentrer un peu plus dans les détails, je viens de faire les pages suivantes :

Organiser une série de flottants en colonnes (3 pages en tout, naviguer via les liens au début de chaque page).

On peut y voir qu'il y a un bug assez sérieux avec Internet Explorer (voir pages 1 et 2). J'ai rajouté une troisième page pour montrer un bug de HasLayout, mais il est assez simple de s'en défaire.

Par contre, je ne sais pas comment corriger le bug d'IE qui interprète mal (me semble-t-il) la propriété clear :
– les éléments flottants dotés de la propriété clear se comportent normalement ;
– les autres éléments flottants ne tiennent pas compte de l'action du clear.

Je suis assez perplexe… Smiley sweatdrop
Si quelqu'un a une info, je suis preneur !
Salut mpop

As tu essayer d'oter l'héritage par un [float:inherit;] ?

c'est peut être une piste à suivre Smiley cligne

@+
Michel a écrit :
As tu essayer d'oter l'héritage par un [float:inherit;] ?

c'est peut être une piste à suivre Smiley cligne

Sur quels éléments voudrais-tu placer ce float: inherit; ? Si je le place sur les li, ceux-ci ne seront plus flottants, car l'élément parent n'est pas flottant.

Je suis perplexe. Tu pensais à quelque chose de précis ?
Un truc de ce genre, mais a creuser un peu plus.


<!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">
<head>
<title>Document sans titre</title
><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<style>
*{margin:0; padding:0;}

#global{width:206px}

.clr{float:inherit; width:0; height:0; background:#FFCC33; clear:both;}

ul{}

li{float:left; list-style-type:none; width:100px; height:50px; border:1px solid #000}


</style>
</head>

<body>
<div id="global">
<ul>
<li>a</li>
<li>b</li>
<li class="clr"></li>
<li>c</li>
<li>d</li>
<li class="clr"></li>
<li>e</li>
<li>f</li>
<li class="clr"></li>
<li></li>
<li></li>
<li class="clr"></li>
</ul>
</div>
</body>
</html>



@+ Smiley cligne
<li>a</li>
<li>b</li>
<li class="clr"></li>
<li>c</li>
<li>d</li>
<li class="clr"></li>
<li>e</li>
<li>f</li>

En fait, cette structure correspond à rajouter un hr pour provoquer le retour à la ligne, tout en restant « techniquement » valide car seuls les li sont autorisés comme enfants de ul.

C'est une possibilité. Dommage cependant que ça demande de rajouter des items de liste vides ! Il faudra alors se poser la question de l'accessibilité de cette technique.

Sinon, on peut rappeler que la structure en colonnes voulue n'impose en aucun cas l'utilisation de listes ! Avec une série de div ou de paragraphes, il devient alors possible de rajouter des hr pour « clearer » tous les n éléments.
Bonsoir

Savoir apprécier le tout dans son ensemble et séparément là est la question.
Regarde le coquillage d'Eric Meyer, rien de standard, pourtant quelle merveille.

La notion de choix du standard est noble, ne pas l'appliquer ne veut pas dire être un paria.

La notion ART est vaste,"mouvement Fluxus"

@+
Merci mpop et michel pour tout vos conseils !!!
Surtout la page d'exemples, super bien faite !

Je vais tester tout ça demain au boulot, et je vous donne un feedback !

Smiley biggrin