Le modèle de table CSS est basé sur le modèle de table HTML
http://www.w3.org/TR/CSS21/tables.html
Un tableau est divisé en RANGÉES et chaque ligne contient une ou plusieurs cellules. Les cellules sont des enfants de ROWS, ce ne sont JAMAIS des enfants de colonnes.
"display: table-column" ne fournit PAS un mécanisme pour créer des mises en page en colonnes (par exemple des pages de journaux avec plusieurs colonnes, où le contenu peut circuler d'une colonne à l'autre).
Au contraire, "table-colonne" définit UNIQUEMENT les attributs qui s'appliquent aux cellules correspondantes dans les lignes d'un tableau. Par exemple, «La couleur d'arrière-plan de la première cellule de chaque ligne est verte» peut être décrite.
Le tableau lui-même est toujours structuré de la même manière qu'il l'est en HTML.
En HTML (notez que les "td" sont dans les "tr", PAS dans les "col"):
<table ..>
<col .. />
<col .. />
<tr ..>
<td ..></td>
<td ..></td>
</tr>
<tr ..>
<td ..></td>
<td ..></td>
</tr>
</table>
HTML correspondant utilisant les propriétés de la table CSS (notez que les divs "colonne" ne contiennent aucun contenu - la norme n'autorise pas le contenu directement dans les colonnes):
.mytable {
display: table;
}
.myrow {
display: table-row;
}
.mycell {
display: table-cell;
}
.column1 {
display: table-column;
background-color: green;
}
.column2 {
display: table-column;
}
<div class="mytable">
<div class="column1"></div>
<div class="column2"></div>
<div class="myrow">
<div class="mycell">contents of first cell in row 1</div>
<div class="mycell">contents of second cell in row 1</div>
</div>
<div class="myrow">
<div class="mycell">contents of first cell in row 2</div>
<div class="mycell">contents of second cell in row 2</div>
</div>
</div>
FACULTATIF : les "lignes" et les "colonnes" peuvent être stylisées en attribuant plusieurs classes à chaque ligne et cellule comme suit. Cette approche donne une flexibilité maximale dans la spécification de divers ensembles de cellules, ou cellules individuelles, à styliser:
//Useful css declarations, depending on what you want to affect, include:
.mycell {
}
.row1 {
}
.row1 .mycell {
}
.row1 .cell1 {
}
.cell1 {
}
.mytable .row1 {
}
.mytable .row1 .mycell {
}
.mytable .row1 .cell1 {
}
.mytable .cell1 {
}
<div class="mytable">
<div class="column1"></div>
<div class="column2"></div>
<div class="myrow row1">
<div class="mycell cell1">contents of first cell in row 1</div>
<div class="mycell cell2">contents of second cell in row 1</div>
</div>
<div class="myrow row2">
<div class="mycell cell1">contents of first cell in row 2</div>
<div class="mycell cell2">contents of second cell in row 2</div>
</div>
</div>
Dans les conceptions flexibles d'aujourd'hui, qui utilisent <div>
à des fins multiples, il est sage de mettre une classe sur chaque div, pour aider à s'y référer. Ici, ce qui était autrefois <tr>
en HTML est devenu class myrow
et <td>
est devenu class mycell
. Cette convention est ce qui rend les sélecteurs CSS ci-dessus utiles.
NOTE DE PERFORMANCE : mettre des noms de classe sur chaque cellule et utiliser les sélecteurs multi-classes ci-dessus est une meilleure performance que d'utiliser des sélecteurs se terminant par *
, tels que .row1 *
ou même .row1 > *
. La raison en est que les sélecteurs sont mis en correspondance en dernier , donc lorsque des éléments correspondants sont recherchés, le .row1 *
premier le fait *
, ce qui correspond à tous les éléments, puis vérifie tous les ancêtres de chaque élément , pour trouver si un ancêtre en a class row1
. Cela peut être lent dans un document complexe sur un périphérique lent. .row1 > *
est mieux, car seul le parent immédiat est examiné. Mais il vaut mieux éliminer immédiatement la plupart des éléments, via .row1 .cell1
. (.row1 > .cell1
est une spécification encore plus stricte, mais c'est la première étape de la recherche qui fait la plus grande différence, donc cela ne vaut généralement pas le désordre, et le processus de réflexion supplémentaire pour savoir si ce sera toujours un enfant direct, d'ajouter le sélecteur enfant >
.)
Le point clé à retenir sur les performances est que le dernier élément d'un sélecteur doit être aussi spécifique que possible et ne doit jamais l'être *
.