Почему между моим изображением и блоком, в котором оно находится, есть разрыв?

Когда мой браузер отображает следующий тестовый пример, под изображением появляется пробел. Насколько я понимаю CSS, нижняя часть синего поля должна касаться нижней части красного поля. Но это не так. Почему?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns = "http://www.w3.org/1999/xhtml" xml:lang = "en">
<head><title>foo</title></head>
<body>

 <div style = "border: solid blue 2px; padding: 0px;">

  <img alt='' style = "border: solid red 2px; margin: 0px;"
   src = "http://stackoverflow.com/Content/Img/stackoverflow-logo-250.png" />

 </div>

</body>
</html>
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
10
0
8 641
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Поскольку изображение встроено, оно находится на базовой линии. Пытаться

vertical-align: bottom;

С другой стороны, в IE иногда, если у вас есть пробел вокруг изображения, вы его получаете. Поэтому, если вы удалите все пробелы между тегами div и img, это может решить эту проблему.

Не могли бы вы немного подробнее объяснить свое первое предложение? Почему изображение, расположенное на базовой линии, вызывает разрыв и почему изменение его выравнивания по вертикали решает проблему?

raldi 24.09.2008 23:50

Удалите разрыв строки перед тегом, чтобы он следовал непосредственно за тегом без пробелов между ними.

Не знаю почему, но для Internet Explorer это работает.

display: block

на изображении это тоже исправляет, но, вероятно, ломает его другими способами;)

Может ли кто-нибудь проверить / оспорить, что это ломает другие вещи?

rcreswick 24.09.2008 23:50

Это означает, что изображение будет действовать как блок, поэтому любые элементы, которые должны следовать за ним в строке, появятся в следующей доступной строке.

tim_yates 24.09.2008 23:55

line-height: 0; на родительском DIV исправляет это для меня. Предположительно, это означает, что высота строки по умолчанию не равна 0.

Ответ принят как подходящий

Встроенные элементы выравниваются по вертикали по базовой линии, а не по самому низу содержащего поля. Это связано с тем, что под текстом нужно немного места для подстрочных элементов - хвостов на таких буквах, как строчная «p». Таким образом, есть воображаемая линия на небольшом расстоянии над дном, называемая базовой линией, и встроенные элементы по умолчанию выровнены по ней по вертикали.

Есть два способа решить эту проблему. Вы можете либо указать, что изображение должно быть выровнено по вертикали по нижнему краю, либо вы можете сделать его блочным элементом, и в этом случае оно больше не будет рассматриваться как часть текста.

В дополнение к этому в Internet Explorer есть ошибка синтаксического анализа HTML, которая не игнорирует конечные пробелы после закрывающего элемента, поэтому удаление этого пробела может потребоваться, если у вас возникли проблемы с совместимостью с Internet Explorer.

Это отвечает абсолютно на все, что меня интересовало. Прекрасная работа.

raldi 25.09.2008 00:15

Через 7 лет это сэкономило мне много времени. Спасибо!

Everton Lenger 15.03.2016 18:27

font-size:0; в родительском DIV - еще один хитрый способ исправить это.

Другие вопросы по теме