【问题标题】:Tinting color over an <img> element in CSS在 CSS 中的 <img> 元素上着色
【发布时间】:2016-02-20 17:08:44
【问题描述】:

目标

当包含&lt;li&gt; 的图像具有active 类时,在图像顶部有一个彩色覆盖。它应该看起来像这样

所有图像上的默认叠加层也是深色的。但是激活时需要更换。下面的图像是较浅的黑白图像。

背景

我在这里找到了有关如何在图像顶部添加彩色叠加层的各种教程和答案。但大多数“图像”是一个 div 的background-image

就我而言我无法更改 html 中元素的当前顺序

问题

如何修改 CSS 以在图像上添加一个彩色图层?

默认图像为黑白。当&lt;img&gt; 的类为bw 时,它们将有一个深色覆盖。

如果包含&lt;li&gt; 处于活动状态,则深色叠加层将被橙色叠加层抵消。

所以看来我必须使用大量的继承才能取得成功。也许在bw 类之后有active 类?

li img.bw {
  background: rgb(3,3,3); /* dark overlay */
  opacity: .9;
}

li.active img.bw {
  background: rgb(246,137,28); /* orange */
  opacity: .5; 
}

代码

Codepen上的演示

HTML

  <li class="active">
    <a href="">
      <img class="bw" src="http://www-tc.pbs.org/prod-media/newshour/photos/2013/07/10/Tesla_circa_1890_slideshow.jpeg">
    </a>  
  </li>

  <li>
    <a href="">
      <img class="bw" src="http://www-tc.pbs.org/prod-media/newshour/photos/2013/07/10/Tesla_circa_1890_slideshow.jpeg">
    </a>
  </li>

CSS

/* demo only */
.li {
  width: 100px;
  height: 100px;
  display: inline-block;
}
img { height: 200px;  width: 160px;}
/* styles for overlay */
li img.bw {
  background: rgb(3,3,3);
  opacity: .9;
}
li.active img.bw {
   background: rgb(246,137,28);
   opacity: .9;
}

【问题讨论】:

  • 很难准确地说出您想要什么,但是这个演示的行为是否符合您的预期? codepen.io/the_ruther4d/pen/ec6e314207d72ba3cdc5ec5d50638660
  • @JoshRutherford 有效。然而,只有当其中的&lt;img&gt; 具有class="bw" 时,才会发生覆盖。或悬停时没有覆盖。我可以从这里修改。谢谢。

标签: html css


【解决方案1】:

达到您想要的效果的一个很好的解决方案是使用::after 伪元素

li, li a, li a img {
display: inline-block;
width: 120px;
height: 160px;
}

li {
position: relative;
margin-right: 20px;
}

li a {
position: absolute;
top: 0;
left: 0;
}


li a::after, li.active a::after {
content: '';
display: inline-block;
position: absolute;
top: 0;
left: 0;
z-index: 12;
width: 120px;
height: 160px;
}

li a::after {
background-color: rgba(0,0,0,0.2);
}

li.active a::after {
background-color: rgba(255,128,0,0.5);
}
<ul>
 <li class="active">
    <a href="">
      <img class="bw" src="http://www-tc.pbs.org/prod-media/newshour/photos/2013/07/10/Tesla_circa_1890_slideshow.jpeg">
    </a>  
  </li>

  <li>
    <a href="">
      <img class="bw" src="http://www-tc.pbs.org/prod-media/newshour/photos/2013/07/10/Tesla_circa_1890_slideshow.jpeg">
    </a>
  </li>
</ul>

【讨论】:

  • 这很好用。我忘了提到当你悬停时不应该有背景颜色。我通过添加此附加规则li.active a:hover::after { background-color: transparent; } 解决了这个问题
猜你喜欢
  • 1970-01-01
  • 2015-01-15
  • 2020-02-27
  • 1970-01-01
  • 2018-01-19
  • 1970-01-01
  • 1970-01-01
  • 2012-12-01
  • 1970-01-01
相关资源
最近更新 更多