29

I would like to set an image as nothing. By doing src="" many people say it can cause problems to browsers:

http://www.nczonline.net/blog/2009/11/30/empty-image-src-can-destroy-your-site/

so I am not sure if below can face to the same problem as setting src to empty:

<img id="myImage">

since there's no src attribute on this case.

So If I want to initially set an image to nothing, what's the best I can do?

Sunil Garg
  • 14,608
  • 25
  • 132
  • 189
user304602
  • 991
  • 4
  • 21
  • 39
  • because initially there's no image, and when process finished, i put an image depending on the process has passed or failed. – user304602 Oct 01 '13 at 22:45
  • Ok, using a div and setting its background-image seems to be a good idea. But what are the differences between using img or div with background-image in terms of performance? in my case there a some images loading at the same time and they can be animated gifs, so img or div? is div back-ground compatible with animated gifs? – user304602 Oct 01 '13 at 22:54

4 Answers4

41

Best solution

Initialise the image as follows: src="//:0" like here: <img id="myImage" src="//:0">

Edit: as per the comment of Alex below, using //:0 apparently can trigger the onError event of the img. So beware of this.

Edit 2: From comment by Drkawashima: As of Chrome 61 src="//:0" no longer seems to trigger the onError event.


Other solution

Alternatively, you can use a very small image until you actually fill the src tag: like this image. With this 'very small image', you would then initialise the tag like so:

<img src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D" width="0" height="0" alt="" />

source


Remove element from DOM

Alternatively, if you simply don't want the element to appear in the DOM, just use some JavaScript:

var myObject = document.getElementById('myObject');
myObject.parentNode.removeChild(myObject);

(as per this answer, using JavaScript's .remove() function is not recommended, due to poor browser support in DOM 4)

Or just use some jQuery:

$("#myObject").remove();

Community
  • 1
  • 1
Jean-Paul
  • 19,910
  • 9
  • 62
  • 88
24

Using a 1px transparent encoded image is an accepted solution (recommended by CSSTricks)

<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" alt="">

PS: Don't be confused later when DevTools shows these as network requests of zero bytes, that's just how DevTools works, all imgs are listed as network requests.

DS: alt="" is included because otherwise, screenreaders will read the src out loud

Drkawashima
  • 8,837
  • 5
  • 41
  • 52
  • 1
    I upvoted it because it's a transparent image/gif. That is a lot more flexible than the white image supplied on the accepted answer. That's great, thanks! (you could mention it in your answer) – Vitox Feb 05 '21 at 08:46
0

Just use a hash symbol #. It's valid value for src attribute. :) https://stackoverflow.com/a/28077004/3841049

Community
  • 1
  • 1
iGidas
  • 405
  • 1
  • 5
  • 9
0

Use this script to set a default image if src is empty or blank

$(document).ready(function () {
   $('img').each(function () {
       if($(this).attr('src')=="") {
          $(this).attr('src', 'Images/download.jpg');
       }
   });
});
Sunil Garg
  • 14,608
  • 25
  • 132
  • 189
Dot Net
  • 3
  • 2