如何使用纯CSS和HTML覆盖图像/水印

时间:2018-01-21 10:03:57

标签: css image overlay layer watermark

通过传递类,是否有一种简单的方法可以通过相对定位将透明PNG(或任何其他图像)覆盖在带有CSS的图像标记上?

 <img class="watermarked" src="http://placehold.it/500x325.jpg" alt="Photo">

然后CSS可能与此类似(不工作):

.watermarked{
  background-image: url("http://placehold.it/100x100/09f/fff.png");
  position: relative;
  left: 30px;
  opacity: 0.5;
}

理想情况下,我可以定义我的&#34;水印&#34;的路径。在CSS中覆盖图像,然后覆盖我添加的任何图像&#34;水印&#34;将这个图像覆盖在顶部并具有一些负相对定位的类。它应该能够应用于单个页面上的多个图像,因此单个使用DIV将无法工作。

显然,这并没有做任何事情来保护底层图像...所以把它称为水印并不是真正准确的...更多的是临时叠加。令我感到惊讶的是,答案并不容易获得,但我已经四处寻找并且没有在谷歌或谷歌找到答案。

&#13;
&#13;
.watermarked {
  background-image: url("http://via.placeholder.com/100x100/09f/fff.png");
  position: relative;
  left: 30px;
  opacity: 0.5;
}
&#13;
<div class="col-lg-3 col-md-6 mb-4">
  <div class="card">
    <img class="card-img-top watermarked" src="http://placehold.it/500x325" alt="">
    <div class="card-body">
      <h4 class="card-title">Card title</h4>
      <p class="card-text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sapiente esse necessitatibus neque.</p>
    </div>
  </div>
</div>
&#13;
&#13;
&#13;   

3 个答案:

答案 0 :(得分:3)

如果您要使用仅限CSS的解决方案,我建议您将要添加水印的图像包装在容器div中,然后我们可以添加一个:after伪元素我们的水印。

理想的解决方案是将:after伪元素直接应用于img元素,但遗憾的是大多数浏览器不支持使用:before:after img元素。如果是这样,我们可以将.watermark直接应用于img代码。

在下面的解决方案中,我们在整个图像上覆盖:after伪元素,然后将水印徽标放在左上角。

此解决方案的一个优点是:after元素覆盖了整个图像,这可以防止用户右键单击并保存图像(尽管这不会阻止任何具有一点Web体验的人查找图像下载它的URL)。由于:after元素覆盖了整个图像,因此我们还可以应用半透明背景来略微模糊带水印的图像。

所以我们留下了这个解决方案:

.watermarked {
  position: relative;
}

.watermarked:after {
  content: "";
  display: block;
  width: 100%;
  height: 100%;
  position: absolute;
  top: 0px;
  left: 0px;
  background-image: url("http://placehold.it/100x100/09f/fff.png");
  background-size: 100px 100px;
  background-position: 30px 30px;
  background-repeat: no-repeat;
  opacity: 0.7;
}
<div class="watermarked">
  <img src="http://placehold.it/500x325.jpg" alt="Photo">
</div>

答案 1 :(得分:0)

另一种方法是创建一个相对div并将其放在页面流中,首先放置主图像,然后将水印放在顶部。

<!Doctype>
<html>
<head>
    <style>
    .card
    {
        position: relative;
        top: 0;
        left: 0;
    }
    .watermark
    {
        position: absolute;
        top: 60px;
        left: 80px;
    }
    </style>
</head>
<body>
    <div style="position: relative; left: 0; top: 0;">
        <img src="img/cardX.png" class="card"/>
        <img src="img/watermark2.png" class="watermark"/>
    </div>
</body>
</html>

或者您可以overlay使用水印文字添加图片。这可以通过HTML或CSS轻松完成。

HTML:

<figure class="watermark">
<img class="demo" src="image.jpg" alt="Image" />
<figcaption class="watermark-text">Watermark XYZ</figcaption>
</figure>

CSS代码更长,因为您需要定义类等,并使用:after元素作为上面描述的Brett。

.watermark {
position: relative;
padding: 0;
margin: 0;
}
.watermark img {
display: block;
max-width: 100%;
height: auto;
}
.watermark:after {
content: "";
position: absolute;
display: block;
left: 0;
top: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0) linear-gradient(to bottom, rgba(0, 0, 0, 0) 0px, rgba(0, 0, 0, 0.6) 70%) repeat 0 0;
z-index: 1;
}
.watermark-text {
display: block;
position: absolute;
width: 100%;
color: #fff;
left: 0;
bottom: 0;
padding: 1em;
font-weight: 700;
z-index: 2;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}

答案 2 :(得分:0)

使用实际图像作为背景图像,然后无限重复使用标签中的水印。这使得在水印后面另存为背景图像变得更加困难,但也阻​​止了爬虫索引图像。如果您仍然希望抓取带水印的照片,您只需在 .txt 文件中列出它们的网址,然后将其作为站点地图提交。