【问题标题】:Image height and width when image not found找不到图像时的图像高度和宽度
【发布时间】:2011-04-29 02:55:51
【问题描述】:

我有以下代码:

<div>
  <img src="../images/curry.jpg" height="242" width="300" 
       alt="Can't find image (http://localhost/images/curry.jpg)">
</div>

我正在尝试精确布局页面,因此即使找不到图像,我也希望 Alt 文本占据给定的高度和宽度。

1) 现在 HTML/CSS 是这样工作的吗?

2) 如果没有,由于我是从 PHP 生成 HTML,我可以做些什么来实现我想要的吗?例如,如果我检查不存在而不是 IMG 标记,生成一个包含我的 Alt 文本的所需大小的 Fieldset,它会起作用吗?

【问题讨论】:

    标签: php html css


    【解决方案1】:

    第一个问题的答案是肯定的。 Alt 属性用于 SEO 目的,其行为与您看到的一样。

    这是可能的,尽管我必须警告你额外的开销, 有一个函数file_exists() 可以检查图像是否存在。

    如果该函数返回 false 而不是回显图像,则回显 “&lt;p&gt;Can't find image (http://localhost/images/curry.jpg)&lt;/p&gt;” 并在包装 div 中添加一个样式属性,说明您想要的宽度和高度

    <div style='height: 242px;width: 300px'>
    

    【讨论】:

    • 不管怎样,您可以轻松地将您的&lt;img&gt; 设置为display:blockdisplay:inline-block,并为其应用宽度和高度。只是默认显示是inline,所以当它回退为不可替换元素时会忽略宽度/高度。
    【解决方案2】:

    如果您使用 PHP 生成页面,您只需固定 div 的宽度/高度。

    至于“Alt Text”,你能显示一个你想要的小屏幕截图吗?我真的不明白你所说的占据给定尺寸是什么意思。

    【讨论】:

    • +1 回复。谢谢。我的意思是我希望替代文本“找不到图像 (localhost/images/curry.jpg)”占据 242 X 300 像素的区域。
    【解决方案3】:

    当浏览器找不到图像时会发生什么取决于浏览器。只需在几个浏览器中查看一下,看看会发生什么:

    http://jsfiddle.net/nhHyC/

    Safari 使用指定的尺寸,但在该空间中显示“损坏的图像”图标。

    Firefox 4 使用 alt 文本但忽略尺寸。

    Opera 和 Chrome 使用指定的尺寸并在该空间中显示 alt 文本。

    我没有费心检查 IE,因为这些机器隐藏在我的测试实验室的壁橱里 :)

    如果您需要特定的行为,那么您必须自己使用包装器 &lt;div&gt;display:inline-block 和所需的尺寸来完成。如果您想覆盖所有浏览器,安排适当的内容会比较棘手。

    alt attribute 适用于无法显示图像的用户代理(例如屏幕阅读器和纯文本设备):

    对于无法显示图像、表单或小程序的用户代理,此属性指定替代文本。

    【讨论】:

    • 对于它的价值,Firefox 的行为还取决于怪癖与标准模式以及其他一些东西......
    • @Boris:我有点惊讶 Firefox 没有表现得更明智; OTOH,我正在使用 jsfiddle.net 进行检查,因此我无法完全控制文档类型。我认为 Opera 和 Chrome 的行为是最明智的,但现实与意义无关。
    • 哦,Firefox 的行为完全明智。在标准模式下,如果无法加载图像,则将其视为带有 alt 文本的 &lt;span&gt;。然后布局仅取决于应用于它的样式;这使页面作者可以完全控制他们想要发生的事情。如果您的&lt;img&gt;display:inline,那么它当然会忽略宽度/高度。如果是display:inline-block,那么它将使用给定的大小。你想要哪一个完全取决于你;两者都有用例。
    • @Boris:对于&lt;img&gt; 的默认display 值,您有官方参考吗?我以为是inline-block 而不是inline,但我以前错了,如果这次我错了,我很乐意得到纠正。
    • w3.org/TR/CSS21/visuren.html#display-propInitial: inline。所以一切的显示都是inline,除非由一些样式表(作者、用户或用户代理)另外设置样式。典型 UA 的默认样式表不会更改 &lt;img&gt; 的显示值。实际上,您可以在任何浏览器中检查这一点,只需创建一个带有&lt;img&gt; 的页面并查看getComputedStyledisplay 返回的内容。
    猜你喜欢
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    • 2012-12-25
    • 1970-01-01
    • 2014-07-12
    • 2016-08-09
    • 2011-04-09
    • 2010-11-18
    相关资源
    最近更新 更多