28173 sujets

CSS et mise en forme, CSS3

Bonjour,
comme vous l'avez deviné en lisant mon titre, pour forcer mes block contenant des elements en float à correctement s'adapter à leur contenu j'utilise overflow:hidden; pour Firefox et height:1%; pour IE, le probleme que je n'ai pas toujours c'est que parfois coup et logiquement FireFox reduit la taille de mon block à 1% et cache ce qui dépasse.. mes questions sont :

Pourquoi pas toujours ?

et

Avez vous une solution autres qu'un hack pour éviter ce comportement ?

Merci beaucoup.
dhjapan a écrit :
Pourquoi pas toujours ?

Si le parent du bloc auquel tu donnes une hauteur de 1% n'a pas lui-même de hauteur (c'est à dire que sa hauteur dépend de son contenu), le height: 1% est censé être ignoré. Par contre, si le parent a une hauteur déterminée (et applicable, c'est à dire pas une hauteur en pourcentage alors que son propre parent n'aurait pas de hauteur déterminée, etc.), le height: 1% est appliqué. D'où, je suppose, la différence.

Solution: ne pas utiliser à la fois height: 1% et overflow: hidden.

Reprenons: la solution standard est d'utiliser un overflow: auto ou overflow: hidden pour empêcher le dépassement des flottants. Comme le overflow: auto déclenche parfois l'apparition de barres de défilement parasites avec certains navigateurs, et que la propriété overflow est justement utilisée pour éviter que des éléments ne dépassent du bloc, on préfèrera alors l'utilisation de overflow: hidden.

Problème: avant sa version 7, Internet Explorer ne génère pas de contexte de formatage via la propriété overflow*. Pour y palier, on utilise le HasLayout, généralement via une des déclarations suivantes:
- width: <tout sauf "auto">; (généralement, si le bloc n'a pas déjà de largeur, et pas de padding/border: width: 100%;);
- height: <tout sauf "auto">; (généralement, si le bloc n'a pas déjà de hauteur: height: 1%;
- zoom: 1; (fonctionne avec IE6+ uniquement).

Le plus classique est le height: 1%, mais pour ma part je préfère utiliser un width: 100% lorsque je le peux.

Quoi qu'il en soit, on est bien d'accord que ce correctif s'applique à Internet Explorer pour Windows, version 5 et 6 (pas nécessaire pour la version 7... quant à la version 4, elle est négligeable, pour ne pas dire morte et enterrée). Donc si c'est pour IE 6 et inférieurs uniquement, on adresse ce correctif CSS via un commentaire conditionnel qui va bien.
&#8594; Voir la FAQ du forum pour les commentaires conditionnels.

Si on utilise le height: 1%, toujours via le commentaire conditionnel, on aura donc intérêt à utiliser également un overflow: visible pour annuler le overflow: hidden.

Quant aux navigateurs hors IE 5-6... ils ne verront pas la couleur du height: 1%, donc pas de problème.

Voilà, je crois qu'on a fait le tour.

----
* Je m'avance peut-être un peu. Toujours est-il que overflow: auto|hidden n'empêche pas le dépassement des flottants dans IE5-6.
Edit : zut j'ai posté en même temps que toi Florent Smiley smile

Bah si tu dois donné des attributs CSS différent via FF et IE pourquoi pas les commentaires conditionels ?

Ce n'est pas un hack (a ma connaissance) et c'est valide XHTML 1.0 Transitional.

Rude
Modifié par ffwrude (11 Sep 2007 - 14:29)
ffwrude a écrit :
pourquoi pas les commentaires conditionels ?

Ce n'est pas un hack (a ma connaissance)

Ça n'est effectivement pas un hack (c'est à dire l'utilisation d'une incapacité ou d'une tolérance coupable de tel ou tel navigateur).

ffwrude a écrit :
et c'est valide XHTML 1.0 Transitional.

Valide HTML 1 à 5, et XHTML 1 à 2... en fait, c'est valide tant que la syntaxe de commentaires <!-- commentaire --> est permise, soit toute version de HTML et de XML (et comme XHTML utilise la syntaxe XML...).
Merci pour cette réponse super détailée, j'y vois un peu plus claire, seulement j'ai là un cas où j'applique height:1%; à une boite dont la parent n'a pas de height applicable, et pourtant height:1%; s'applique sous firefox.
(edit : )http://uoa7.free.fr/CSS-test/height1pc/layouts/collec_assoc.html
Vous en pensez quoi ? (edit : apparement c'est html la boite parent qui a une hauteur applicable.)

Pour le même cas remplacer height:1%; par width:100%; fonctionne parfaitement en tout cas, merci.
Modifié par dhjapan (11 Sep 2007 - 16:15)
Bonjour,
en principe comme l'explique FLorent, le height:1% ne devrait
avoir aucun effet mais le fait est que tu es mode quirks (pas de doctype > voir le blog et les tuto pour des explications).
Ajoutes un doctype valide et tu verras que ton height:1% n'écrasera plus
ton div.
Modifié par Hermann (12 Sep 2007 - 13:05)