2012-11-06 61 views
-1

我想创建的效果,可以在网站http://www.murmure.me/当你悬停在他们的图像上看到。如何使用CSS在图像上创建虚线阴影效果?

我知道他们使用两个不同的图像,但我希望能够没有2个图像,只有一个图片(没有点的图片)和通过使用CSS的效果。可能吗 ?

+0

我不知道关于点什么,但组合[本条](HTTP:// WWW .gravitywell.co.uk/blog/post/how-to-make-a-image-greyscale-in-css)和“transition”可能会有帮助。 –

+0

好主意,谢谢 – Mathieu

+0

@HashemQolami你认为本文描述的css greyscale + svg适用于移动设备的浏览器(对我很重要)吗? – Mathieu

回答

0

Mikel,您无法使用CSS和单个图像实现丝印效果。以任何跨浏览器兼容的方式,这不会很快发生。当你可以使用HLSL或类似的方式自定义编程CSS过滤器时......也许,最终,当你可以使用HLSL或类似方法自定义编程CSS过滤器时......但是对于目前来说,即使使用接近未来的CSS过滤器,我也不认为他们将会提供丝印,然后,您需要担心这一点以及过渡效果,然后您需要担心浏览器支持,以及其他浏览器的2图像回退。

ie:你必须创建第二张图片,并写出你希望有CSS过滤器的2张图片后备,以避免首先制作第二张图片。

+0

感谢您的回答。我知道了。该effetc将是非常酷:) – Mathieu

+0

这将是。而且这是他们期待去的地方(定制着色器在CSS中运行,而不是专门用于丝网印刷模式),但它不在那里,如果它现在在那里,而且人们在使用手机和平板电脑,它将杀死手机和平板电脑。这就是其中一个障碍,真的--HTML5/ES5/CSS3让我们到了可以开始做非常疯狂的事情的地步......但是手机也刚刚到达了一个地步,如果我们这样做了,我们会杀死我们的移动观众,曾经是贫民窟文本网站,但现在得到一个完整的经验... – Norguard

2

这是非常接近:http://jsfiddle.net/LfXN3/8/

但是,它需要一个第二元件(未形象,只是元素)。伪元素方法不起作用,因为它的不透明度不能动画。

<div> 
    <div id="overlay"></div> 
</div>​ 

CSS

div{ 
    background:url(http://placekitten.com/600/600) center center; 
    width:400px; 
    height:400px; 

    -webkit-transition:all 2s; 
    -webkit-filter: grayscale(100%); 
} 

div:hover{ 
    -webkit-filter: grayscale(0%); 
} 

div #overlay{ 
    opacity:.5; 
    display:block; 
    background: -webkit-linear-gradient(45deg, #777 25%, transparent 25%, transparent), -webkit-linear-gradient(-45deg, #777 25%, transparent 25%, transparent), -webkit-linear-gradient(45deg, transparent 75%, #777 75%), -webkit-linear-gradient(-45deg, #000 75%, #777 75%); 

    background-size:2px 2px; 
    width:400px; 
    height:400px; 

    -webkit-transition:opcaity 2s; 
} 

div:hover #overlay{ 
    opacity:0; 
} 

我已经成功地获得通过将达德利·斯托里的技术为矿山那点点接近:http://jsfiddle.net/LfXN3/14/

的主要区别是这样的:

div #overlay{ 
    opacity:1; 
    display:block; 
    background: -webkit-radial-gradient(rgba(0,0,0,0) 45%, rgba(0,0,0,0.4) 46%), 
-webkit-radial-gradient(rgba(0,0,0,0) 45%, rgba(0,0,0,0.4) 46%), 
    url(http://placekitten.com/600/600); 
    background-position: 0 0, 2px 2px, center center; 
    background-size:4px 4px, 4px 4px, 600px 600px; 
    width:400px; 
    height:400px; 

    -webkit-transition:opacity 2s; 
} 
+0

我可以建议从您的答案中删除“关闭但不是那里”部分?你的第二次尝试是完美的,但大多数人可能不会去那个演示链接。 – ThinkingStiff

+0

@ThinkingStiff它不是“完美”,因为如果你注意主要问题中引用的实际网站上的图像,它们不仅是不饱和的 - 它们是丝网印刷的:黑白图像是由点的小点,其大小和间距被选择来控制该区域的视觉对比度。在CSS中,你可以去饱和度,但是目前没有跨浏览器的方式来控制视觉对比度,将阴影和高光分成圆圈。这就是为什么只有去饱和的技术是“接近”的,而不是“完美的”。 – Norguard

+0

@Norguard绝对正确。混合模式正在工作中,但尚未提供。另外,我认为ThinkingStiff建议我删除第一次尝试的代码,这是我所做的。 – Shmiddty

0

尽管可以使用css3 g将彩色图像转换为灰度图reyscale过滤器,它目前只适用于Chrome。

-webkit-filter: grayscale(100%); 

无需使用jQuery即可获得该效果的解决方法是使用两个图像和css3转换。

-webkit-transition: opacity 0.5s; 
-moz-transition: opacity 0.5s; 
-o-transition:  opacity 0.5s; 
0

如何使用原始图片(不点),只是做一个小点的另一幅图像(像http://www.scottecatalog.com/images.nsf/Images/dot/ $ FILE/Dot.gif)和一个带有重复属性,各地重复点原始图像与点之间具有正确的空间并具有z-index属性(以便将点放置在原始图像的字体中)?

我们仍在使用2张照片,但至少对任何图像复制这种效果都很容易,无论您使用的是哪种原始图像。 会有道理吗?

1

是的,可以用一个单一的图像,使用普通的CSS3和一个过滤器:demo, and a brief explanation, on my blog。现在,Firefox中的灰度到颜色转换看起来特别慢(因为它必须使用与过滤器相同的SVG),所以我暂时将它从演示中删除。

div#silkscreen { 
background: 
-webkit-radial-gradient(rgba(0,0,0,0) 45%, rgba(0,0,0,0.4) 46%), 
-webkit-radial-gradient(rgba(0,0,0,0) 45%, rgba(0,0,0,0.4) 46%), 
url(lotus.jpg); 
background: -moz-radial-gradient(rgba(0,0,0,0) 45%, rgba(0,0,0,0.4) 46%), 
-moz-radial-gradient(rgba(0,0,0,0) 45%, rgba(0,0,0,0.4) 46%), 
url(lotus.jpg); 
background-position: 0 0, 2px 2px; 
background-size:4px 4px, 4px 4px, cover; 
-webkit-filter: grayscale(1); 
filter: url(desaturate.svg#greyscale); 
filter: grayscale(1); 
transition: 1.3s; 
} 
div#silkscreen:hover { -webkit-filter: grayscale(0); filter: none; } 
div#silkscreen img { max-width: 100%; opacity: 0; }} 
div#silkscreen:hover { -webkit-filter: grayscale(0); } 
div#silkscreen img { max-width: 100%; opacity: 0; } 

<div id=silkscreen> 
<img src=lotus.jpg alt=""> 
</div> 

我希望这有助于!

+0

“交叉孵化”也需要淡出。 – Shmiddty

相关问题