【问题标题】:html - grayscale + color overlayhtml - 灰度+彩色叠加
【发布时间】:2019-10-01 17:33:03
【问题描述】:

我正在尝试创建一个悬停效果,其中图像开始时是全彩色的,当我将鼠标悬停在图像上时,我希望它有一个蓝色的叠加层。

问题是,只有一个简单的蓝色叠加层,它只是在彩色图像顶部放置一个半透明的蓝色块......这意味着其他颜色会稍微显示出来。我想要的是图像只是蓝色阴影。

现在,我已经设法让图像变为灰度,并且我已经设法获得蓝色叠加层,但是有没有办法让 CSS 堆叠效果?将图像转为灰度,然后在其上叠加颜色。

更简单的方法可能只是将效果创建为光栅图像,然后让它更改图像,但如果可以在代码中完成,那就太好了。

【问题讨论】:

标签: html css


【解决方案1】:

我认为您正在寻找 CSS filter 属性。在此处查看 David Walshe 的演示:http://davidwalsh.name/demo/css-filters.php

目前它是实验性的,我认为只有 Webkit 支持,但它是使用 CSS 实现这一目标的唯一方法。

您还可以查看 Adob​​e CSS 自定义过滤器:http://html.adobe.com/webplatform/graphics/customfilters/cssfilterlab/

我认为你想做的事情的演示http://jsbin.com/igahay/3011/(来自本主题:CSS image overlay with color and transparency

【讨论】:

  • 嗯,jsbin.com/igahay/3011 上的例子和我想做的类似,只是它只是做一个颜色叠加...例如,右上角的图像,它用蓝色叠加.您仍然可以看到绿色的色调。我想做的更像是这样:i.imgur.com/RvynvTn.jpg
  • @zippo ...您可以使用自定义过滤器做到这一点,只需尝试一下。
  • 您必须在原始图像上放置一个灰度滤镜,并使用蓝色叠加层。
【解决方案2】:

单个图像和 css 过滤器(如果您对结果满意):

		img.front { position: relative; opacity: 0; transition-property: opacity; transition-duration: 0.5s; }
		img.front:hover { opacity: 1; }
		img.back { position: absolute; -webkit-filter: sepia(100%) hue-rotate(180deg) saturate(300%); }
<img class="back" src="https://lh4.googleusercontent.com/-g4UhBKn4KKk/VFzw16RyQQI/AAAAAAAAJ5g/RybFWXp9YXc/w400-h225-no/image-f.jpg" />
<img class="front" src="https://lh4.googleusercontent.com/-g4UhBKn4KKk/VFzw16RyQQI/AAAAAAAAJ5g/RybFWXp9YXc/w400-h225-no/image-f.jpg" />

【讨论】:

  • sepiahue-rotate 的完美组合。我想知道为什么sepia 没有采用可选颜色来分隔,啊。
【解决方案3】:

使用两张图片可以让您在可能的效果、过渡等方面更加灵活。

我会用这个:

img.front { 
  position: relative; 
  opacity: 0; 
  transition-property: opacity; 
  transition-duration: 1s; 
}

img.front:hover { 
  opacity: 1; 
}

img.back { 
  position: absolute; 
}
<img class="back" src="https://lh5.googleusercontent.com/-uM248yE5o9M/VFzw11HH-GI/AAAAAAAAJ5c/KrG1kM7XCsc/w400-h225-no/image-b.jpg" />
<img class="front" src="https://lh4.googleusercontent.com/-g4UhBKn4KKk/VFzw16RyQQI/AAAAAAAAJ5g/RybFWXp9YXc/w400-h225-no/image-f.jpg" />

【讨论】:

  • 这里唯一的问题是你的数据量增加了一倍
  • 如果您可以使用多个 css 过滤器来更改图像,那么数据大小将是相同的 - 只需将过滤器应用于背面或正面图像并使用相同的 url。除非您的图像很大,否则我会使用两个图像解决方案,因为它更灵活。 Css 过滤器并没有涵盖所有的可能性。想象一下,例如尝试在图片上添加聚光灯或耀斑效果等。可能,但我很懒,我更喜欢两张图片:)
  • 当您按 MB 支付云存储费用时,它会开始变得……招标。
【解决方案4】:

我确信有更好的方法来解决这个问题,但如果你想在灰度图像上叠加颜色,你可以去饱和背景图像并使用伪元素来创建叠加:

#img1{
  width: 400px;
  height: 200px;  
  background-color: rgba(15,192,252,0.5); 
  background-image: linear-gradient(black, black), url(https://lh4.googleusercontent.com/-g4UhBKn4KKk/VFzw16RyQQI/AAAAAAAAJ5g/RybFWXp9YXc/w400-h225-no/image-f.jpg);
  background-size: 100%;
  background-blend-mode: saturation;
  transition: 0.5s;
}
#img1:before{
  content: "";
  display: block;
  position: absolute;   
  width: inherit;
  height: inherit;
  background-color: inherit;
  opacity: 0.4;  
}
#img1:hover{
  background-color: transparent;
  background-image: url(https://lh4.googleusercontent.com/-g4UhBKn4KKk/VFzw16RyQQI/AAAAAAAAJ5g/RybFWXp9YXc/w400-h225-no/image-f.jpg);
}
<div id="img1">
  <div>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-06
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 2018-02-08
    • 2011-12-28
    • 1970-01-01
    相关资源
    最近更新 更多