Bonjour,

Après plusieurs heures passées à essayer de rendre un code, utilisant la propriété CSS min-height, compatible avec l'ensemble des navigateurs, je suis tombé sur les articles d'Alsa (Blog et FAQ) traitant du sujet.

Cependant, j'ai opté pour une autre solution, qui peut-être pourrait être ajoutée à la FAQ.

Elle consiste à utiliser un tableau de une cellule. Tout simplement.
Ainsi, le code créé un "bloc" pour lequel on peut spécifier une hauteur. Et si le contenu est important, alors la cellule s'étirera, comme le ferait un bloc associé à la propriété min-height.

Etant adepte des CSS, de la sémantique, de l'accessibilité... ce choix peut paraître étrange.

Ma raison est simple. Je n'utilise jamais (ou très rarement) de hack. Je ne le souhaite pas, car je trouve que cela compromet la pérennité d'un site.

Pourquoi vouloir à tout prix se passer de tableau, lorsque celui-ci, qui existe depuis les débuts du html, répond parfaitement à la problématique, sur tous les navigateurs ? La solution paraît plus "solide", et l'accessibilité n'est absolument pas remise en cause.

A priori, le seul inconvénient de ma solution, c'est que j'insère un <table> pouvant apparaître comme facultatif, et limite la séparation fond/forme. On peut également noter une faute de sémantique. Soit. Mais je préfère ici faire un tout petit écart, sans conséquence autre qu'intellectuelle, au bénéfice d'un pragmatisme aux conséquences plus bénéfiques.

Parce que tout d'abord, mon tableau d'une seule cellule s'adapte à la taille des écrans de la même manière que le ferait un bloc <div>, car ses propriétés sont écrites dans le fichier CSS et non dans le code de la page. Aucune information de mise en forme n'intervient vraiment dans le code html.

Un tableau d'une cellule est finalement équivalent à un bloc, et il n'agit que très peu sur la forme. Je peux très bien, via les CSS, le placer ailleurs dans la page.

Et pour revenir au cas précis du min-height, cette solution est plus robuste, et de mon point de vue, plus propre que l'emploi de hack, ou l'emploi de <div> imbriqués, comme j'ai pu le voir proposé sur certains sites.

D'ailleurs, une solution vue consiste précisément à utiliser un display:table-cell, mais c'était lourd et cette propriété CSS n'est pas comprise par tous les navigateurs. Autant donc insérer directement un tableau dans le code html.

Je précise que je n'utilise habituellement jamais de tableaux, sauf pour formater des données tabulaires, précisément. Je ne dis pas, ici, qu'il faut utiliser des tableaux.

Je préfère utiliser les propriétés CSS au fur et à mesure de leur -bonne- implémentation dans les navigateurs, et dans certains cas, utiliser les "anciennes" méthodes, bien plus sûres à mon avis puisque éprouvées depuis longtemps. Surtout lorsque ces anciennes méthodes ne produisent aucun obstacle à l'accessibilité d'un site.

Alors, à ajouter dans la FAQ ou pas ?
Modifié par Francois-Pierre (04 Jun 2006 - 23:40)
Francois-Pierre a écrit :
Alors, à ajouter dans la FAQ ou pas ?

Je n'ai aucune autorité là-dessus, mais je n'y verrais pas d'objection.

Ce n'est pas une solution que j'ai utilisée moi-même, mais ça me semble tout à fait raisonable. Je ne précise pas pourquoi, tu l'as déjà correctement argumentée.
J'attendrais peut-être juste une confirmation de ceux qui s'y connaissent mieux que moi en accessibilité. Le tableau à une cellule ne sera pas bloquant, mais peut-il s'avérer perturbant ?
Salut,

Ca me paraît tout à fait inutile. Si l'on ne souhaite pas utiliser de hack, il est toujours possible de recourir au commentaire conditionnel, qui est d'autant plus sûr que min/max height/width fonctionnent sur IE 7 bêta 2 et que par conséquent on est déjà fixés sur les versions à viser.

Même sans commentaire conditionnel, je préfèrerais largement recourir à un hack, quitte à le "doubler" par mesure de sécurité.
Alan, je pense qu'il s'agit ici d'une simple question de point de vue, sur la préférence d'employer ou non des hacks ou des balises éprouvées depuis l'origine du HTML. Je pourrais retourner ta phrase, en disant qu'il est inutile de recourir à des hacks quand des solutions HTML/CSS existent.

De plus, et dans ce cas précis, les soucis n'interviennent pas que pour IE, mais aussi sur Safari.

mpop, à priori, j'imagine que cela ne pose pas de problème. N'oublions pas que des sites avec emploi massif de tableaux peuvent rester tout à fait accessibles, cf un post sur Alsa que je ne retrouve plus Smiley decu , et qui montrait que des sites d'associations pour malvoyants utilisaient des tableaux pour la mise en page !

Dans mon cas, j'ai pu m'offrir le luxe de renseigner l'argument summary de mon mini-tableau, utilisé par les navigateurs textuels, brailles ou vocaux.

Je ne savais pas comment vous réagiriez par rapport à ma pseudo solution, et je suis contents que vous la considériez comme une véritable alternative, et non comme un pêché dû à l'emploi d'un tableau. Voilà qui fera taire ceux qui prétendent que nous sommes tous des intégristes du W3C ! Smiley cligne

En tout cas, merci pour vos réponses et l'intérêt que vous portez à mon post.
Modifié par Francois-Pierre (05 Jun 2006 - 09:00)
Salut,

La css d'une page est adaptée au media de sortie. On ne code pas de la même façon la css screen, hand ou print, par "pudeur ou politiquemement correct" sans doute, on n'a pas créé un media IE. Mais je pense que cela aurait été une bonne approche, tant les différences d'interprétation des standards sont profondes.

Vu comme ça, une css dans des commentaires conditionnels n'est pas une aberration sachant que c'est Microsoft qui les a créés pour lui.
Modifié par papyjo (05 Jun 2006 - 09:13)
papyjo a écrit :
Vu comme ça, une css dans des commentaires conditionnels n'est pas une aberration sachant que c'est Microsoft qui les a créés pour lui.


Salut Papyjo. Le problème est le même sous Safari. Même en oubliant IE, il faut créer un hack ou tout au moins "gruger" pour une compatibilité parfaite Mozilla/opera/Safari/netscape...

Une solution :

ultra-fluide

Mais d'un point de vue sémantique un <table><tr><td>Contenu</td></tr></table> me semble pas pire que l'imbrication de <div> proposée, et ces CSS associées.

Arriver à tout prix à se passer d'une table constitue t-il un exploit à part entière ? Pour ma part, absolument pas. On a une multitude de solutions, et la plus fiable et la plus pérenne doit s'imposer (c'est mon avis en tout cas).

Avec mon tableau, et en 5 secondes, j'obtiens l'effet recherché en toute fiabilité et conformité Smiley cligne
Francois-Pierre a écrit :
Alan, je pense qu'il s'agit ici d'une simple question de point de vue, sur la préférence d'employer ou non des hacks ou des balises éprouvées depuis l'origine du HTML. Je pourrais retourner ta phrase, en disant qu'il est inutile de recourir à des hacks quand des solutions HTML/CSS existent.

Non pas vraiment, puisque dans un cas il s'agirait d'utiliser le balisage et la propriété appropriés, en y joignant une astuce enfantine pour IE 6 et inférieurs par commentaire conditionnel (parfaitement fiable), et dans l'autre cas cela revient à utiliser trois balises totalement inappropriées (<table><tr><td>) pour obtenir le même effet de présentation.

Le bénéfice de ce nivellement par le bas (l'utilisation d'un "tablô" à une cellule) serait alors d'obtenir cet effet également sur Safari.
Sans utiliser moi-même Safari, il me semble que min-height/width est implémenté depuis la version 1.3 (la version 2.02 si les éléments sont positionnés je crois).
Donc, très franchement, si les utilisateurs de Safari 1.2 (cf. Edit ci dessous) ne voient pas cet effet de min-height, ça ne me semble pas très grave. Ca ne devrait causer aucun problème d'accessibilité et cela ferait juste un moins niveau esthétique dans le cas ou l'élément en question aurait peu de contenu. (sauf peut être dans des cas particuliers.)


EDIT :
Je viens de tester min-height avec Safari 1.2 (via browser cam) et ça semble bien marcher, sauf dans le cas où l'élément est positionné (ce qui fonctionne à partir de la version 2) et peut être dans d'autres cas que je n'ai pas essayés
Modifié par Alan (05 Jun 2006 - 21:50)
Plutôt d'accord avec Alan pour dire que le recours aux commentaires conditionnels est plus approprié.

Reste que la solution proposée par François-Pierre ne me choque pas. Il me semble que parler de « nivellement par le bas » à propos de l'utilisation – certes absusive – d'un tableau à une cellule, quand cette utilisaton est raisonnée, est un peu excessif.