我有一种情况,我希望HTML img
尚未加载到预先设定的高度。原因是该高度将用于计算,该计算可能在图像完全加载之前触发并且需要保持准确。我尝试了以下方法:
<div>hello<img src='http://example.com/invalid.gif' class="testimage"> there</div>
并加入一些css
.testimage {
height: 200px;
width: 200px;
}
并且至少在Firefox 5中,没有渲染额外的空间(奇怪的是,破碎的图像也没有显示,只是空白)。也就是说,直到我添加display: inline-block
。在至少一些其他浏览器中,inline
的默认显示产生所需的结果。这是预期的吗?如果是这样,为什么?
这里也是一个jsFiddle:http://jsfiddle.net/uYXD4/
答案 0 :(得分:3)
它在这里说图像是内嵌元素 - http://htmlhelp.com/reference/html40/special/img.html
另一方面,请看一下 - Is <img> element block level or inline level?
看起来<img>
元素既有内联又有块。没有严格的规则来定义它,因此浏览器供应商可能会自己决定默认值。因此,最好的办法是将其假设重置为display: inline-block
答案 1 :(得分:2)
其内容超出CSS格式模型范围的元素,例如图像,嵌入文档或小程序。例如,HTML IMG元素的内容通常被其“src”属性指定的图像替换。
对于已替换元素,display: inline-block
为supposed to have the same exact same efffect为display: inline
,这是默认值。
所以这可能是某些浏览器中奇怪行为的可能解释*:
他们只将完全加载的图像视为替换元素,否则将其视为非替换元素。毕竟这是有道理的,标准没有明确禁止这一点。因此,有三种可能的情况:
height
属性工作height
属性has no effect height
属性有效加载的图像总是符合1.,破坏/加载图像可能符合1.或2.(或3.如果你设置display:inline-block显式)
*不确定这是否真的有效。
答案 2 :(得分:0)
为什么不使用
之类的东西<img src="..." width=400 height=200>
我正在做同样的事情而且效果很好。另一种选择是......
$('.myimg').load( function() { /* ops */ } );
虽然我不知道是否等待在所有浏览器中加载图像