【问题标题】:CSS image replacement working with images off and transparent images使用关闭图像和透明图像进行 CSS 图像替换
【发布时间】:2017-11-30 15:43:27
【问题描述】:

我正在寻找一种 CSS 图像替换技术(例如 here 描述的图像替换)——你隐藏元素文本内容并改为显示图像——这将适用于透明图像并在图像关闭时显示替换的文本(例如通过 Windows 高对比度模式)。

我知道一些技术适用于具有非透明背景的图像,但当图像具有非透明背景时它们停止工作——元素的文本通过背景可见。

下面的这种技术的一个示例 - 在绝对定位的伪子元素上设置所需的背景,该伪子元素会呈现在元素上。问题:我要隐藏的文本仍然可见。

说明于this pen

HTML

<div>Text which I want to replace by an image</div>

CSS

div {
  position: relative;
  width: 100px;
  height: 100px;
}

div::after {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-image: url("http://icons.iconarchive.com/icons/mazenl77/I-like-buttons-3a/512/Perspective-Button-Go-icon.png");
  background-size: 100% 100%;
  background-repeat: no-repeat;
}

其他技术即使使用透明图像也会隐藏文本,但在禁用图像时不显示文本,这是我需要的。我正在寻找一种两者兼得的产品。

【问题讨论】:

  • 请多使用标点符号。很难阅读/理解。
  • @ProEvilz 现在更清楚了吗?实际上,仅用文字来描述有点难以描述。
  • 你为什么不在你的 :after 上使用背景颜色来隐藏文本?
  • 你可以使用 元素并设置替代文本吗?
  • @DD84 我不想,因为那是装饰图像,不应该出现在内容中,以便使文档更易于访问。

标签: css


【解决方案1】:

将已知的不透明图像放在顶部,其 z-index 低于替换图像,例如 1px x 1px 白色 png。

div {
    position: relative;
    width: 100px;
    height: 100px;
}

div::before,
div::after {
    content: "";
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
}

div::before {
    background-image: url('/images/white-pixel.png');
    z-index: 1;
}

div::after {
    background-image: url("http://icons.iconarchive.com/icons/mazenl77/I-like-buttons-3a/512/Perspective-Button-Go-icon.png");
    background-size: 100% 100%;
    background-repeat: no-repeat;
    z-index: 2;
}

您可以更进一步,实际上对图像进行 base-64 编码并将其直接嵌入到样式表中:

div::before {
    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCA‌​QAAAC1HAwCAAAAC0lEQV‌​R42mP8/x8AAwMCAO+ip1‌​sAAAAASUVORK5CYII=');
    z-index: 1;
}

【讨论】:

  • 这是一个正确的解决方案,只有 Alvaro Menéndez 提供了一个类似但更简单的解决方案,所以我会等待他发布并接受它作为答案。还是谢谢。
  • @Robert 您在问题中提到,您希望在禁用图像时显示文本 - 在实施该解决方案之前,确保在您需要支持的浏览器中同时禁用背景颜色
  • 你是对的 - 他的解决方案不适用于禁用图像。那我接受你的回答。遗憾的是,仅使用 CSS 是不可能的,无需创建任何额外的图像:/.
  • @Robert Well... 你也许可以在这里找到一个中间立场。您可以在 CSS 中做的一件事是 base64 图像并将其用作背景。此规则会将白色 1x1 像素图像设置为背景,但我不知道它在您描述的条件下会如何表现。 background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+ip1sAAAAASUVORK5CYII=);
  • 当然,我很乐意分享:pastebin.com/ecsHRmet。主要的 Sass mixin 是image-replacement,其他只是助手。 mixin 变得相当复杂,但主要是因为我希望它灵活且可重用;整个胆量是inline-svg-solid-color mixin 内部的逻辑。由于 inline-svg-solid-color mixin 使用 base64Encode 函数(在 Sass 中不可用),我需要将该函数添加到 node-sass (有关如何在此处执行此操作的文档:github.com/sass/node-sass#functions--v300---experimental)。
猜你喜欢
  • 2021-10-13
  • 2016-06-04
  • 1970-01-01
  • 2013-11-15
  • 1970-01-01
  • 2013-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多