Живая страница здесь.
Учитывая эту HTML-страницу:
section[role=main] {
margin: 1em;
width: 95%;
border: 1px solid #999;
}
section[role=main] article {
width: 40%;
height: 180px;
margin: 1em;
display: inline-block;
border: 1px solid black;
}
<section role="main">
<article>Java</article>
<article></article>
</section>
<section role="main">
<article>Java</article>
<article>JavaScript</article>
</section>
Ответ 1
Это является следствием "базового" вертикального выравнивания в CSS. Из спецификация CSS 2.1, раздел 10.8 Расчет высоты линии: свойства "высота строки" и "вертикальное выравнивание"
базовой
Совместите базовую линию с базой исходного поля. Если поле не имеет базовой линии, выровняйте край нижнего края с исходной базой. (мой акцент)
Поскольку выравнивание по умолчанию для встроенных блоков является "базовым", если оно не переопределено, это правило применяется. Когда текст помещается в встроенный блок, этот текст создает базовую линию для встроенного блока, и применяется первое (не облачное) предложение.
Когда в встроенном блоке нет текста, он не имеет базовой линии, поэтому применяется второе (полужирное) предложение.
В JSFiddle здесь: http://jsfiddle.net/WjCb9/1/ Я удалил из вашего примера созданный margin:1em
(по крайней мере, для меня) вводящий в заблуждение иллюзию, и добавил текст baseline
, чтобы показать, где находится базовая строка окна. Базовая линия находится в нижней части слова "базовая линия", поэтому вы можете видеть, что пустой встроенный блок имеет край нижнего края, выровненный с исходной базой, как это требуется в правиле CSS выше.
Ответ 2
Добавление:
vertical-align: bottom;
К вашему второму правилу следует заставить его работать. По-видимому, встроенные блоки без текста визуализируются как встроенные изображения или что-то еще, а выравнивание по вертикали этих элементов неверно, поэтому принудительное выравнивание по ним устраняет проблему.
Источник: элемент встроенного блока без текстового изображения по-разному
Ответ 3
Добавьте выравнивание по вертикали к статье:
section[role=main] article {
...
vertical-align: middle;
}
http://jsbin.com/oqodol/6/edit
Ответ 4
Элементы inline-block
позиционируются text-align
своего родителя.
Если в блоке нет текста, выровнять нечего.
Вы можете решить эту проблему, используя display: block;
и floats, или мое предложение - вставить неразрывное пространство с нулевой шириной с псевдоэлементами:
section[role=main] article:before {
content: "\2060";
}
Демо