При добавлении box-shadow
к <tr>
Firefox и Chrome отображают его по всей строке, а Edge непосредственно применяет его к каждому <td>
, который в итоге выглядит как сетка, а не как непрерывная строка.
Вот демонстрация поведения:
table tr {
box-shadow: 0 0 0 1px red inset;
}
<table>
<tr>
<td>hello</td>
<td>world</td>
</tr>
</table>
А вот и скриншоты:
- Как это выглядит в Firefox
- Как это выглядит в Chrome
- Как это выглядит в Edge
Похоже, что Edge непосредственно применяет данный стиль к элементам <td>
в <tr>
, как будто я установил следующее:
table td {
box-shadow: 0 0 0 1px red inset;
}
<table>
<tr>
<td>hello</td>
<td>world</td>
</tr>
</table>
Экспериментируя, кажется, что display: block
, кажется, исправляет это и заставляет все браузеры отображать тень (почти) одинаково
table tr {
box-shadow: 0 0 0 1px red inset;
display: block;
}
<table>
<tr>
<td>hello</td>
<td>world</td>
</tr>
</table>
- Как
display: block
выглядит в Firefox
display: block looks in Firefox">
- Как
display: block
выглядит в Chrome
display: block looks in Chrome">
- Как
display: block
выглядит в Edge
display: block looks in Edge">
Edge отображает box-shadow
на <tr>
, а Firefox и Chrome имеют одинаковые пробелы слева и справа.
В соответствии с box-shadow
проектом спецификаций предполагается, что он применим ко всем элементам. Меня интересует, почему Edge делает то, что делает: почему он пропускает <tr>
и применяет CSS непосредственно к <td>
элементам? Это кажется совершенно не интуитивным - другие свойства, такие как border
, не ведут себя таким образом - если вы примените это к родителю, все дети тоже не получат border
.