[英]Image Placeholder
我已经使用背景颜色定义了图像标记,这样如果没有图像,颜色应该显示但仍然是破碎的图像图标显示如何删除它?
我不想通过添加jquery或任何框架使页面笨重,我也不能添加任何类型的div到图像,因为该网站几乎完成。
只用javascript找到答案
function ImgError(source){
source.src = "/images/noimage.gif";
source.onerror = "";
return true;
}
<img src="someimage.png" onerror="ImgError(this);"/>
你可以使用以下隐藏:
<img
src="my.png"
onerror="this.style.display='none'"
/>
如果未找到图像,则可以显示另一张图像:
<img src="my.png" onerror="this.src = 'image-not-found.png';" />
1x1空png的解决方案
function ImgError(source){
empty1x1png = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVQI12NgYAAAAAMAASDVlMcAAAAASUVORK5CYII=";
source.src = "data:image/png;base64," + empty1x1png;
source.onerror = "";
return true;
}
<img src="someimage.png" onerror="ImgError(this);"/>
一个简单的解决方案是使用占位符空白图像。 这通常用于精灵,但我认为你也可以使用它。
你做的是,你创建一个启用透明度的1x1 px空白gif图像,将“src”属性指向blank.gif并通过css background-image属性给出图像。 因此,即使未找到背景图像,也不会显示断开的链接图像。
这是某些浏览器的一个功能 - 据我所知,Firefox,Chrome和Safari在Internet Explorer显示损坏的图像图标时没有显示任何内容。 没有使用Javascript,我不相信你可以覆盖这种行为。
浏览器会打破图像图标。 这不是你可以在代码中改变的东西。 我想你会发现不同的浏览器处理丢失的图像的方式不同。
您想要做的事情可能会有不同的处理,但......
样式:
div.image-maybe-missing {
width: 300px;
height: 450px;
background-color: red;
background-image: url("/images/is-it-there.png");
}
HTML:
<div class="image-maybe-missing">
</div>
如果图像不存在,这将为您提供一个带红色背景的空框。 div的宽度和高度需要与图像的宽度和高度相匹配。
尝试使用this.remove()删除损坏的图像占位符:
<div class="cell">
<p>
<img src="pic.png" onerror="this.remove();" />
</p>
</div>
我使用单元格div来保留布局。
这是一个依赖浏览器的行为,但你无法做任何事情。 这里有几个选项:
1)使用JavaScript向图像添加一个onerror处理程序,当它无法通过使用css隐藏设置时隐藏它(你需要有一个包含div来应用背景颜色,因为背景颜色不会显示图像是否为hdden)。
要在不使用jQuery的情况下将错误处理程序应用于站点中的每个图像并且不修改代码,您可以执行此操作(将其放在页面末尾的脚本中 - 如果它位于<head>
,则无法使用不能把它放在window.onload中,否则在图像加载之前不会触发)。
var images = document.getElementsByTagName('img');
for (i = 0; i < images.length; i++) {
images[i].onerror = function() {
this.style.visibility = 'hidden';
}
}
2)在div上将图像设置为css背景图像,而不是使用<img>
标签。 它不是语义,但如果加载失败则不会显示损坏的图像图标,您仍然可以指定背景颜色和标签(不是alt标签)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.