Bonjour à tous,
Vous avez déjà tous vu le fameux problème des éléments flottants qui ne sont plus pris en compte dans le flux de l'élément parent (et donc dans le calcul de sa hauteur) avec les navigateurs respectant un tant soit peu les CSS. C'est à dire dans ce cas précis :
- navigateurs basés sur Gecko (Firefox)
- Safari
- Opera
- Konqueror
- IE Mac 5
Mais pas avec IE 6.
À force de l'expliquer aux débutants (et un peu moins débutants) qui rencontrent ce problème pour leur site, j'ai eu l'idée d'en faire une page explicative. Elle se trouve par ici :
Éléments flottants qui dépassent de l'élément parent
Alors d'accord, ça fait sûrement doublon avec la faq ( http://forum.alsacreations.com/faq/#item6 ), mais ça a l'avantage de proposer quelque chose de visuel qui permette de faire des tests dans divers navigateurs. Et puis j'avais envie
Le fond de la question : je rencontre deux problèmes de compatibilité.
Problème n°1 :
La première solution, la plus classique (celle du spacer en clear: both;), pose problème avec IE Mac (testé sous IE Mac 5.2). Le deuxième élément flotté est bien flotté à droite, mais passe à la ligne tout de même. Après des tests pour éliminer le risques de collision de blocs (en réduisant le paragraphe à une largeur très faible pour laisser toute la place nécessaire à l'image sans risquer qu'un chevauchement ne provoque un retour à la ligne), je n'ai toujours pas trouvé la source de ce problème.
Cependant, il me rappelle un article de Laurent Denis sur le contexte de formatage de bloc.
http://www.blog-and-blues.org/articles/Float%2C_clear_et_contextes_de_formatage
Mon problème est différent du cas exposé, mais il pourrait y avoir un lien. Sauf que je n'y comprends pas grand chose, et que les histoires de contexte de formatage de blocs, là j'ai un peu de mal.
C'est à peine s'il ne faudrait pas avoir écrit soi-même les divers clients web sur le marché pour savoir comment ils fonctionnent vraiment !
Problème n°1 :
La deuxième solution, celle d'utiliser la propriété overflow: auto; sur le bloc parent (ce qui crée un contexte de formatage de bloc... j'ai bon ?), est séduisante. Elle passait très bien lors de mes tests sous Firefox 1.5, Opera, Konqueror, Safari et IE Mac, et sans provoquer de cataclysme dans IE6 Win. Je me suis dit : « C'est dans la poche ! »
Mais non : bug observé avec Firefox 1.0.x (1.0.4 sous Mac OS et 1.0.7 sous Linux) : l'écart entre le deuxième élément flotté et le bloc conteneur fait le triple de la taille attendue (il devrait se limiter à un padding-right de 20px, et il fait 60px). Pas glop.
Tests :
- Le problème ne se pose que pour des blocs en largeur fixe (pixels ou em).
- Le problème ne se pose pas pour des blocs sans largeur fixée.
- Le problème ne se pose pas pour des blocs ayant une largeur en pourcentage de la largeur disponible (widht: 60%; par exemple).
- La position des éléments dans le flux du document n'a aucune influence.
- La présence de texte en début de bloc conteneur (texte en flux, que des éléments de type en-ligne et des caractères) n'a pas d'influence non plus.
- La suppression du padding-right de 20px du bloc conteneur supprime 40px de notre écart. On n'a plus que 20px.
- La suppression du padding-right de 20px et du padding-left de 20px du bloc conteneur réduit l'écart à 0px.
- Les padding en unités relatives (em) posent le même problème.
- On constate aussi que parfois le bug "s'installe" en deux temps. Un premier chargement de la page donne un comportement normal (pas de bug), mais si on recharge la page le bug revient.
En résumé, au lieu d'avoir :
padding-right = padding-right = 20px
On a :
padding-right = (padding-right × 2) + padding-left = 60px
Uniquement pour le padding-right.
Uniquement lorsqu'on a des éléments flottant à droite.
Si quelqu'un sait quelque chose sur ce bug assez surprenant ?
Modifié par mpop (21 Feb 2006 - 19:23)
Vous avez déjà tous vu le fameux problème des éléments flottants qui ne sont plus pris en compte dans le flux de l'élément parent (et donc dans le calcul de sa hauteur) avec les navigateurs respectant un tant soit peu les CSS. C'est à dire dans ce cas précis :
- navigateurs basés sur Gecko (Firefox)
- Safari
- Opera
- Konqueror
- IE Mac 5
Mais pas avec IE 6.
À force de l'expliquer aux débutants (et un peu moins débutants) qui rencontrent ce problème pour leur site, j'ai eu l'idée d'en faire une page explicative. Elle se trouve par ici :
Éléments flottants qui dépassent de l'élément parent
Alors d'accord, ça fait sûrement doublon avec la faq ( http://forum.alsacreations.com/faq/#item6 ), mais ça a l'avantage de proposer quelque chose de visuel qui permette de faire des tests dans divers navigateurs. Et puis j'avais envie
Le fond de la question : je rencontre deux problèmes de compatibilité.
Problème n°1 :
La première solution, la plus classique (celle du spacer en clear: both;), pose problème avec IE Mac (testé sous IE Mac 5.2). Le deuxième élément flotté est bien flotté à droite, mais passe à la ligne tout de même. Après des tests pour éliminer le risques de collision de blocs (en réduisant le paragraphe à une largeur très faible pour laisser toute la place nécessaire à l'image sans risquer qu'un chevauchement ne provoque un retour à la ligne), je n'ai toujours pas trouvé la source de ce problème.
Cependant, il me rappelle un article de Laurent Denis sur le contexte de formatage de bloc.
http://www.blog-and-blues.org/articles/Float%2C_clear_et_contextes_de_formatage
Mon problème est différent du cas exposé, mais il pourrait y avoir un lien. Sauf que je n'y comprends pas grand chose, et que les histoires de contexte de formatage de blocs, là j'ai un peu de mal.
C'est à peine s'il ne faudrait pas avoir écrit soi-même les divers clients web sur le marché pour savoir comment ils fonctionnent vraiment !
Problème n°1 :
La deuxième solution, celle d'utiliser la propriété overflow: auto; sur le bloc parent (ce qui crée un contexte de formatage de bloc... j'ai bon ?), est séduisante. Elle passait très bien lors de mes tests sous Firefox 1.5, Opera, Konqueror, Safari et IE Mac, et sans provoquer de cataclysme dans IE6 Win. Je me suis dit : « C'est dans la poche ! »
Mais non : bug observé avec Firefox 1.0.x (1.0.4 sous Mac OS et 1.0.7 sous Linux) : l'écart entre le deuxième élément flotté et le bloc conteneur fait le triple de la taille attendue (il devrait se limiter à un padding-right de 20px, et il fait 60px). Pas glop.
Tests :
- Le problème ne se pose que pour des blocs en largeur fixe (pixels ou em).
- Le problème ne se pose pas pour des blocs sans largeur fixée.
- Le problème ne se pose pas pour des blocs ayant une largeur en pourcentage de la largeur disponible (widht: 60%; par exemple).
- La position des éléments dans le flux du document n'a aucune influence.
- La présence de texte en début de bloc conteneur (texte en flux, que des éléments de type en-ligne et des caractères) n'a pas d'influence non plus.
- La suppression du padding-right de 20px du bloc conteneur supprime 40px de notre écart. On n'a plus que 20px.
- La suppression du padding-right de 20px et du padding-left de 20px du bloc conteneur réduit l'écart à 0px.
- Les padding en unités relatives (em) posent le même problème.
- On constate aussi que parfois le bug "s'installe" en deux temps. Un premier chargement de la page donne un comportement normal (pas de bug), mais si on recharge la page le bug revient.
En résumé, au lieu d'avoir :
padding-right = padding-right = 20px
On a :
padding-right = (padding-right × 2) + padding-left = 60px
Uniquement pour le padding-right.
Uniquement lorsqu'on a des éléments flottant à droite.
Si quelqu'un sait quelque chose sur ce bug assez surprenant ?
Modifié par mpop (21 Feb 2006 - 19:23)