Ответ 1
Корень проблемы заключается в том, что элементы таблицы и таблицы-строки заданы высотой, но высота таблицы больше высоты таблицы. Поскольку других строк нет, это приведет к поведению undefined. Из spec:
CSS 2.1 не определяет, как распределяется лишнее пространство, когда свойство "высота" приводит к тому, что таблица будет выше, чем в противном случае.
Следующее - это то, что, по-видимому, происходит, по крайней мере, исходя из моих собственных наблюдений:
-
Если я не ошибаюсь, каждый браузер, похоже, игнорирует абзац в спецификации, который указывает, как вычислять высоту элемента таблицы-таблицы и вместо этого принимать высоту таблицы.
-
Когда вы полностью позиционируете таблицу-таблицу, ее вычисленная высота изменяется на указанный
75px
, потому что абсолютное позиционирование превращает его в блок-блок, и поэтому его размеры рассчитываются соответствующим образом. -
Когда вы возвращаете элемент в его статическое положение, он возвращается к таблице-строке (как следует), но Chrome/Safari по какой-то причине сохраняет
75px
, когда вы сделали его блоком в то время как другие браузеры пересчитывают высоту в соответствии с таблицей, снова игнорируя ее указанную высоту.
Как это технически undefined поведение, можно ли сказать, что любой из браузеров имеет ошибочное или неправильное поведение. Тем не менее, я собираюсь выйти на конечность и сказать, что это может быть связано с тенденцией Chrome, чтобы плохо испортиться при переплаве и рецензировании, так как вы ожидаете, что браузер вернет все свойства и правильно перекрасит макет, когда вы отмените одно изменение свойства - то, что Chrome, как известно, плохо.
В качестве альтернативы, как упоминалось в комментариях, это может иметь какое-то отношение к анонимным табличным объектам. Спецификация не говорит, что пустая таблица должна иметь анонимную строку и ячейку, но похоже, что Chrome может создавать один, чтобы заменить таблицу, когда вы ее сначала позиционируете, но забываете удалить ее после того, как вы вернете ее обратно.
Например, если вы добавите какой-то голый текст в качестве дочернего элемента вашей таблицы, который браузер затем обернет в поле анонимной строки для спецификации:
<div id="div1">
Anonymous row
<div id="div2">
<p>Hello World!</p>
</div>
</div>
Каждый браузер будет сообщать высоту #div2
как 75px
. Предположительно, оставшееся пространство занято анонимной строкой но, к сожалению, я недостаточно знаком с моделью таблицы CSS, чтобы прокомментировать ее.