Ответ 1
Дополнительная высота равна высоте разницы между vertical-align: baseline
и vertical-align: bottom
. "Линия спуска". То, откуда появляются кажущиеся случайными "5 дополнительных пикселей". Если размер шрифта в 10 раз больше, этот разрыв также будет в 10 раз больше.
Кроме того, кажется, что, когда overflow: hidden
не существует, элемент inline-block
имеет базовую линию как ту же базовую линию своей последней строки текста.
Это заставляет меня думать, что overflow: hidden
заставляет базовую линию всего элемента inline-block
находиться в нижней части элемента. Несмотря на то, что там нет текста, родительский элемент inline-block
резервирует пространство для строки descender. В примере, приведенном в вопросе, его нелегко увидеть, поскольку родительский элемент inline-block
имеет height: 100%
. Таким образом, вместо этого лишнее пространство, зарезервированное для линии descender, переполняется из этого родительского div.
Почему это пространство все еще там, хотя там нет текста? Я думаю, что, поскольку inline-block
создает контекст форматирования, который вызывает это пространство. Если бы этот элемент был block
, он создавал бы этот контекст форматирования только после того, как он встретит встроенный элемент или текст.
Это просто теория, но, похоже, это объясняет. Это также объясняет, почему работает @Jonny Synthetic answer: добавление переполнения: скрытое для родителя скрывает дополнительную строку descender.
Благодаря @Hashem Qolami для jsbins, которые дали мне эту теорию.