Babylon Design

par Samuel Le Morvan

Chez vous aussi, utilisez un Web de qualité

Tutoriels HTML/CSS

Revigorez vos travaux d’intégration en suivant les préconisations des instances mondiales de l’Internet !

Tutoriels HTML/CSS

Simuler des tableaux en CSS

En CSS, il est possible de simuler le rendu visuel d’un tableau. Mais attention, si votre contenu necessite un tableau, faîtes un tableau ! Car utilisés à bon escient, et non pour une mise en page, les tableaux n’ont jamais été proscrit du XHTML.

Donc, je répète pour ceux qui vont crier Va dans le métro Satanas !, que si vous avez des données non tabulaires mais du contenu que vous souhaitez rendre visuellement en tableau, il y a des solutions.

Avec la propriété display

Malheureusement, cette propriété n’est pas interprêtée dans son ensemble par Internet Explorer 6 mais sans problème par d’autres navigateurs modernes.

Via cette propriété, il est possible de redéfinir n’importe quel élément de type block, inline, etc. en un autre type.

Cette propriété peut prendre une foule de valeurs. Celles qui vont nous interesser ici sont : table-caption, table-column, table-column-group, table-header-group, table-footer-group, table-row-group mais particulierement table, table-cell et table-row.

Exemple :

Pour transformer visuellement une liste de définition en tableau, un peu de XHTML puis de CSS :

[html] <div id="madiv"> 	<p> 		<span>Item 1</span> 		<span>Donec dapibus, augue nec tincidunt pretium.</span> 	</p> 	<p> 		<span>Item assez long pour le test</span> 		<span>Définition de l'item.</span> 	</p> 	<p> 		<span>Item 3</span> 		<span>In scelerisque arcu nec mauris. Proin non libero. Vestibulum nec ante. Suspendisse erat. In ac odio. Phasellus sagittis elementum ante. Nulla sit amet sem. Maecenas tincidunt venenatis nisl. Quisque odio ipsum, molestie id, ultricies vel, dictum at, elit. Morbi semper posuere felis. Praesent in odio.</span> 	</p> </div> 
[css] #madiv { 	display:table; } #madiv p { 	display:table-row; } #madiv p span { 	display:table-cell; 	padding:5px; } 

Petite explication : Transformation de la <div> en <table>, des <p> en <tr> et des <span> en <td>.

Autre méthode

Une fois de plus, il faut palier aux manquements d’Internet Explorer 6 car la méthode précédente n’est pas interprêtée sous ce navigateur.

Voici une autre méthode que je qualifierai de plus à l’arrache.

[html] <div id="madiv"> 	<p> 		<span>Item 1</span> 		Donec dapibus, augue nec tincidunt pretium. 	</p> 	<p> 		<span>Item assez long pour le test</span> 		Définition de l'item. 	</p> 	<p> 		<span>Item 3</span> 		In scelerisque arcu nec mauris. Proin non libero. Vestibulum nec ante. Suspendisse erat. In ac odio. Phasellus sagittis elementum ante. Nulla sit amet sem. Maecenas tincidunt venenatis nisl. Quisque odio ipsum, molestie id, ultricies vel, dictum at, elit. Morbi semper posuere felis. Praesent in odio. 	</p> </div> 
[css] #madiv p { 	clear:both; 	margin:0 0 30px 160px; } #madiv p span { 	float:left; 	width:150px; 	margin:0 0 0 -160px; 	text-align:right; } 

Ici, le principe est d’appliquer une marge à gauche aux paragraphes puis de placer en flottement les balises <span> à gauche dans cette marge (pour l’exemple : 160px).

Puis on affecte une taille légèrement inférieure aux <span> pour eviter le chevauchement sur les paragraphes.

Et voilà ! Pour finir, je le répète, si vous avez des données tabulaires, utilisez les tableaux !


Ce que nos lecteurs en disent :

  1. ___seb

    Ne serait-il pas judicieux de spécificier la taille du bloc qui "float" et la marge négative en Em pour que leurs taille s’adapte a celle des caractères ? J’ai pas réfléchi, je demande ça spontanément…

  2. WhyNot

    Pas de solution compaptible IE 6 alors…

    Quel dommage…

  3. Jerome

    Cette idée est très tirée par les cheveux. Pourquoi ne pas utiliser de tableaux pour des données tabulaires, tout simplement ? ça serait bien + logique et respecterai ainsi la syntaxe.

  4. Shemu

    Ark ! Ce qui devait arriver arriva… ;-)
    Cette méthode se pose pour des données non tabulaires, les données n’ayant rien à voir les unes avec les autres.
    Bien sûr, si vous avez des données tabulaires, utilisez les tableaux !

  5. WhyNot

    Je confirme ce que dit Seb.

    Un span qui float à gauche, avec une width déterminée fonctionne… Pour autant qu’on ne mette pas de bordure…

    Exemple ici: http://www.bedebulles.com/series...

    Partie "Informations"

  6. Adysone

    Les span flottant aec une witdh déterminée, c’est très utile pour mettre en page des formulaires, qui ne sont pas (à ma connaissance) des données tabulaires.
    Évidemment, la première "solution" ne fonctionnant pas sous IE est à proscrire.
    Merci Shemu :)

  7. gcyrillus

    arf , encore ce malentendu , un table / div et mise en forme .
    L’un ne remplacera jamais l’autre , d’autant qu’un div ne remplace pas non plus un h1 ou tout autre balise qui a une "valeur" sémantique ….

    IE n’implemente pas le display:table et CIE , pourtant , ses multiples bugs facetieux et comportement "hors normes" donnent tout de même quelques possibilités :

    La mise en forme de simili tableau avec a la clé de l’alignement horizontal pour des elements block existent, aussi pour IE !
    Comment ?
    commentaires conditionnels + display:inline + zoom:1 , nous donnent en partie une alternative trés proche.

    une page test : avec 1 div regroupant des paragraphes positionner en colonne … compatible IE :

    gcyrillus.free.fr/essai/t…

    le display:table , implique aussi une largeur minimale dans firefox , qui elargira au dela de la largeur initialement indiqué , IE fera de même … on peut donc aussi sugéré cette usage pour un min-width compatible IE6 sans js.

    explications : yidille.free.fr/plux/vali…

    GC

  8. jparia

    je vois pas l’interrêt de remplacer les tableaux par du simili-code compliquant la lecteur de celui-ci.
    De plus, pour l’alignement vertical, le style vertical-align existe et display:inline fonctionne parfaitement pour tout les objets du tableau. les valeurs table, table-row, table-cell et compagnie sont là pour alourdir les choses maleureusement.

    je prend l’exemple d’un TR ou l’on applique alternativement un style display: inline / none.
    sous IE, c’est parfait mais sous FF, ça foire alors on vas les remplacer spécialement et encore une fois par les attributs et celon l’objet.

    on se complique la vie…
    Je ne parle même pas du style text-align pour FF. Un giga bug!!!

  9. Rencontre

    De mémoire, un <div> qui contient une image en "float" par exemple est dans l’incapacité de s’adapter à la hauteur de son contenu.

    En mettant une bordure on verra le <div> faire 1px de hauteur et l’image sortir du cadre, j’ai des tas d’exemple que j’ai rencontré même avec des mises en formes peu complexes mais de tailles non fixes (pour un design redimensionnable).

    La cellule d’un tableau n’a pas cette faille…

Les commentaires sont clos.