【发布时间】:2014-02-06 14:02:53
【问题描述】:
我正在尝试使图像的一部分变灰(左右两条条纹)。有没有办法只使用 CSS 来做到这一点?
我知道我可以使用过滤器(即filter: grayscale(100%)),但我不希望整个图像都是灰色的。
【问题讨论】:
我正在尝试使图像的一部分变灰(左右两条条纹)。有没有办法只使用 CSS 来做到这一点?
我知道我可以使用过滤器(即filter: grayscale(100%)),但我不希望整个图像都是灰色的。
【问题讨论】:
没有额外标记的纯 CSS 解决方案
HTML
<div class="image-container">
<img class="image-grey" src="http://placekitten.com/200/150" />
</div>
CSS
.image-container {
position:relative;
display:inline-block;
}
.image-grey {
display:block;
-webkit-filter: grayscale(100%);
}
.image-container:after {
position:absolute;
content:"";
top:0;
left:50%;
width:50%;
height:100%;
background-image:url(http://placekitten.com/200/150);
background-position:top right;
}
【讨论】:
background-size: cover;,这个例子是行不通的。但我forked the fiddle 所以它也能做到!
在上面放一个 div。
<div id="wrapper">
<img src="path/to/file.jpg" />
<div id="filter">
</div>
<style>
#wrapper {position: relative;}
#filter {
position: absolute;
top: 123px;
left: 123px;
width: 42px;
height: 42px;
background: rgba(255,0,0,0.5);
}
</style>
【讨论】:
如果您确实希望使用灰度滤镜,则需要将两张图像叠放在一起,其中一张应用了灰度滤镜并裁剪为您想要的大小。
<div class="image-container">
<img class="image-grey clip" src="http://placekitten.com/200/150" />
<img class="image-coloured" src="http://placekitten.com/200/150" />
</div>
和
.image-coloured {
z-index: 0;
position: absolute;
}
.image-grey {
z-index: 1;
position: absolute;
-webkit-filter: grayscale(100%);
}
.clip {
clip: rect(0px,60px,150px,0px)
}
【讨论】: