Изображение внутри div имеет дополнительное пространство под изображением - PullRequest
436 голосов
/ 27 апреля 2011

Почему в следующем коде высота div больше, чем высота img? Под изображением есть пробел, но он не является отступом / полем.

Что такое зазор или дополнительный пробел под изображением?

#wrapper {
  border: 1px solid red;
  width:200px;
}
img {
  width:200px;
}
<div id="wrapper">
  <img src="http://i.imgur.com/RECDV24.jpg" />
</div>

Image with a gap or white space under it

Ответы [ 9 ]

511 голосов
/ 27 апреля 2011

По умолчанию изображение отображается встроенным, как буква.

Оно расположено на той же строке, что и a, b, c и d.

Там есть место под этимлиния для спусков, которые вы найдете на таких буквах, как f, j, p и q.

Вы можете настроить vertical-align изображения, чтобы расположить его в другом месте (например, middle)или измените display, чтобы он не был встроенным.

126 голосов
/ 26 августа 2011

Другой вариант здесь устанавливает стиль изображения как style="display: block;"

85 голосов
/ 22 января 2016

Быстрое исправление:

Чтобы удалить пробел под изображением , вы можете:

  • Установить свойство вертикальное выравнивание изображения vertical-align: bottom; vertical-align: top; или vertical-align: middle;
  • Установите для свойства отображения изображения значение display:block;

См. следующий код для демонстрации в реальном времени:

#vAlign img {
  vertical-align :bottom;
}
#block img{
  display:block;
}

div {border: 1px solid red;width:100px;}
img {width:100px;}
<p>No fix:</p>
<div><img src="http://i.imgur.com/RECDV24.jpg" /></div>

<p>With vertical-align:bottom; on image:</p>
<div id="vAlign"><img src="http://i.imgur.com/RECDV24.jpg" /></div>

<p>With display:block; on image:</p>
<div id="block"><img src="http://i.imgur.com/RECDV24.jpg" /></div>

Объяснение: почему под изображением имеется пробел?

Пробел или дополнительное пространство под изображением неошибка или проблема, это поведение по умолчанию.Основная причина заключается в том, что изображения заменяются элементами ( см. MDN и W3C ).Это позволяет им «вести себя как изображение» и иметь свои собственные внутренние размеры, соотношение сторон ...
Браузеры вычисляют свои свойства отображения до inline, но они придают им особое поведение, которое делает их ближе к inline-block элементам(поскольку вы можете выровнять их по вертикали, задайте им высоту, верхнее / нижнее поле и отступы, преобразуйте ...).

Это также означает, что:

[...] когда изображения используются в контексте встроенного форматирования с вертикальным выравниванием: базовая линия, нижняя часть изображения будет размещена на базовой линии контейнера .( источник: MDN , выделение мое )

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

Location of the baseline on text

Элементам, выровненным по базовой линии, необходимо оставить место для спусковых механизмов , которые простираются ниже базовой линии (например,j, p, g ...), как вы можете видеть на изображении выше.В этой конфигурации нижняя часть изображения выровнена по базовой линии , как вы можете видеть в этом примере:

div{border:1px solid red;}
img{width:100px;height:auto;}
<div>
  <img src="http://i.imgur.com/RECDV24.jpg" />jpq are letters with descender
</div>

Вот почему поведение тега <img> по умолчанию создает пробел в нижней части его контейнера и почему изменяется свойство вертикального выравниванияили свойство display удаляет его, как в следующей демонстрации:

div {width: 100px;border: 1px solid red;}
img {width: 100px;height: auto;}

.block img{
  display:block;
}
.bottom img{
  vertical-align:bottom;
}
<p>Default:</p>
<div>
  <img src="http://i.imgur.com/RECDV24.jpg" />
</div>
<p>With display:block;</p>
<div class="block">
  <img src="http://i.imgur.com/RECDV24.jpg" />
</div>
<p>With vertical-align:bottom;</p>
<div class="bottom">
  <img src="http://i.imgur.com/RECDV24.jpg" />
</div>
36 голосов
/ 20 декабря 2012

Можно также обнулить высоту строки родителя:

#wrapper {
  line-height: 0;
}

Все исправления: http://jsfiddle.net/FaPFv/

9 голосов
/ 03 ноября 2016

Все, что вам нужно сделать, это назначить это свойство:

img {
    display: block;
}

Изображения по умолчанию имеют это свойство:

img {
    display: inline;
}
6 голосов
/ 04 января 2017

Вы можете использовать несколько методов для этой проблемы, как

  1. Использование line-height

    #wrapper {  line-height: 0px;  }
    
  2. Использование display: flex

    #wrapper {  display: flex;         }
    #wrapper {  display: inline-flex;  }
    
  3. Использование display: block, table, flex и inherit

    #wrapper img {  display: block;    }
    #wrapper img {  display: table;    }
    #wrapper img {  display: flex;     }
    #wrapper img {  display: inherit;  }
    
3 голосов
/ 18 ноября 2014

Я нашел, что это прекрасно работает с помощью display: block; на изображении и выравнивание по вертикали: сверху; по тексту.

.imagebox {
    width:200px;
    float:left;
    height:88px;
    position:relative;
    background-color: #999;
}
.container {
    width:600px;
    height:176px;
    background-color: #666;
    position:relative;
    overflow:hidden;
}
.text {
    color: #000;
    font-size: 11px;
    font-family: robotomeduim, sans-serif;
    vertical-align:top;
    
}

.imagebox img{ display:block;}
<div class="container">
    <div class="imagebox">
        <img src="http://machdiamonds.com/n69xvs.jpg" /> <span class="text">Image title</span>
    </div>
    <div class="imagebox">
        <img src="http://machdiamonds.com/n69xvs.jpg" /> <span class="text">Image title</span>
    </div>
    <div class="imagebox">
        <img src="http://machdiamonds.com/n69xvs.jpg" /> <span class="text">Image title</span>
    </div>
    <div class="imagebox">
        <img src="http://machdiamonds.com/n69xvs.jpg" /> <span class="text">Image title</span>
    </div>
    <div class="imagebox">
        <img src="http://machdiamonds.com/n69xvs.jpg" /> <span class="text">Image title</span>
    </div>
    <div class="imagebox">
        <img src="http://machdiamonds.com/n69xvs.jpg" /> <span class="text">Image title</span>
    </div>
</div>

или вы можете отредактировать код a JS FIDDLE

3 голосов
/ 24 апреля 2014

Я использовал line-height:0, и он прекрасно работает для меня.

0 голосов
/ 04 декабря 2013

Я только добавил float:left в div, и это сработало

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...