CSS position absolute

Потому что у него ширина становится 0, т.к. он является inline-элементом (по умолчанию).
Если указать absolute, то он становится inline-block-элементом. Браузеры это делают как раз для того, чтобы проще было вычислять размеры.

0