--- title: Tableaux slug: conflicting/Web/CSS/border-collapse tags: - CSS translation_of: Web/CSS/border-collapse translation_of_original: Useful_CSS_tips/Tables original_slug: Astuces_CSS/Tableaux ---
Si vous voulez centrer un tableau, il n'est pas correct d'utiliser
text-align: centerdans l'élément parent. La méthode correcte est d'appliquer le style
margin: 0px auto 0px autoà la table elle-même.
| Table avec margin: 0px auto 0px auto; | ||
| Contenu cellule | Contenu cellule | Contenu cellule |
| Contenu cellule | Contenu cellule | Contenu cellule |
| Contenu cellule | Contenu cellule | Contenu cellule |
Voici un tableau standard avec cellspacing non nul et une bordure de cellule de 1px :
Table avec cellspacing="4" |
||
| Contenu cellule | Contenu cellule | Contenu cellule |
| Contenu cellule | Contenu cellule | Contenu cellule |
| Contenu cellule | Contenu cellule | Contenu cellule |
Si vous voulez transformer le tableau en grille, définissez l'espacement de cellule à 0 et le tableau devient comme ceci :
Table avec cellspacing="0" |
||
| Contenu cellule | Contenu cellule | Contenu cellule |
| Contenu cellule | Contenu cellule | Contenu cellule |
| Contenu cellule | Contenu cellule | Contenu cellule |
Le résultat n'est pas celui attendu et la raison en est que le modèle de bordure par défaut est défini comme séparé. Avec ce modèle, chaque cellule à sa propre bordure, même si l'espacement de cellule est 0. Afin d'avoir un rendu comme une grille, le modèle collapse doit être utilisé.
Table avec cellspacing="0"et border-collapse:collapse; |
||
| Contenu cellule | Contenu cellule | Contenu cellule |
| Contenu cellule | Contenu cellule | Contenu cellule |
| Contenu cellule | Contenu cellule | Contenu cellule |
Si vous voulez définir un style particulier à certaines colonnes du tableau, la solution usuelle est de créer une classe de style et d'assigner explicitement toutes les cellules appartenant à ces colonnes à cette classe.
<style type="text/css">
td { background-color: #eeeeee; }
td.CoulNoire { background-color: #cccccc; }
</style>
<table>
<tr><td class="darkcol">Cell</td>
<td>Cell</td><td>Cell</td><td>Cell</td><td class="CoulNoire ">Cellule</td></tr>
<tr><td class="darkcol">Cell</td>
<td>Cell</td><td>Cell</td><td>Cell</td><td class="CoulNoire ">Cellule</td></tr>
<tr><td class="darkcol">Cell</td>
<td>Cell</td><td>Cell</td><td>Cell</td><td class="CoulNoire ">Cellule</td></tr>
<tr><td class="darkcol">Cell</td>
<td>Cell</td><td>Cell</td><td>Cell</td><td class="CoulNoire ">Cellule</td></tr>
<tr><td class="darkcol">Cell</td>
<td>Cell</td><td>Cell</td><td>Cell</td><td class="CoulNoire ">Cellule</td></tr>
</table>
Cette solution a l'avantage d'être compatible multi-navigateur, mais nécessite aussi de modifier le code HTML, pour explicitement sélectionner les cellules du tableau à styler.
Pour les navigateurs supportant les sélecteurs adjacents, il existe une solution alternative en pure CSS
<style type="text/css">
/* Style pour toutes les lignes */
tr { font: bold 16px Arial; }
/* Style pour les lignes avec une ligne avant: 2e, 3e, 4e, ... */
tr + tr { font: 12px Arial; }
/* Style pour toutes les colonnes */
td { background-color: #cccccc; }
/* Style pour les colonnes avec une colonne avant: 2e, 3e, 4e, 5e */
td + td { background-color: #eeeeee; }
/* Style pour les colonnes avec 4 colonnes avant: 5e */
td + td + td + td + td { background-color: #cccccc; }
</style>
<table>
<tr><td>Cell</td><td>Cell</td><td>Cell</td><td>Cell</td><td>Cell</td></tr>
<tr><td>Cell</td><td>Cell</td><td>Cell</td><td>Cell</td><td>Cell</td></tr>
<tr><td>Cell</td><td>Cell</td><td>Cell</td><td>Cell</td><td>Cell</td></tr>
<tr><td>Cell</td><td>Cell</td><td>Cell</td><td>Cell</td><td>Cell</td></tr>
<tr><td>Cell</td><td>Cell</td><td>Cell</td><td>Cell</td><td>Cell</td></tr>
</table>
Si un tableau contient de nombreuses lignes, quand l'utilisateur fait défiler la page vers le bas pour voir toutes les données, l'en-tête défile en haut et devient invisible. Vous pouvez avoir un tableau avec un en-tête fixe et un défilement vertical, en utilisant le code ci-après.
<style type="text/css">
table {
width: 20em; /* esthétique */
border-collapse: separate; /* par défaut */
/* border-collapse: collapse; /* Boggué depuis 2002 avec overflow-y: auto sur tbody */
border-spacing: 0; /* contournement du bug */
}
tbody {
height: 10em; /* définit une hauteur */
overflow-x: hidden; /* esthétique */
overflow-y: auto; /* permet de scroller les cellules */
}
td {
border-left: 1px solid blue; /* contournement du bug */
border-bottom: 1px solid blue; /* contournement du bug */
}
</style>
<table>
<thead><tr><th>Entête</th><th>Entête</th><th>Entête</th></tr></thead>
<tfoot><tr><th>Pied</th><th>Pied</th><th>Pied</th></tr></tfoot>
<tbody>
<tr><td>Cellule</td><td>Cellule</td><td>Cellule</td></tr>
<tr><td>Cellule</td><td>Cellule</td><td>Cellule</td></tr>
<tr><td>Cellule</td><td>Cellule</td><td>Cellule</td></tr>
<tr><td>Cellule</td><td>Cellule</td><td>Cellule</td></tr>
<tr><td>Cellule</td><td>Cellule</td><td>Cellule</td></tr>
<tr><td>Cellule</td><td>Cellule</td><td>Cellule</td></tr>
<tr><td>Cellule</td><td>Cellule</td><td>Cellule</td></tr>
<tr><td>Cellule</td><td>Cellule</td><td>Cellule</td></tr>
<tr><td>Cellule</td><td>Cellule</td><td>Cellule</td></tr>
<tr><td>Cellule</td><td>Cellule</td><td>Cellule</td></tr>
<tr><td>Cellule</td><td>Cellule</td><td>Cellule</td></tr>
<tr><td>Cellule</td><td>Cellule</td><td>Cellule</td></tr>
<tr><td>Cellule</td><td>Cellule</td><td>Cellule</td></tr>
</tbody>
</table>
Actuellement, il y a un problème avec le moteur de rendu de Firefox (voir sur bugzilla {{ Bug(135236) }})), qui ne style pas corectement des tableaux avec le modèle collapse border et TBODY avec le style overflow: auto.
{{ languages( { "en": "en/Useful_CSS_tips/Tables" } ) }}