Вам необходимо использовать атрибуты colspan
и rowspan
, а не вложенные таблицы. colspan
сообщает ячейке, чтобы она занимала ширину двух столбцов, а rowspan
сообщает, что она должна занимать высоту двух строк.
Я визуализировал ваши строки заголовка и первые три строки содержимого на основе что я здесь сказал. Остальное содержимое таблицы следует тем же принципам.
table {
border-collapse: collapse;
}
td,
th {
border: 1px solid black;
}
<table>
<thead>
<tr>
<th rowspan="2">Service</th>
<th rowspan="2">Category</th>
<th colspan="11">Percent completed</th>
</tr>
<tr>
<th>10%</th>
<th>20%</th>
<th>30%</th>
<th>40%</th>
<th>50%</th>
<th>60%</th>
<th>70%</th>
<th>80%</th>
<th>90%</th>
<th>100%</th>
<th>Total</th>
</tr>
</thead>
<tbody>
<tr>
<td rowspan="6">Clipping Path</td>
<td>Category 1</td>
<td></td>
<td>3</td>
<td></td>
<td></td>
<td>2</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>1000</td>
<td>1005</td>
</tr>
<tr>
<td>Category 2</td>
<td>2</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>3</td>
<td></td>
<td></td>
<td></td>
<td>1100</td>
<td>1105</td>
</tr>
<tr>
<td>Category 3</td>
<td></td>
<td></td>
<td></td>
<td>5</td>
<td></td>
<td></td>
<td>4</td>
<td></td>
<td></td>
<td>1200</td>
<td>1209</td>
</tr>
</tbody>
</table>
Я добавил CSS для границ, чтобы вы могли видеть края ячеек.
Немного сложно привыкнуть в первую очередь, потому что вы должны игнорировать присутствие ячеек в строках, где они «растут» до того места, где они были объявлены. Таким образом, я применил rowspan="2"
к заголовку «Служба», и эта ячейка «вырастет» в следующую строку вместе с категорией. Таким образом, заголовок 10% отображается ниже процента (поскольку он охватывает только 1 строку), потому что служба и категория занимают место в строке, хотя никогда не объявлены в <tr>
.