Ответ 1
CSS 2.1 spec говорит
Размеры области содержимого поля - ширина содержимого и высота содержимого - зависит от нескольких факторов: является ли элемент генерирование поля имеет свойство "ширина" или "высота", независимо от того, поле содержит текст или другие поля, независимо от того, является ли поле таблицей и т.д. Ширина и высота ящиков обсуждаются в главе о визуальных форматирование деталей модели.
Элемент <a>
по умолчанию имеет значение отображения inline
. Его содержимое участвует в макете, поэтому это элемент non-replaced
.
Для высоты, спецификация говорит:
10.6.1 Встроенные, не замененные элементы
Свойство 'height' не применяется. Высота области содержимого должен основываться на шрифте, но в этой спецификации не указывается как.
Итак, 18px
получается из одной строки текста, взятой из метрик шрифта. Ни большее значение не имеет ни размер изображения, ни размер блока.
Для ширины спецификация говорит
10.3.1 Встроенные, не замененные элементы
Свойство 'width' не применяется. Вычисленное значение "auto" для "margin-left" или "margin-right" становится используемым значением "0".
Другими словами, ширина определяется содержимым элементов <a>
, paddings, границ и полей.
Для первого элемента <a>
, что 114px (содержимое - изображение плюс одно пространство) + 20px (левое поле) + 2x5px (левая и правая граница) = 144px
Для второго элемента <a>
, что 280px (содержимое - изображение) + 20px (левое поле) + 2x5px (левая и правая граница) = 310px
Просто нужно учитывать пробелы. Элементы выкладываются в строке строки в встроенном контексте, поэтому отбрасываются пробелы в начале первого элемента <a>
и в конце второго элемента <a>
. Пространства в конце первого элемента <a>
и начало второго элемента <a>
сбрасываются в одно пространство. Когда пробелы сбрасываются, всегда остается первое пространство, которое в этом случае является единицей в конце первого элемента <a>
, поэтому почему пространство участвует в ширине первого элемента <a>
, но не в ширина второго.