Таблицы имеют сложный и тонкий механизм, который помогает быстро обновлять все столбцы до одинаковой ширины / высоты по столбцам и строкам.Ну, не так быстро, если быть точным, но все же: оно есть.
Результатом этой функции является то, что элементы таблицы (<thead>
, <tbody>
, <tfoot>
, <tr>
, <td>
, <th>
, <col>
, <colgroup>
и<caption>
) имеют разные реализации в разных браузерах, и вы не можете полагаться на свойства уровня блока, чтобы работать с ними надежно.Например, position:relative
не работает на <tr>
элементах (и есть много других «исключений», подобных этому).
Вместо того, чтобы помнить, что работает, а что нетОпределите, для каких элементов таблицы рекомендуется (и безопаснее) использовать элементы уровня блока внутри ячеек таблицы, чтобы расположить точки:
td {
position: relative;
padding: 1rem;
border: 1px solid #ddd;
}
red-ball {
display: block;
width: 16px;
height: 16px;
position: absolute;
top: -8px;
left: -8px;
border-radius: 8px;
background-color: #900;
}
table {
width: calc(100% - 2rem);
border-collapse:collapse;
margin: 1rem;
}
<table class="damage-chart" >
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td>
<red-ball></red-ball>
</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td>
<red-ball></red-ball>
</td>
</tr>
<tr>
<td></td>
<td></td>
<td>
<red-ball></red-ball>
</td>
<td></td>
<td>
<red-ball></red-ball>
</td>
</tr>
<tr>
<td>
<red-ball></red-ball>
</td>
<td></td>
<td></td>
<td></td>
<td>
<red-ball></red-ball>
</td>
</tr>
</table>