Подтвердить что ты не робот

CSS: неожиданное вертикальное положение элементов "встроенный блок"

Пожалуйста, рассмотрите следующий код HTML:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
    <title>test</title>
    <style>
        .section {
            display: inline-block;
            border: 1px dashed blue;
        }
        .outer {
            border: 1px dashed red;
            margin: 10px;
        }
    </style>
</head>
<body>
    <div style="height: 500px; width: 200px;" class="section">a
        <div style="height: 100px;" class="outer">1A<br />1B</div>
    </div>
    <div style="height: 500px; width: 200px;" class="section">b
        <div style="height: 200px;" class="outer">2</div>
        <div style="height: 200px;" class="outer">3<br />4<br />5</div>
    </div>
</body>
</html>

Поскольку оба div с классом ".section" имеют одинаковую высоту и являются встроенными блоками, я бы ожидал, что они будут выровнены по вертикали. Однако первый из этих divs сдвинут вниз, так что текст "1B" выравнивается с текстовой строкой "5" из другого раздела. Добавление или удаление строк в div либо прямо влияет на вертикальное положение моего первого раздела.

Я не вижу логики этого, и я не могу найти ответ в официальной документации CSS3. Тем не менее, это, похоже, не ошибка, так как она идентична в Chrome 8, Safari 5, Opera 9.5 и Firefox 4 бета... не пыталась IE, так как это не ссылка в любом случае.

Я ищу рациональное объяснение этого явления. Конечно, существует несколько обходных решений (например, изменение встроенного блока в встроенную таблицу устраняет проблему, или я могу использовать обычные плавающие блоки и т.д.). Однако я пытаюсь понять это поведение.

Надеюсь, кто-то мудрее меня, кто может это объяснить.

Пример в реальном времени здесь.

4b9b3361

Ответ 1

Значение по умолчанию для vertical-align в CSS равно baseline. Это означает, что исходный текст последнего текста в первом разделе ( "1B" ) выровнен с базовым уровнем последнего текста во втором разделе ( "5" ), а также с базовым текстом любого окружающего текста, если вы имели любой.

Если вы добавите явный vertical-align: bottom; к вашему CSS .section, который будет использовать нижнюю часть встроенного блока в качестве руководства по выравниванию, давая желаемый результат.

См. http://www.brunildo.org/test/inline-block.html для демонстрации того, как vertical-align применяется к встроенным блокам