Colonnes CSS fluides

Je découvre tout à fait par hasard ce billet de Nicole qui expose une solution très intéressante pour faire des colonnages.

L’astuce consiste à placer la propriété overflow sur le contenu, pour que celui-ci puisse s’adapter en fonction de son contexte : il n’est alors plus besoin de lui préciser une largeur. On peut alors, modifier la largeur de la colonne, en ajouter, en supprimer : le contenu s’adaptera toujours.

Elle utilise d’ailleurs cette technique sur son projet Object-Oriented CSS.

Seules précautions à prendre pour IE 6 :

  • appliquer un hasLayout (via un zoom:1 ou un height:1% au contenu ;
  • ne pas oublier de corriger le « Three Pixel Text Jog » (via un margin-left:-3px ou margin-right:-3px;).

Seuls inconvénients trouvés :

  • l’impossibilité de « faire sortir » un élément en dehors du cadre contenu, celui-ci ayant un overflow ;
  • l’ordre du contenu qui se trouve inversé par rapport à l’affichage lorsqu’on utilise une colonne placée à droite.

Mon petit fichier de tests est ici si vous le souhaitez.


14 commentaires ↓

#1 Karen le 10.29.09 à 15:52

Et la technique de Sandrina alors ? non ? :)

#2 STPo le 10.29.09 à 16:06

Intéressant. Je me demande ce qu’en pense Sandrina ?

#3 Vincent le 10.29.09 à 16:10

Héhé !

Sandrina (Justino) avait en effet une technique similaire à base de display:table et de display:inline-block (pour IE 6). Mais elle présente un inconvénient : le contenu ne fait pas 100 % de la largeur offerte.

Nicole en parle aussi rapidement sur son billet.

#4 Pascal le 10.29.09 à 16:47

Avec l’inversion de l’ordre des colonnes, comment se comporte une navigation au clavier s’il y a des liens dans les colonnes ?

#5 Xavier le 10.29.09 à 18:14

Bonsoir Vincent, Ton article tombe bien car j’avais aperçu ce fonctionnement au hasard d’une erreur CSS. Le seul inconvénient est que si une colonne est plus grande, sont contenu ne débordera pas sous la plus petite. Par ailleurs, la technique dont vous parlez proposée par Sandrina justino ne devrait pas marcher sous IE6. Le display : table n’étant pas pris en compte ou je me trompe ?

#6 Sandrina le 10.30.09 à 10:26

Effectivement, le display:table n’est pas reconnu par IE6, c’est pourquoi j’utilise le display:inline-block qui a pour inconvénient de ne pas prendre la largeur totale disponible. Bref, j’utilise cette technique pour ne pas avoir à fixer systématiquement les tailles des colonnes bien qu’elle ne soit pas parfaite. D’ailleurs, la technique de Nicole me parait plus complète, je pense que je l’utiliserai à l’avenir.

#7 Shemu le 10.30.09 à 13:58

Technique intéressante mais les inconvénients sont, pour moi, vraiment bloquants.

Je note mais je garde ma méthode !

#8 Sandrina le 10.30.09 à 15:05

@Shemu : c’est quoi ta méthode ?

#9 Stéphane Deschamps le 11.04.09 à 14:54

@Shemu : c’est quoi ta méthode ? (bis)

#10 Shemu le 11.04.09 à 15:08

C’est pas « ma » méthode mais c’est celle que j’utilise.

#11 Vincent le 11.04.09 à 15:17

C’est vrai qu’on peut faire comme cela aussi.

D’autres soucis se présentent alors :

  • il faut préciser deux fois dans le code la largeur de la colonne (largeur + marge) ;
  • la colonne de gauche ne doit être plus petite que la colonne de droite.

Ça nous laisse quand même du choix tout ça, c’est bien !

#12 Shemu le 11.04.09 à 15:34

Oui. Une question de préférence !

#13 JulienW le 11.04.09 à 16:43

En cherchant un peu des infos sur hasLayout, je viens de tomber sur ce site, qui parle des différentes manières de démarrer un block formatting context : http://dev.l-c-n.com/IEW/simulations.php

J’ai un peu du mal à comprendre comment tout ça s’articule, mais ça a l’air bien 😉

#14 Olivier G. le 11.04.09 à 16:48

J’avais testé cette technique une fois (il y a trois ans peut-être), et j’étais tombé sur un bug absolument rédhibitoire : l’utilisation d’une ancre faisait remonter le contenu en dehors de la zone de visualisation.

Il faudrait que j’essaie de le reproduire…


Laisser un commentaire

Mise en forme : vous pouvez utiliser la syntaxe Markdown. Vous verrez, c’est chouette !