Szybka naprawa:
Aby usunąć odstęp pod obrazem , możesz:
- Ustaw właściwość wyrównania w pionie obrazu na
vertical-align: bottom;
vertical-align: top;
lubvertical-align: middle;
- Ustaw właściwość wyświetlania obrazu na
display:block;
Zobacz poniższy kod do prezentacji na żywo:
#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>
Wyjaśnienie: dlaczego pod obrazem jest przerwa?
Luka lub dodatkowe miejsce pod obrazem nie jest błędem ani problemem, jest to zachowanie domyślne. Główną przyczyną jest to, że obrazy są zastąpionymi elementami ( patrz Elementy zastąpione MDN ). To pozwala im „zachowywać się jak obraz” i mieć własne wewnętrzne wymiary, proporcje…
Przeglądarki obliczają swoje właściwości wyświetlania, inline
ale dają im specjalne zachowanie, które zbliża ich doinline-block
elementów (ponieważ można je wyrównać w pionie, dać im wysokość, górny / dolny margines i wypełnienie, przekształca ...).
Oznacza to również, że:
<img>
nie ma linii bazowej, więc gdy obrazy są używane w kontekście formatowania wbudowanego z wyrównaniem pionowym: linia bazowa, dolna część obrazu zostanie umieszczona na linii bazowej tekstu.
( źródło: MDN , moje podkreślenie )
Ponieważ przeglądarki domyślnie obliczają właściwość wyrównania pionowego do linii bazowej, jest to zachowanie domyślne. Poniższy obraz pokazuje położenie linii bazowej na tekście:
( Źródło obrazu )
Wyrównane elementy linii bazowej muszą zachować przestrzeń dla zejść, które rozciągają się poniżej linii bazowej (jak j, p, g ...
), jak widać na powyższym obrazku. W tej konfiguracji spód obrazu jest wyrównany do linii podstawowej, jak widać w tym przykładzie:
div{border:1px solid red;font-size:30px;}
img{width:100px;height:auto;}
<div>
<img src="http://i.imgur.com/RECDV24.jpg" />jpq are letters with descender
</div>
Właśnie dlatego domyślne zachowanie <img>
znacznika tworzy lukę na dnie kontenera i dlatego zmiana właściwości wyrównania w pionie lub właściwości wyświetlania usuwa ją jak w poniższej wersji demonstracyjnej:
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>