Bonjour,

Si j'ai bien compris (ce que j'ai par ailleurs pu constater), I.E. sépare d'autorité de 3px deux div consécutifs en float:left.
J'ai aussi bien compris que si ça gêne, on commentaire-conditionnalise.
OK !

However :

Si j'ai deux div consécutifs en float:left
dimensionnés pour la width disons à 60% pour le premier et à 40% pour le second du conteneur parent,

comment faire pour prendre en compte ces [@# de ]@#@ de 3px ?

En d'autres termes, quelle valeur en % donner à la width du second pour prendre en compte ces 3px de plus en moins...

Je sais me débrouiller avec JS pour trouver combien valent 3px en % du conteneur parent mais le but de la manipe est justement de ne pas utiliser JS... Enfin... Pas pour cela...

Merci pour vos lumières.
Modifié par aCOSwt (12 Jun 2007 - 11:48)
aCOSwt a écrit :
Si j'ai bien compris (ce que j'ai par ailleurs pu constater), I.E. sépare d'autorité de 3px deux div consécutifs en float:left.

Three Pixel Jog même entre deux flottants ? Il me semble que non. À vérifier.
(Nota : on parle ici uniquement d'IE6. Pas de Three Pixel Jog dans IE7, bug corrigé.)

aCOSwt a écrit :
Si j'ai deux div consécutifs en float:left
dimensionnés pour la width disons à 60% pour le premier et à 40% pour le second du conteneur parent

Alors tu as un flottant de trop.
Fais flotter le premier bloc à gauche, et laisse le second en flux.

Même si le Three Pixel Jog ne se produit pas, tu éviteras des problèmes d'arrondi des valeurs en pourcentages, par exemple.

Consigne générale : ne jamais mettre que des flottants sur une largeur, toujours avoir un bloc en flux pour faire zone tampon. Smiley smile
Modifié par Florent V. (08 Jun 2007 - 11:12)
Merci à Florent V.

Le poster qui réédite plus vite que son ombre au point que lui répondre en le citant relève de la gageure...
L'as des tutos de la mise en page CSS au point que, sincère !, si je ne finis pas dernier à CSSR 2007, ce sera grâce à lui !

This being said... et quitte à passer pour un bourrain militant... je n'ai encore pas tout compris :

1/
Florent V. a écrit :

Fais flotter le premier bloc à gauche, et laisse le second en flux.

Je ne pensais pas sortir du flux avec float:left.
Je croyais que seuls les position:absolute et position:fixed faisaient sortir du flux...

2/
Florent V. a écrit :

Three Pixel Jog même entre deux flottants ? Il me semble que non. À vérifier.

Je crains croire que c'est pourtant ce que j'ai constaté...

3/
Florent V. a écrit :

Consigne générale : ne jamais mettre que des flottants sur une largeur, toujours avoir un bloc en flux pour faire zone tampon.

Yop ! Indépendemment de mon interrogation 1/, comment faire lorsque la zone tampon est centrale.
car, en fait, j'avais simplifié mon problème pour l'exposer.
Dans la réalité, j'ai 5 divs côte à côte et je souhaiterais ajuster sur le central.
Je m'imagine bien que je peux dichotomiser le problème (imbriquer des divs) pour arriver à ce que tu conseilles mais cela me semble un peu lourd.

Edit : J'entends par imbriquer des divs faire d'abord deux divs.
- Le premier en float left contenant les deux premiers dont le premier en float left
- le second dans le flux contenant les 3 divs restant dont les deux derniers en float right et le 1° ajustable dans le flux

Edit 2 : Mon problème n'en demeure pas moins...
Quelle width donner à cette zone tampon. Si je ne lui donne pas de width, je ne pourrais pas, entre-autres, la colorier...
Modifié par aCOSwt (08 Jun 2007 - 12:30)
Les éléments sortent du flux lorsqu'ils sont positionnés en fixe, en absolu, ou lorsqu'ils sont flottants. Du moins c'est ainsi que l'on présente les choses en général. Il faudrait que je plonge dans la spécification CSS pour vérifier s'il n'y a pas quelque abus de langage là-dessous.

Ceci dit, cette question de vocabulaire est secondaire. Je voulais donc dire : laisser le second div en float: none et position: static (les valeurs par défaut).

Mais s'il y a cinq blocs à placer, ça ne se complique pas tant que ça. Ou disons que ça dépendra de ce que tu veux faire exactement.

Pour commencer et après vérification : pas de Three Pixel Jog entre flottants. Les deux seuls écueils d'IE à éviter seront donc :
- les problèmes d'arrondis des valeurs en pourcentages (si on met cinq blocs flottants en width: 20%, de temps en temps le cinquième passera à la ligne...) ;
- les problèmes d'élargissement des blocs à cause de contenus, chaine de caractères ou images, trop larges pour le flottant (problème évité avec un overflow: hidden, mais ça n'est pas toujours souhaitable...).

Pour cinq blocs en largeur 20%, tu peux faire quelque chose comme ça :
<!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" />
	<title></title>
	<style type="text/css">
		div.float {
			float: left;
			width: 20%;
		}
		div.none {
			margin-left: 80%;
		}
	</style>
</head>

<body>
<div class="float" style="background: mistyrose;">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat.</div>
<div class="float" style="background: skyblue;">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat.</div>
<div class="float" style="background: yellow;">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat.</div>
<div class="float" style="background: burlywood;">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat.</div>
<div class="none" style="background: red;">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede. Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales hendrerit.</div>
</body>
</html>


Ou bien une variante (même code HTML) :
	<style type="text/css">
		div.float {
			float: left;
			width: 20%;
		}
		div.none {
			overflow: auto;
		}
	</style>
	<!--[if lte IE 6]><style type="text/css">
		div.none {
			overflow: visible;
			height: 1%;
			position: relative; left: -3px;
		}
	</style><![endif]-->

Par contre, dans ce cas on se retrouve avec un Three Pixel Jog bien plus visible (conséquence du HasLayout...).
Florent V. a écrit :
Les éléments sortent du flux lorsqu'ils sont positionnés en fixe, en absolu, ou lorsqu'ils sont flottants. Du moins c'est ainsi que l'on présente les choses en général. Il faudrait que je plonge dans la spécification CSS pour vérifier s'il n'y a pas quelque abus de langage là-dessous.


Sortir du flux est une expression qui décrit mal les différentes situations, bien que la spécification la suggère ("un flottant n'est pas dans le flux... un élément en position absolue est retiré du flux")

En fait, les éléments flottants sont d'abord placés selon le flux, puis adoptent le comportement qui leur est spécifique et qui les en retire en effet partiellement, ce qui autorise le flux à se poursuivre de manière adjacente. Mais ils continuent à interagir avec le flux.

De même, les éléments positionnés ne sont totalement indépendant du flux que si des valeurs de position explicites leur sont données (les valeurs par défaut de top, left, right et bottom ne sont pas zéro, ce qui n'aurait aucun sens).
Hé bhé !

Florent V. in Un design fluide... ed AlsaCréationS 2007 a écrit :

Si cela ne vous semble toujours pas clair, je vous invite à consulter cette page de démonstration du comportement des flottants, pour tenter de comprendre ce mystère par l'observation méthodique.


Je dois avouer que, il y a 4 jours, les explications de Laurent Denis brillaient... par leurs points obscurs !

Et puis, 4 jours d'observation méthodique au lieu de décider de prendre ce que je constatais de mes manipes pour de l'errance aléatoire hasardeuse systématique de browser à la petite semaine et... Tilt ! :

Laurent Denis a écrit :
En fait, les éléments flottants sont d'abord placés selon le flux, puis adoptent le comportement qui leur est spécifique et qui les en retire en effet partiellement, ce qui autorise le flux à se poursuivre de manière adjacente. Mais ils continuent à interagir avec le flux.


Cela a fini par... intégrer le flux épais de ma compréhension !

Merci à vous deux pour cette exploit héroïque.

PS. Ne m'en veuillez pas trop si quelques-unes de mes questions postérieures viennent infirmer le fait que j'aie réellement compris quoi que ce soit, c'est normal !
Laurent gagne au passage un bon pour un jugement définitif quant à mes capacités intellectuelles dans le thread de son choix...