Dlaczego w poniższym kodzie wysokość div
jest większa niż wysokość img
? Pod obrazem jest przerwa, ale nie wygląda ona na margines.
Jaka jest przerwa lub dodatkowa przestrzeń pod obrazem?
#wrapper {
border: 1px solid red;
width:200px;
}
img {
width:200px;
}
<div id="wrapper">
<img src="http://i.imgur.com/RECDV24.jpg" />
</div>
Odpowiedzi:
Domyślnie obraz jest renderowany liniowo, podobnie jak litera, więc znajduje się w tej samej linii, na której znajdują się litery a, b, cid.
Poniżej tego wiersza znajduje się spacja dla potomków, które można znaleźć na literach takich jak g, j, p i q.
Możesz:
vertical-align
obraz, aby ustawić go w innym miejscu (np.middle
) lubdisplay
tak, aby nie był wbudowany.Dołączony obraz jest własnością publiczną i pochodzi z Wikimedia Commons
źródło
line-height
. Ustawienieline-height
pożądanego wymiaru przezwyciężyłoby również niepożądane białe znaki.Inną sugerowaną tutaj opcją jest ustawienie stylu obrazu jako
style="display: block;"
źródło
inline-block
jeśli nadal chcesz, aby wyświetlał się w linii, tak jak zwykle to robią obrazy.inline-block
nie działa.Szybka naprawa:
Aby usunąć odstęp pod obrazem , możesz:
vertical-align: bottom;
vertical-align: top;
lubvertical-align: middle;
display:block;
Zobacz poniższy kod do prezentacji na żywo:
Pokaż fragment kodu
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:
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: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:źródło
line-height:0;
ale nie uważam tego za dobre obejście w porównaniu do zmiany właściwości wyrównania w pionie lub właściwości wyświetlaniafont-size:0
: ustawiają rozmiar czcionki na minimalny rozmiar w ustawieniach użytkownika.middle
text-top
sub
super
pozycja na zdjęciu jest niewłaściwa.Można również zerować wysokość linii rodzica:
Wszystkie poprawki: http://jsfiddle.net/FaPFv/
źródło
Wszystko, co musisz zrobić, to przypisać tę właściwość:
Obrazy domyślnie mają tę właściwość:
źródło
Możesz użyć kilku metod dla tego problemu, takich jak
Za pomocą
line-height
Za pomocą
display: flex
Korzystanie z
display:
block
,table
,flex
iinherit
źródło
line-height
włamania, a przynajmniej wyjaśnić, dlaczego jest to najgorsze „rozwiązanie” ze wszystkich: w momencie, gdy ktoś umieszcza tekst obok obrazu (zwłaszcza wstępnie sformatowany wieloliniowy z tagami BR), znajdzie się w gorszej sytuacji niż na początku.Użyłem
line-height:0
i działa dobrze dla mnie.źródło
<BR>
tekstem) obok obrazu, będzie miał źle ustawiony, nakładający się / nadwieszony bałagan.Zauważyłem, że działa świetnie przy użyciu display: block; na obrazie i wyrównaj w pionie: do góry; na tekście.
lub możesz edytować kod JS FIDDLE
źródło
Właśnie dodałem
float:left
do div i zadziałałoźródło
float:left
powodujedisplay:block