Ответ 1
Как вы подозреваете, начальные значения для всех этих свойств не являются 0
; это auto
. Вы можете найти определения их свойств в разделе 9.3.2 спецификации.
Когда абсолютно позиционированный блок сохраняет все его смещения auto
(т.е. вы не изменяете их), он никуда не денется. Он остается в статическом положении, что в основном означает его обычное место в макете, если оно не было размещено вообще. Раздел 10 содержит все детали (у него даже есть целые абзацы, объясняющие, что означает "статическая позиция" ), но вы хотите сосредоточиться на 10.3.7:
Ограничение, определяющее используемые значения для этих элементов:
'left' + 'margin-left' + 'border-left-width' + 'padding-left' + 'width' + 'padding-right' + 'border-right-width' + 'margin-right' + 'right' = ширина содержащего блока
Если все три слова "слева", "ширина" и "право" являются "авто": сначала установите любые "автоматические" значения для "margin-left" и "margin-right" в 0. Затем, если Свойство 'direction' элемента, устанавливающего блок, содержащий статическую позицию, 'ltr' устанавливает 'left' в статическую позицию и применяет правило номер три ниже; в противном случае установите "право" в статическую позицию и примените правило номер один ниже.
[...]
1. "left" и "width" - "auto" , а "right" не "auto" , тогда ширина сжимается до упора. Затем разрешите для 'left'
И 10.6.4:
Для абсолютно позиционированных элементов используемые значения вертикальных размеров должны удовлетворять этому ограничению:
'top' + 'margin-top' + 'border-top-width' + 'padding-top' + 'height' + 'padding-bottom' + 'border-bottom-width' + 'margin-bottom' + 'bottom' = высота содержащего блока
Если все три из "верхних", "высотных" и "нижних" являются авто, установите "верх" в статическую позицию и примените правило № 3 ниже.
[...]
3. "height" и "bottom" - "auto" , а "top" не "auto" , тогда высота на основе содержимого на 10.6.7, установите "auto" значения для "margin-top" и "margin-bottom" на 0 и решите для "bottom"