inline-block: простое свойство для непростых задач
Дата публикации: 12.10.2010
inline-block совмещает в себе возможности блочных элементов (block) и некоторые особенности поведения строчных (inline). Преимущество такого симбиоза мы уже успели оценить в выравнивании навигации, состоящей из блочных элементов. Тут рассмотрим еще несколько примеров, где inline-block приходится очень кстати.
Блок внутри текста
Нужно реализовать что-то подобное:

Т.е. нужно элементу, находящемуся в тексте, задать размеры и фон (которые можно задавать только блочным элементам). Для подобных задач и был создан inline-block.
вступление, состоящие из нескольких слов о чем-то<br/> какой-то текст <span class="button">текст в кнопке</span> далее снова какой-то текст<br/> а тут текст на другой строке
.button {
display: inline-block;
background: url(path-tp/button-back.png);
width: 139px;
height: 22px;
cursor: pointer;
vertical-align: middle;
padding-top: 5px;
}
Центрируем блок с заранее неизвестной шириной
Детально проблемы этой задачи были рассмотрены в статье «Центрирование резинового блока по горизонтали»
.parent {
text-align: center;
}
.mainMenu {
display: inline-block; /*блок строчный, а значит будет центрироваться*/
// display: inline; /* для IE6-7, которым неведом inline-block */
}
Ровные строки списка, при разных высотах элементов списка (li)

Подобная разметка легко делается с помощью float, когда размеры (хотя бы высота) жестко прописана. Если же высоты нет, для такой разметки удобно применять таблицу: ячейки сами подстраиваются под содержимое, строки таблицы остаются ровными. Но таблица в данном случае не уместна с точки зрения семантики, а проэмулировать ее поведение с помощью CSS (display: table/table-cell/table-row) достаточно проблематично.
Но такую эмуляцию позволяет сделать inline-block:
<ul class="catalog"> <li> <img src="path-to/pic1.jpg" alt="" width="105" height="105" /> картинка номер 1 </li> <li> <img src="path-to/img2.jpg" alt="" width="105" height="105" /> картинка номер 2 </li> ... </ul>
Этот код легок, прост для реализации программной логики и семантичен.
.catalog {
width: 400px;
}
.catalog li {
display: inline-block;
width: 150px;
margin: 0 10px 15px 0;
vertical-align: top;
text-align: left;
// display: inline; /* для IE6-7 */
}
.catalog img {
display: block;
margin-bottom: 5px;
}
Более того, используя inline-block в связке с некоторыми inline-правилами(например line-height), можно успешно использовать такие радости, как, например, vertical-align, которые присущи только текстовым и табличным элементам.
Демо пример. Проверено в:
Заметка
Как обычно, в боевых условиях вместо хаков используем условные комментарии или условные CSS.
Подобным образом же можно реализовать и галерею, где заранее не оговорены размеры изображений.
Было так же желание сделать вертикальное выравнивание с помощью inline-block, чтобы хотя бы избавится от expression для IE. Но для IE фокус не удался, для других браузеров вполне рабочий и более удобный вариант:
<li> <img src="path-to/pic1.jpg" alt="" width="105" height="105" /> </li>
li {
height: 84px; // высота блока
line-height: 84px; // нужен, чтобы заработало vertical-align
display: inline-block;
vertical-align: middle;
text-align: center;
}
Может еще получится решить эту задачу для IE.
