【问题标题】:How to prevent showing image alt text if image is loaded using css如果使用 css 加载图像,如何防止显示图像替代文本
【发布时间】:2017-09-06 15:27:10
【问题描述】:

我正在通过 css background 属性加载图像,而不是使用 src 属性。但在这种情况下,alt 文本也会出现。如何停止显示 alt 文本并仅在未加载图像时显示它

.test {
  display: block;
  width: 200px;
  height: 82px;
  background-size: 200px 82px;
  background-image: url("https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQJr81CRJeZGFiBsA9_AOyyxegiIPctdcbNfHThnpnclmFH-mJwoQ");
}
<img class="test" alt="My background image">

【问题讨论】:

  • 尝试使用除 img 标签之外的 div 标签来避免显示 alt 文本。如果图像失败,最好使用 img 标签...
  • @brk 你能在你的问题中标记 jquery 吗?
  • @brk,图片是否加载,可以通过图片naturalHeightnaturalWeight查看。但如果您的 url 无效,那么它还会返回一个带有 1px 点 (1x1) 的图像 [仅适用于您的图像托管 url]。所以你应该检查图像naturalHeight是否大于1以正确加载图像。然后你可以删除alt属性值。请参阅 jsfiddle。 jsfiddle.net/ataur63/4w5aywzc
  • naturalWeight 应该是 naturalWidth。我的错字。 :)

标签: javascript html css


【解决方案1】:

首先我需要知道,将背景图片设置为<img>标签有什么目的吗? 如果是,则在此处使用<img> 标签用户<div> 或任何其他标签而不是使用<img> 是没有意义的。 根据 W3C 标准标记应包含 alt="some text",如果未找到 <img> 源。

【讨论】:

  • 我不知道为什么投了反对票。我的评论符合 W3C 标准。如果您不知道,请阅读如何使用 HTML 标签,然后编写代码。在此之前使用非标准编码是无用的,并且会降低您的代码标准。
  • 我是投反对票的人。我对您的评论投了反对票,因为这是评论而不是答案。无论您评论内容的有效性如何,这都不是答案。请看How to Answer
  • 这个问题没必要回答哈哈。我不喜欢鼓励这种不必要的事情。我们不是来回答这个问题的。我的观点是他必须明白他所做的事情是错误的,他必须了解如何使用 html 标签和属性的目的。首先你应该明白我在投反对票之前所说的话。
  • 所以像你这样的人等待机会投反对票吧。我认为你在投票中获得了更多的声誉,享受你的投票吧。谢谢。
  • @PrakashS 当您投反对票时,您会失去代表点数。答案部分是为解决问题提供有用的信息。该问题的替代解决方案很好。但是您的 "answer" 缺少有关如何以标准符合方式将替代文本添加到背景图像的信息,例如使用div 以及如何仅在未加载该背景图像时显示它。因此,如果 OP 会听从您的建议,那么问题仍然是一样的。如果每个人都在答案部分写下他们的 cmets,那么您将很难在所有这些 cmets 中找到替代解决方案。
【解决方案2】:

如果图像没有src 属性(或为空),您可以做一个小技巧并隐藏图像内的“文本”。

(你可以通过多种方式隐藏文字我选择一种)

.test {
  display: block;
  width: 200px;
  height: 82px;
  background-size: 200px 82px;
  background-image: url("https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQJr81CRJeZGFiBsA9_AOyyxegiIPctdcbNfHThnpnclmFH-mJwoQ");
}

img:not([src]) {
  font-size: 0;
  position: relative;
}

img:not([src]):after {
  font-size: 18px;
  border: 1px solid black;
  box-sizing: border-box;
  content: attr(alt);
  z-index: -1;
  height: 100%;
  width: 100%;
  position: absolute;
  top: 0;
  left: 0
}
<img class="test" alt="My background image">

@Ihazkode 收到的 css(:after 部分)的完成。

为了在图像加载后显示alt,您可以先加载(使用javascript)图像,然后将其放入图像中并显示alt。 (基于this的回答)

$('[data-image]').each(function() {
  var $this = $(this);
  var alt = $this.attr('alt');
  var src = $(this).attr('data-image');
  $this.removeAttr('alt');
  
  $('<img/>').attr('src', src).on('load', function() {
    $(this).remove();
    // simulate the delay for heavy image
    setTimeout(function(){
      $this.css('background', 'url(' + src + ')').attr('alt', alt);
    }, 1000);
  }).on('error', function() {
    $this.attr('alt', alt);
  });
});
.test {
  display: block;
  width: 200px;
  height: 82px;
  background-size: 200px 82px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<img class="test" alt="My background image" data-image="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQJr81CRJeZGFiBsA9_AOyyxegiIPctdcbNfHThnpnclmFH-mJwoQ">

【讨论】:

  • @Mosh Feu 在这种情况下,如果未加载图像,则不会显示替代文本。这是jsfiddle.net/cg6rh4Lu/1
  • @Ihazkode 谢谢,但我认为他想在图像“物理”加载到页面后显示alt
  • @Ihazkode 感谢您的更正。我添加了一个处理它的错误处理程序。我现在了解您的解决方案,这很好! (和工作)
  • @brk 有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 2018-07-14
  • 2011-10-21
  • 1970-01-01
  • 2015-11-14
  • 1970-01-01
  • 2017-12-04
  • 1970-01-01
  • 2015-02-17
相关资源
最近更新 更多