Модель таблиці CSS базується на моделі таблиці HTML
http://www.w3.org/TR/CSS21/tables.html
Таблиця розділена на РЯДКИ, і кожен рядок містить одну або кілька комірок. Клітинки є дітьми РЯДКІВ, вони НІКОЛИ не є дітьми колон.
"display: table-column" НЕ забезпечує механізм створення стовпчикових макетів (наприклад, газетні сторінки з декількома колонками, де вміст може переходити з однієї колонки в іншу).
Швидше, "table-column" встановлює ТІЛЬКИ атрибути, які застосовуються до відповідних комірок у рядках таблиці. Наприклад, "Колір фону першої комірки в кожному рядку зелений".
Сама таблиця завжди структурована однаково, як у HTML.
У HTML (зауважте, що "td" є всередині "tr", а НЕ всередині "col"):
<table ..>
<col .. />
<col .. />
<tr ..>
<td ..></td>
<td ..></td>
</tr>
<tr ..>
<td ..></td>
<td ..></td>
</tr>
</table>
Відповідний HTML із використанням властивостей таблиці CSS (Зверніть увагу, що div "стовпця" не містить жодного вмісту - стандарт не дозволяє вміст безпосередньо в стовпцях):
.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>
НЕОБОВ'ЯЗКОВО : як "рядки", так і "стовпці" можна стилізувати, присвоївши декілька класів кожному рядку та комірці наступним чином. Цей підхід надає максимальну гнучкість у визначенні різних наборів комірок або окремих комірок, які слід стилізувати:
//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>
У сучасних гнучких конструкціях, які використовуються <div>
для різних цілей, розумно покласти якийсь клас на кожен div, щоб допомогти звернутися до нього. Тут те, що було <tr>
в HTML, стало class myrow
і <td>
стало class mycell
. Ця умова робить корисними вищезазначені селектори CSS.
ПРИМІТКА ДЛЯ ЕФЕКТИВНОСТІ : розміщення імен класів у кожній комірці та використання вищезазначених багатокласних селекторів є кращою продуктивністю, ніж використання селекторів, що закінчуються на *
, наприклад .row1 *
або навіть .row1 > *
. Причина полягає в тому, що селектори збігаються в останню чергу спочатку , тому, коли шукаються відповідні елементи, .row1 *
спочатку робиться *
, що відповідає всім елементам, а потім перевіряє всіх предків кожного елемента , щоб з’ясувати, чи є у якогось предка class row1
. Це може бути повільним у складному документі на повільному пристрої. .row1 > *
краще, оскільки обстежується лише безпосередній батько. Але набагато краще все ж негайно усунути більшість елементів за допомогою .row1 .cell1
. (.row1 > .cell1
є ще більш жорсткою специфікацією, але це перший крок пошуку, який робить найбільшу різницю, тому, як правило, не варто безладу і зайвого процесу обдумування того, чи завжди це буде безпосередньою дитиною, додавання добірник дітей >
.)
Ключовим моментом для зменшення продуктивності є те, що останній елемент у селекторі повинен бути якомога конкретнішим і ніколи не повинен бути *
.