Ответ 1
Использовать свойство vertical-align: bottom; для изображения, то дополнительное пространство снизу будет удалено.
Когда мы используем <img>
внутри <p><img style="float:left">dummy text dummy text dummy text dummy text</p>
, то как мы можем иметь один и тот же край справа и внизу изображения?
http://jitendravyas.com/image-margin.htm
Использовать свойство vertical-align: bottom; для изображения, то дополнительное пространство снизу будет удалено.
Ваше изображение, кажется, превышает значение высоты линии на 5 пикселей. Вот почему вы получаете это лишнее пространство.
Вы можете попробовать отрицательное нижнее поле только на этом изображении, но текст может приблизиться к нему. Требуемое количество отрицательного поля равно лишним пикселям (в случае этого изображения 5px).
Однако вы можете обернуть ваши изображения в DIV контейнера, которые будут иметь точную высоту с высотой линии. А также установите overflow: hidden;
на них. Но я предлагаю вам установить font-size
и line-height
на точки (pt), чтобы контролировать их значения.
Решение должно быть:
<style>
img{
float: left;
margin: 0 20px 20px 0;
background-color: #CCC;
}
p{
clear: left;
margin: 0px;
}
</style>
<p><img height="100" width="100" />dummy text dummy text dummy text dummy text</p>
<p>here some text</p>
Вы можете очистить плавающее, применив "clear: left;" к любому тегу после "p". Тем не менее, я предпочитаю решение ниже (оно также разрешает содержащуюся проблему тега "p" ):
<style>
img{
float: left;
margin: 0 20px 20px 0;
background-color: #CCC;
}
p{
margin: 0px;
}
div.clearer{
clear: left;
}
#container{
width: 300px;
border: 1px solid #CCC;
}
</style>
<div id="container">
<img height="100" width="100" />
<p>dummy text dummy text dummy text dummy text</p>
<div class="clearer"></div>
</div>
<p>here some text</p>
EDIT: Мое предложение одинаково даже в случае вашего примера (однако в этом примере вы можете удалить "clear: left", примененный к тегу "p", t используйте второй метод, который я предложил)! Поведение тегов "p" и "img", в примере, это нормально... Я пытаюсь объяснить:
если вы установите для строки высоту абзаца 20px (с размером шрифта < 20px) и полем (внизу и справа) img (высота которого кратно 20) до 20 пикселей, линия в нижней части img принудительно разделить на правый, если не ниже 40px (20px margin-bottom + 20px line-height) ниже img! Это нормально, потому что недостаточно места для строки высотой 20 пикселей!
Итак, вы можете выбрать или установить маржу на значение меньше 20 пикселей или уменьшить высоту строки!
Хорошо, посмотрев на страницу, это не проблема с маржой, а тот факт, что ваш шрифт не имеет места для включения в следующую строку.
Попробуйте изменить размер шрифта, и вы увидите, что этот запас иногда уменьшается, иногда увеличивается.
Это потому, что это, безусловно, встроенный контент. Если вы хотите сохранить содержимое в строке, но удалите интервал, просто добавьте:
line-height: 0;
from: http://bytes.com/topic/html-css/answers/789019-img-bottom-margin-mystery
Это потому, что imgs отображаются: inline, поэтому они сидят на базовой линии, как текст, и немного ниже их для descenders.
Сделайте отображение img: block.
У меня тоже была эта проблема, и я решил ее, поместив <img>
-tag в <div>
, с свойством line-height
, установленным в 0
.
Вот пример jsfiddle.net.
Обратите внимание, что между изображением и <hr>
под ним нет места.
Это не работает, если вам нужно поместить изображение в середине текста, потому что изображение будет в его собственной строке, с текстом перед ним на предыдущей строке, а текст после него на следующей строке, например здесь.
Может быть:
<style>
p img {
margin: 0px;
}
</style>