Почему, когда я центрирую изображение в элементе div с высотой строки, в верхней части экрана появляется зазор в 3 пикселя?
Посмотрите на эту страницу. Изображения справа должны быть в центре их делений. Но если вы посмотрите внимательно, в верхней части экрана есть небольшая граница размером около 3 пикселей. И если вы отключите overflow: hidden
(через firebug или аналог IE8) он торчит снизу.
HTML это:
<div class="small">
<img src="/images/photos/Bedroom.jpg" alt="Bedroom" />
</div>
<div class="small">
<img src="/images/photos/View.jpg" alt="View" />
</div>
И CSS, это:
div.small
{
width:100px;
height:100px;
line-height:100px;
text-align:center;
overflow:hidden;
margin:5px;
background-color: #C0C0C0;
float:left;
}
div.small img
{
vertical-align: middle;
max-width:100px;
max-height:100px;
display: inline;
}
Что вызывает этот таинственный разрыв? Я проверил поля и отступы, и они, похоже, не являются проблемой.
3 ответа
NB: Я не совсем уверен, что это объяснение верно, но мне кажется разумным.
Во-первых, давайте посмотрим, что спецификация должна сказать о ведущих и полу-ведущих:
Так как значение 'line-height' может отличаться от высоты области содержимого, может быть пространство над и под визуализированными глифами. Разница между высотой содержимого и используемым значением 'line-height' называется ведущей. Половина ведущих называется половина ведущих.
Пользовательские агенты центрируют глифы вертикально во встроенном окне, добавляя половину в верхней и нижней части. Например, если фрагмент текста имеет высоту '12px' и значение 'line-height' равно '14px', следует добавить 2pxs дополнительного пробела: 1px выше и 1px ниже букв. (Это относится и к пустым ящикам, как если бы в пустом ящике была бесконечно узкая буква.)
Все идет нормально. Таким образом, любые линейные блоки в пределах div.small
которые имеют высоту меньше, чем div.small
"s line-height
будет вертикально с div.small
, Теперь давайте посмотрим на vertical-align
собственность, а именно middle
значение:
Совместите вертикальную среднюю точку поля с базовой линией родительского блока плюс половину высоты родителя по оси x.
Обратите внимание, что это не обязательно центр строки! Точная позиция будет меняться в зависимости от выбора шрифта и размера. Вы можете убедиться в этом, увеличивая и уменьшая размер текста: размер зазора изменяется.
Как вы обнаружили, настройка font-size: 0
устраняет разрыв полностью. Поскольку шрифт теперь не имеет высоты, линейный блок получает начальное и половинное начальное значение 50 пикселей, при этом базовая линия центрируется вертикально. Чтобы сделать vertical-align: middle
изображение, браузер устанавливает свою среднюю точку на этой базовой линии плюс высоту x шрифта, которая теперь равна нулю. Это дает вертикально-центрированное изображение.
Оказывается, настройка font-size:0;
на div решает проблему. Тем не менее, это все еще не объясняет разрыв. Кто-нибудь знает, что вызывает разрыв?
Я не могу полностью объяснить, что происходит, но после решения той же проблемы, похоже, что это как-то связано с тем, как я объявлял свойство шрифта в css, например
шрифт:11px/1.35em Verdana, Arial, Helvetica, без засечек;
= плохо для таблиц, по-видимому. - Я удалил это объявление и вместо этого использовал font-size:11px, line-height:px, font-family и т. Д., И это исправило разрыв!