Да, вертикальные поля рассчитываются принципиально иначе, чем горизонтальные; «Авто» не означает центрирование.
Настройка «vertical-align: middle» на элементах изображения работает, но выравнивает их только относительно строки , в которой они находятся в данный момент. Чтобы сделать линейный бокс такой же высоты, как и число с плавающей запятой, установите «line-height» для контейнера:
<style>
div { float: left; width: 100px; height: 100px; line-height: 100px; }
div img { vertical-align: middle; }
</style>
Вы должны быть в Стандартном режиме , чтобы это работало, потому что в противном случае браузеры отображают изображения самостоятельно в виде блоков вместо встроенных замененных элементов в текстовом поле.
К сожалению, IE (по крайней мере, до 7) все еще сохраняет поведение блока даже при попытке в Стандартном режиме. Для этого есть техническая причина, а именно, что IE - это штаны.
Чтобы убедить IE в том, что вы действительно имеете в виду, что изображения являются частью текстовой строки, вам нужно добавить текст в div - даже нормальный пробел сделает это, но вы также можете попробовать пробел с нулевой шириной. :
<div><img src="http://i.stackoverflow.com/Content/Img/stackoverflow-logo-250.png" width="50" height="60" />​</div>
<div><img src="http://i.stackoverflow.com/Content/Img/stackoverflow-logo-250.png" width="60" height="50" />​</div>
<div><img src="http://i.stackoverflow.com/Content/Img/stackoverflow-logo-250.png" width="75" height="75" />​</div>