我试图使用: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>是一个替换的元素,如果图像加载失败,则在其上使用:before或:after伪元素,否则将不起作用。如果您打算在图像加载失败的情况下有一个后备方案,请参阅https://stackoverflow.com/a/71478688/14204452

其他回答

只要给图像“position: relative”,它就可以工作了

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <style>

      #image img{
    display: inline-block;
    max-width: 50%;
    }

      #image::after {
    position: absolute;
    top: 0;
    content: url('https://img.icons8.com/plasticine/100/000000/about.png');
    }

    </style>
    <title>img before</title>
  </head>
  <body>
    <a id="image" href="">
    <img src="https://static.remove.bg/remove-bg-web/5c20d2ecc9ddb1b6c85540a333ec65e2c616dbbd/assets/start-1abfb4fe2980eabfbbaaa4365a0692539f7cd2725f324f904565a9a744f8e214.jpg">
    </a>
  </body>
</html>

在这些情况下,最好使用<figure>标记,它允许您以最佳的方式管理css 这样你就可以用后才上图了

例子

<div class="exemple">
  <figure>
    <img src="img1.jpg"/>
  </figure>
  <figure>
    <img src="img2.jpg"/>
  </figure>
</div>

这个对我很有用:

html

<ul>
    <li> name here </li>
</ul>

CSS

ul li::before {
    content: url(../images/check.png);
}

在前一个元素上尝试::。