Ответ 1
Значение по умолчанию vertical-align
- baseline
, которое
Выравнивает базовую линию блока с базовой линией родительского блока
Примечание: Вы можете увидеть это значение по умолчанию в действии, добавив vertical-align:baseline
к вашему селектору .divAccountData
. Поскольку baseline
является значением по умолчанию, выравнивание не изменяется.
Вам нужно изменить его на top
, чтобы выровнять блоки сверху, например:
.divAccountData {
display: inline-block;
background: red;
width: 400px;
height: 40px;
vertical-align: top;
}
Базовая линия определяется как
линия, на которой "сидит" большинство букв и ниже которой идут спуски
Чтобы понять, почему добавление текста, кажется, решает проблему, это потому, что
Базовая линия 'inline-block' является базовой линией его последнего строкового блока в нормальном потоке, если у него нет либо линейных блоков in-flow, либо если его свойство 'overflow' имеет вычисленное значение, отличное от 'visible', в В этом случае базовой линией является нижний край поля.
из CSS2 Детали визуального форматирования модели
Таким образом, добавление только одного символа меняет базовую линию, в результате чего второй блок появляется в том же вертикальном выравнивании. Это только работает, если оба блока содержат одинаковое количество строк. Попробуйте добавить больше слов в один из ваших блоков, и вы увидите, что без принудительного ввода vertical-align:top
во второй блок он будет перемещаться в зависимости от того, сколько строк текста существует в первом блоке.
Изменение: Нашел связанный вопрос Почему этот элемент встроенного блока толкается вниз?