Remove white space below image [duplicate]
Asked Answered
S

9

307

In Firefox only my video thumbnails are displaying mysterious 2-3 pixels of white space between the bottom of my image and its border (see below).

I've tried everything I can think of in Firebug with no luck.

Any ideas how can I remove this white space?

Screenshot displaying white space below image

Scourge answered 15/10, 2011 at 0:11 Comment(2)
Here's a short and complete answer to this question: https://mcmap.net/q/101491/-mystery-white-space-underneath-image-tag-duplicateRevisionism
Easiest solution that doesn't not have the drawbacks of "display: block;" is to set the font size of the parent element to 0: <div style=" font-size: 0;"><img ...></div>Tiana
U
615

You're seeing the space for descenders (the bits that hang off the bottom of 'y' and 'p') because img is an inline element by default. This removes the gap:

.youtube-thumb img { display: block; }
Unexacting answered 15/10, 2011 at 0:21 Comment(6)
Works, but not good. I have 4 images in a div and I want them text-align: center which won't work for blocks.Dunnage
Use vertical-align: middle if you need the image to play nicely with other things in the same box. In the rare case that the box contains several tiny images and no text, you might need to set font-size: 0 on the containing box.Atavism
That works, but I used the other answer below from Hasan Gürsoy, since his answer doesn't cause problems with text-align:center and other issues that occur when changing the display property.Thermometry
It removes the gap but also makes it a block element. It's far from an assumption that changing the display type wouldn't have other drastic effects on a layout.Harmonics
@NathanHornby No assumptions are necessary, the layout was in the question (so was the code, originally)Unexacting
oh no, 'block' will take the whole lineAsphyxiate
H
155

You can use code below if you don't want to modify block mode:

img{vertical-align:text-bottom}

Or you can use following as Stuart suggests:

img{vertical-align:bottom}
Housemother answered 6/2, 2013 at 2:54 Comment(9)
text-bottom still leaves another pixel below the image in Chrome. I would suggest vertical-align:bottom.Hellenhellene
The first person to give this solution was Dave Kok, if you don't count my comment on the accepted answer (from a month earlier).Atavism
This should be the accepted answer, as it doesn't change the default display property of the img tag which might need to be 'fixed' in other places later!Fredenburg
Nvm, found why this works: salman-w.blogspot.com/2012/10/…Bremble
Thank you! Although I went with the vertical-align:bottom version instead.Thermometry
When the image is particularly small (shorter than the line-height of the parent block element), vertical-align:bottom will leave a gap above the image. Hopefully it's clear that this is expected: developer.mozilla.org/en-US/docs/Web/CSS/line-height "On block level elements, the line-height CSS property specifies the minimal height of line boxes within the element."Priestess
Nicely done. You actually need to set the image to be inline-block too to make it work in most browsers.Manufacturer
This worked perfectly for me. Way better than display block. Thanks.Hundley
yeah, vertical-align:bottom works betterAsphyxiate
G
32

If you would like to preserve the image as inline you can put vertical-align: top or vertical-align: bottom on it. By default it is aligned on the baseline hence the few pixels beneath it.

Garlinda answered 14/12, 2012 at 9:44 Comment(1)
Nicely done. You actually need to set the image to be inline-block too to make it work in most browsers.Manufacturer
G
32

I've set up a JSFiddle to test several different solutions to this problem. Based on the [vague] criteria of

1) Maximum flexibility

2) No weird behavior

The accepted answer here of

img { display: block; }

which is recommended by a lot of people (such as in this excellent article), actually ranks fourth.

1st, 2nd, and 3rd place are all a toss-up between these three solutions:

1) The solution given by @Dave Kok and @Hasan Gursoy:

img { vertical-align: top; } /* or bottom */

pros:

  • All display values work on both the parent and img.
  • No very strange behavior; any siblings of the img fall where you'd expect them to.
  • Very efficient.

cons:

  • In the [perfectly valid] case of both the parent and img having `display: inline`, the value of this property can determine the position of the img's parent (a bit strange).

2) Setting font-size: 0; on the parent element:

.parent {
    font-size: 0;
    vertical-align: top;
}
.parent > * {
    font-size: 16px;
    vertical-align: top;
}

Since this one [kind of] requires vertical-align: top on the img, this is basically an extension of the 1st solution.

pros:

  • All display values work on both the parent and img.
  • No very strange behavior; any siblings of the img fall where you'd expect them to.
  • Fixes the inline whitespace problem for any siblings of the img.
  • Although this still moves the position of the parent in the case of the parent and img both having `display: inline`, at least you can't see the parent anymore.

cons:

  • Less efficient code.
  • This assumes "correct" markup; if the img has text node siblings, they won't show up.

3) Setting line-height: 0 on the parent element:

.parent {
    line-height: 0;
    vertical-align: top;
}
.parent > * {
    line-height: 1.15;
    vertical-align: top;
}

Similar to the 2nd solution in that, to make it fully flexible, it basically becomes an extension of the 1st.

pros:

  • Behaves like the first two solutions on all display combinations except when the parent and img have `display: inline`.

cons:

  • Less efficient code.
  • In the case of both the parent and img having `display: inline`, we get all sorts of crazy. (Maybe playing with the `line-height` property isn't the best idea...)

So there you have it. I hope this helps some poor soul.

Grecian answered 6/12, 2015 at 4:20 Comment(0)
V
10

I found this question and none of the solutions here worked for me. I found another solution that got rid of the gaps below images in Chrome. I had to add line-height:0; to the img selector in my CSS and the gaps below images went away.

Crazy that this problem persists in browsers in 2013.

Vasti answered 25/6, 2013 at 0:12 Comment(2)
Yep, line-height: 0; is what worked for me too. It's still alive and well in 2015.Whitsunday
This "problem" persists because it's not a bug. It's just how the inline-formatting context works.Septavalent
C
7

Had this prob, found perfect solution elsewhere if you dont want you use block just add

img { vertical-align: top }
Cassation answered 23/4, 2013 at 8:29 Comment(0)
L
6
.youtube-thumb img {display:block;} or .youtube-thumb img {float:left;}
Loutish answered 16/7, 2012 at 15:48 Comment(0)
D
0

Give the height of the div .youtube-thumb the height of the image. That should set the problem in Firefox browser.

.youtube-thumb{ height: 106px }
Deutoplasm answered 15/10, 2011 at 0:16 Comment(0)
L
0

As stated before, the image is treated as text, so the bottom is to accommodate for those pesky: "p,q,y,g,j"; the easiest solution is to assign the img display:block; in your css.

But this does inhibit the standard image behavior of flowing with the text. To keep that behavior and eliminate the space. I recommend wrapping the image with something like this.

<style>
    .imageHolder
    {
        display: inline-block;
    }
    img.noSpace
    {
        display: block;
    }
</style>
<div class="imageHolder"><img src="myimg.png" class="noSpace"/></div>
Lawrenson answered 27/6, 2015 at 4:34 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.