Mengapa dalam kode berikut ketinggian div
lebih besar dari tinggi img
? Ada celah di bawah gambar, tetapi sepertinya itu bukan padding / margin.
Apa celah atau ruang ekstra di bawah gambar?
#wrapper {
border: 1px solid red;
width:200px;
}
img {
width:200px;
}
<div id="wrapper">
<img src="http://i.imgur.com/RECDV24.jpg" />
</div>
Jawaban:
Secara default, gambar dirender sebaris, seperti huruf sehingga berada pada baris yang sama dengan a, b, c dan d.
Ada ruang di bawah garis itu untuk keturunan yang Anda temukan pada huruf seperti g, j, p dan q.
Kamu bisa:
vertical-align
gambar untuk menempatkannya di tempat lain (misalnyamiddle
) ataudisplay
jadi itu tidak sebaris.Gambar yang disertakan adalah domain publik dan bersumber dari Wikimedia Commons
sumber
line-height
. Pengaturanline-height
ke dimensi yang diinginkan juga akan mengatasi spasi yang tidak diinginkan.Opsi lain yang disarankan di sini adalah mengatur gaya gambar sebagai
style="display: block;"
sumber
inline-block
jika Anda masih ingin menampilkan inline seperti gambar biasanya.inline-block
tampaknya tidak berfungsi.Perbaikan cepat:
Untuk menghapus celah di bawah gambar , Anda dapat:
vertical-align: bottom;
vertical-align: top;
atauvertical-align: middle;
display:block;
Lihat kode berikut untuk demo langsung:
Tampilkan cuplikan kode
Penjelasan: mengapa ada celah di bawah gambar?
Kesenjangan atau ruang ekstra di bawah gambar bukanlah bug atau masalah, itu adalah perilaku default. Penyebab utamanya adalah bahwa gambar adalah elemen yang diganti ( lihat elemen yang diganti MDN ). Ini memungkinkan mereka untuk "bertindak seperti gambar" dan memiliki dimensi intrinsik mereka sendiri, rasio aspek ....
Browser menghitung properti tampilan mereka,
inline
tetapi mereka memberi mereka perilaku khusus yang membuatnya lebih dekat keinline-block
elemen (karena Anda dapat meluruskannya secara vertikal, memberikan mereka tinggi, margin atas / bawah dan bantalan, mengubah ...).Ini juga berarti bahwa:
Karena browser secara default menghitung properti penyelarasan vertikal ke baseline, ini adalah perilaku default. Gambar berikut menunjukkan di mana garis dasar berada pada teks:
( Sumber gambar )
Elemen garis dasar perlu menjaga ruang untuk keturunan yang meluas di bawah garis dasar (seperti
j, p, g ...
) seperti yang Anda lihat pada gambar di atas. Dalam konfigurasi ini, bagian bawah gambar sejajar pada garis dasar seperti yang Anda lihat dalam contoh ini:Inilah sebabnya mengapa perilaku default
<img>
tag menciptakan celah di bagian bawah wadahnya dan mengapa mengubah properti perataan vertikal atau properti tampilan menghapusnya seperti dalam demo berikut:sumber
line-height:0;
tetapi saya tidak menganggap ini sebagai solusi yang baik dibandingkan dengan mengubah properti perataan vertikal atau tampilanfont-size:0
: mereka mengatur ukuran font ke ukuran minimum dalam pengaturan pengguna.middle
text-top
sub
super
posisi dalam gambar tidak benar.Satu juga dapat membatalkan tinggi garis orangtua:
Semua perbaikan: http://jsfiddle.net/FaPFv/
sumber
Yang harus Anda lakukan adalah menetapkan properti ini:
Gambar secara default memiliki properti ini:
sumber
Anda dapat menggunakan beberapa metode untuk masalah ini seperti
Menggunakan
line-height
Menggunakan
display: flex
Menggunakan
display:
block
,table
,flex
daninherit
sumber
line-height
hack yang sangat ceroboh , atau setidaknya membuatnya jelas, mengapa ini adalah "solusi" terburuk dari semuanya: saat seseorang meletakkan teks di sebelah gambar (terutama multi-line yang telah diformat sebelumnya dengan tag BR), mereka akan menemukan diri mereka dalam situasi yang lebih buruk daripada yang mereka mulai.Saya menggunakan
line-height:0
dan berfungsi dengan baik untuk saya.sumber
<BR>
) teks di sebelah gambar, mereka akan memiliki kesalahan penempatan, tumpang tindih / overhanging berantakan.Saya menemukan ini bekerja sangat baik menggunakan tampilan: blok; pada gambar dan luruskan vertikal: atas; pada teks.
atau Anda dapat mengedit kode JS FIDDLE
sumber
Saya baru saja menambahkan
float:left
div dan itu berhasilsumber
float:left
penyebabdisplay:block