我试图使用:before选择器将图像放在另一个图像上,但我发现它根本不能将图像放在img元素之前,只有一些其他元素。具体来说,我的风格是:

.container
{
   position: relative;
   display: block;
}

.overlay:before
{
    content: url(images/[someimage].png);
    position: absolute;
    left:-20px;
    top: -20px;
}

我发现这很有效:

<a href="[url]" class="container">
  <span class="overlay"/>
  <img width="200" src="[url]"/>
</a>

但这不是:

<a href="[url]" class="container">
  <img width="200" src="[url]" class="overlay"/>
</a>

我可以使用div或p元素来代替这个span,浏览器会正确地将我的图像覆盖到img元素中的图像上,但如果我将overlay类应用到img本身,它就不起作用了。

我想让它工作,因为这个额外的span冒犯了我,但更重要的是,我有大约100篇博客文章,我想修改,如果我可以修改样式表,我可以一次完成这一点,但如果我必须返回并在a和img元素之间添加一个额外的span元素,这将是更多的工作。


当前回答

由于<img>是一个替换的元素,文档样式化不会影响它。

为了引用它,<picture>提供了一个理想的本机包装器,可以将伪元素附加到它上面,如下所示:

img:之后, {后图片: 内容:“\ 1 f63b”; 字体大小:大; 保证金:1 em; } < img src = " / / placekitten.com/110/80 " > <图片> < img src = " / / placekitten.com/110/80 " > < /图片>

其他回答

不幸的是,大多数浏览器不支持在img标记上使用:after或:before。

http://lildude.co.uk/after-css-property-for-img-tag

然而,你可以用JavaScript/jQuery来完成你所需要的。看看这把小提琴:

http://jsfiddle.net/xixonia/ahnGT/

$(function() {

    $('.target').after('<img src="..." />');

});

编辑:

对于不支持的原因,请查看coreyward的答案。

试试这段代码

.button:after {
    content: ""
    position: absolute
    width: 70px
    background-image: url('../../images/frontapp/mid-icon.svg')
    display: inline-block
    background-size: contain
    background-repeat: no-repeat
    right: 0
    bottom: 0
}

:after可用于显示映像的回退映像


请看下面的例子,前2个img标签指向损坏的url。但第二个显示的是后退图像,而不是浏览器默认的损坏logo。然而,我不确定这是否实用,我发现让它正确工作有点棘手。

img { position: relative; display: inline-block; width: 300px; height: 200px; vertical-align: top; } img:not(:first-child)::after { position: absolute; left: 0; top: 0; right: 0; bottom: 0; content: "<" attr(alt) "> NOT FOUND"; border: 1px dashed #999; background: url(https://cdn.dribbble.com/users/1012566/screenshots/4187820/topic-2.jpg) center/100%; } <img src="https://source.unsplash.com/random/100/75" alt="logo"> <img src="https://source.unsplash.com/random/100/75" alt="logo"> <img src="https://source.unsplash.com/random/100x75" alt="logo">

before和after伪选择器不插入HTML元素——它们在目标元素的现有内容之前或之后插入文本。因为图像元素不包含文本,也没有后代,所以img:before或img:after都不会对您有任何好处。对于<br>和<hr>这样的元素也是如此,原因相同。

我找到了一个方法,让这个工作在纯css:

“我只是假内容”方法

一个纯CSS方法来启用img:after。

你可以查看CodePen: I'm just fake content或查看源代码。

来源和代码片段

img { /* hide the default image */ height:0; width:0; /* hide fake content */ font-size:0; color:transparent; /* enable absolute position for pseudo elements */ position:relative; /* and this is just fake content */ content:"I'm just fake content"; } /* initial absolute position */ img:before, img:after { position:absolute; top:0; left:0; } /* img:before - chrome & others */ img:before { content:url(http://placekitten.com/g/250/250); } /* img:before - firefox */ body:not(:-moz-handler-blocked) img:before { padding:125px; background:url(http://placekitten.com/g/250/250) no-repeat; } /* img:after */ img:after { /* width of img:before */ left:250px; content:url(http://lorempixel.com/350/200/city/1); } <img alt="You are watching the ~ I'm just fake content ~ method" />

浏览器支持

✓Chrome 10 +。

✓火狐11 +

Opera 9.8+

✓ 野生动物园

不支持

⊗Internet Explorer 8 / 9

请在其他浏览器中测试