Bonjour à tous !
Il y a une question que je me pose depuis un petit moment, et pour laquelle je n'ai pas encore vraiment trouvé de réponse. Je vous la soumet donc, en ésperant que vous pourrez m'éclairer.
Donc, voilà, je recode mon site en strict et j'ai des tableaux dans mes pages (pour afficher des données tabulaires). D'après les recommandations du W3C, il ne faut pas laisser trainer des attributs tels que width="50%" dans les balises <table> ou <td>. Il faut tout mettre dans une feuille de style.
Pour en revenir à mes tableaux, j'utiliseà chaque fréquement les mêmes styles, mais dans des cellules de taille variable. Exemple : un coup j'ai :
<table class="machin">
<tr><th style="width:50%">Titre 1</th>
<th style="width:50%">Titre 2</th></tr>
<tr><td class="truc"></td><td class="truc2"></td></tr>
</table>

et
<table class="machin">
<tr><th style="width:25%">Titre 1</th>
<th style="width:25%;text-align:center">Titre 2</th>
<th style="width:50%">Titre 3</th></tr>
<tr><td class="truc"></td>
<td class="truc2"></td>
<td class="truc2"></td></tr>
</table>


Sachant que fixer les styles "en ligne", n'est pas très propre, il faut les mettre dans une feuille de style. Mais cela signifie que je dois créer une classe pour chaque largeur de cellule ? Pareil en fonction de l'alignement du texte par exemple ? Ce qui donnerait par exemple :
CSS
<style type=text/css">
.td25 {
width:25%;
}
.td50 {
width:50%;
}
.center {
text-align:center;
}
</style>

HTML
<table class="machin">
<tr><th class="td25">Titre 1</th>
<th class="td25 center">Titre 2</th>
<th class="td50">Titre 3</th></tr>
<tr><td class="truc"></td>
<td class="truc2"></td>
<td class="truc2"></td></tr>
</table>

La question peut paraître un peu bête, mais je n'ai vu ça nulle part, donc je sais pas si je ne passe pas à côté d'une autre solution, et comme j'utilise pas mal de largeurs différentes, je me posais la question.
Par ailleurs, je me pose une autre question, faut il aussi définir la largeur pour chaque td, ou la définir uniquement en tête de colonne (<th>) suffit ?

D'avance merci pour vos éclairages Smiley smile
Modifié par le_fleau (26 Jun 2006 - 00:55)
le_fleau a écrit :
Donc, voilà, je recode mon site en strict et j'ai des tableaux dans mes pages (pour afficher des données tabulaires). D'après les recommandations du W3C, il ne faut pas laisser trainer des attributs tels que width="50%" dans les balises <table> ou <td>. Il faut tout mettre dans une feuille de style.

Pas pour <table>, l'attribut width est encore valable. C'est juste pour les <td> qu'il faut mettre dans les CSS
Merci pour ta réponse, sinon, il faut donc créer une classe pour chaque largeur voulue (cf mon troisième exemple) et suffit-il de la définir pour les éléments th, ou faut il aussi la définir pour tous les éléments td ?

D'avance merci pour vos réponses
Pour la largeur, je crois qu'il n'y a que besoin de les déclarer sur les <th>. On peut aussi regarder du côté de l'élément <col>, je crois qu'il y a aussi moyen d'y définir une largeur pour la colonne correspondante.
Merci Florent ! Effectivement, la balise col permet de définir la largeur de colonnes, je ne la connaissait pas, merci Smiley smile Et en plus, l'attribut width fonctionne avec <col> ! Par contre, est-il possible de définir de la même façon l'alignement horizontal d'une colonne ? j'ai essayé d'ajouter l'attribut align="center", sans succès. Y a t-il une astuce, sachant que toutes les colonnes ne sont pas à centrer ?


D'avance merci Smiley cligne
Modifié par le_fleau (12 Jan 2009 - 13:41)
Je ne trouve nulle part comment centrer le texte sur toute une colonne. Dois je en déduire qu'il faut créer une classe avec text-align:center; et l'appliquer à toutes les cellules de la colonne ?
Modifié par le_fleau (24 Jun 2006 - 23:18)
le_fleau a écrit :
Je ne trouve nulle part comment centrer le texte sur toute une colonne. Dois je en déduire qu'il faut créer une classe avec text-align:center; et l'appliquer à toutes les cellules de la colonne ?

C'est pour ma part la seule solution que je connaisse.
Ça et la batterie de sélecteurs CSS2 qui te permettent de sélectionner :
– le premier enfant de chaque tr (donc la première colonne) ;
– les td qui suivent un td (donc les colonnes à partir de la deuxième) ;
– les td qui suivent un td qui suit un td (donc les colonnes à partir de la troisième) ;
– les td qui suivent un td qui suit un td qui suit un td (donc les colonnes à partir de la quatrième) ;
– etc.

Mais bien sûr c'est du CSS2, donc on peut toujours rêver pour avoir ça dans IE.
Merci beaucoup mpop, donc effectivement, on va faire simple à cause d'IE, je vais créer une classe :
.center {
text-align:center;
} et l'appliquer à toutes les cellules concernées.

Merci pour ta réponse !