投影在PNG图像的CSS
我有一个PNG图像,有自由forms(非方形)。
我需要将阴影效果应用于此图像。
标准的方法…
-o-box-shadow: 12px 12px 29px #555; -icab-box-shadow: 12px 12px 29px #555; -khtml-box-shadow: 12px 12px 29px #555; -moz-box-shadow: 12px 12px 29px #555; -webkit-box-shadow: 12px 12px 29px #555; box-shadow: 12px 12px 29px #555;
…为这个图像显示阴影,就像是一个正方形。 所以,我看到我的形象和方形的影子,不符合形象地展示在图像中。
有什么办法可以做到吗?
晚了一点,但是,是的,这完全有可能创build“真实”的dynamic阴影周围阿尔法屏蔽PNGs,使用dropshadowfilter(用于Webkit),SVG(用于Firefox)和DXfilter的IE。
.shadowed { -webkit-filter: drop-shadow(12px 12px 25px rgba(0,0,0,0.5)); filter: url(#drop-shadow); -ms-filter: "progid:DXImageTransform.Microsoft.Dropshadow(OffX=12, OffY=12, Color='#444')"; filter: "progid:DXImageTransform.Microsoft.Dropshadow(OffX=12, OffY=12, Color='#444')"; }
<!-- HTML elements here --> <svg height="0" xmlns="http://www.w3.org/2000/svg"> <filter id="drop-shadow"> <feGaussianBlur in="SourceAlpha" stdDeviation="4"/> <feOffset dx="12" dy="12" result="offsetblur"/> <feFlood flood-color="rgba(0,0,0,0.5)"/> <feComposite in2="offsetblur" operator="in"/> <feMerge> <feMergeNode/> <feMergeNode in="SourceGraphic"/> </feMerge> </filter> </svg>
一些比较真正的阴影和盒子阴影和我刚才描述的技术的一篇文章 。
我希望这有帮助!
是的,这是可能的。 请在CSS中为图片编写以下代码:
img { -webkit-filter: drop-shadow(5px 5px 5px #222); filter: drop-shadow(5px 5px 5px #222); }
或者只是使用内联样式:
<img src="your-image-source" style="-webkit-filter: drop-shadow(5px 5px 5px #222); filter: drop-shadow(5px 5px 5px #222);" >
文档:
https://developer.mozilla.org/en-US/docs/Web/CSS/filter#drop-shadow();
如果你有> 100个图像,你想有阴影,我会build议使用命令行程序ImageMagick 。 有了这个,只需input一个命令就可以将形状阴影应用于100张图像! 例如:
for i in "*.png"; do convert $i '(' +clone -background black -shadow 80x3+3+3 ')' +swap -background none -layers merge +repage "shadow/$i"; done
上面的(shell)命令获取当前目录中的每个.png文件,应用一个阴影,并将结果保存在shadow /目录中。 如果你不喜欢生成的阴影,你可以调整参数很多; 首先查看阴影的文档 ,一般的使用说明有很多可以对图像进行处理的很酷的例子。
如果您在将来关于阴影的外观改变主意 – 这只是一个用不同参数生成新图像的命令:-)
正如Dudley在他的回答中提到的,这可以通过webkit的下拉式CSSfilter,Firefox的SVG和Internet Explorer 9的DirectXfilter来实现。
更进一步的是内联SVG,消除额外的请求:
.shadowed { -webkit-filter: drop-shadow(12px 12px 25px rgba(0,0,0,0.5)); filter: url("data:image/svg+xml;utf8,<svg height='0' xmlns='http://www.w3.org/2000/svg'><filter id='drop-shadow'><feGaussianBlur in='SourceAlpha' stdDeviation='4'/><feOffset dx='12' dy='12' result='offsetblur'/><feFlood flood-color='rgba(0,0,0,0.5)'/><feComposite in2='offsetblur' operator='in'/><feMerge><feMergeNode/><feMergeNode in='SourceGraphic'/></feMerge></filter></svg>#drop-shadow"); -ms-filter: "progid:DXImageTransform.Microsoft.Dropshadow(OffX=12, OffY=12, Color='#444')"; filter: "progid:DXImageTransform.Microsoft.Dropshadow(OffX=12, OffY=12, Color='#444')"; }
如果其中有一个块,则在类中添加具有半径的边界。 因为默认情况下,即使图像有圆angular,阴影也会应用于块边框。
border-radius: 4px;
根据你的图像angular改变它的边界半径。 希望这个帮助。
只需添加这个:
-webkit-filter: drop-shadow(5px 5px 5px #fff); filter: drop-shadow(5px 5px 5px #fff);
例:
<img class="home-tab-item-img" src="img/search.png"> .home-tab-item-img{ -webkit-filter: drop-shadow(5px 5px 5px #fff); filter: drop-shadow(5px 5px 5px #fff); }
现在不可能使用CSS。 见build议http://lineandpixel.com/blog/png-shadow
这里是准备发光hoveranimation代码片段:
http://codepen.io/widhi_allan/pen/ltaCq
-webkit-filter: drop-shadow(0px 0px 0px rgba(255,255,255,0.80));
img { -webkit-filter: drop-shadow(5px 5px 5px #222222); filter: drop-shadow(5px 5px 5px #222222); }
这对我来说很好。有一件事需要注意,你需要全色(#222222)三个字符不起作用。
没有办法准确地得到图像的轮廓,但是可以用中间图像背后的div来伪造它。
如果我的伎俩不起作用,那么你必须削减图像,并为每一个小图像做。 (越多的图像越精确的阴影将看起来),但对于大多数图像看起来只有一个img好。
你需要做的就是像你这样在你的img上放一个换行div
<div id="imgWrap"> <img id="img" scr="imgLocation"> </div>
然后你把一个空的分隔线(这将作为影子)
<div id="imgWrap"> <div id="shadow"> </div> <img id="img" scr="imgLocation"> </div>
然后你必须使阴影出现在CSS的img后面:
#img { z-index: 1; } #shadow { z-index: 0; /*make this value negative if doesnt work*/ box-shadow: 0 -130px 180px 150px rgba(255, 255, 0, 0.6); width: 0; height: 0; }
现在定位imgWrap来定位原始img …以img的阴影为中心,您可以将box-shadow的前两个值混淆为负值….或者您可以将img和shadow div绝对定位使img的左上angular值和右下angular值分别为img的宽度和高度的一半。
如果这看起来可怕的削减你的IMG了,再试一次。
(如果你不想要img背后的阴影只是在轮廓上,那么你需要使你的img不透明,并使它的行为,如果它是透明的,这不是很难,你可以评论,我会稍后解释)
有一个build议的function,您可以使用任意形状的阴影。 你可以在这里看到,由Lea Verou提供:
http://www.netmagazine.com/features/hot-web-standards-css-blending-modes-and-filters-shadow-dom
尽pipe浏览器支持是最小的。
这不可能与CSS – 一个图像是一个正方形,所以阴影将是一个正方形的阴影。 最简单的方法是使用Photoshop / GIMP或任何其他图像编辑器应用像核心绘制阴影。
当我只需要“一点点”阴影(阅读:轮廓不能是超精确的)时,我经常使用的一个技巧就是在图像下面放置一个径向填充100% – 黑到100%透明的DIV。 DIV的CSS看起来像这样:
.shadow320x320{ background: -moz-radial-gradient(center, ellipse cover, rgba(0,0,0,0.58) 0%, rgba(0,0,0,0.58) 1%, rgba(0,0,0,0) 43%, rgba(0,0,0,0) 100%); /* FF3.6+ */ background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%,rgba(0,0,0,0.58)), color-stop(1%,rgba(0,0,0,0.58)), color-stop(43%,rgba(0,0,0,0)), color-stop(100%,rgba(0,0,0,0))); /* Chrome,Safari4+ */ background: -webkit-radial-gradient(center, ellipse cover, rgba(0,0,0,0.58) 0%,rgba(0,0,0,0.58) 1%,rgba(0,0,0,0) 43%,rgba(0,0,0,0) 100%); /* Chrome10+,Safari5.1+ */ background: -o-radial-gradient(center, ellipse cover, rgba(0,0,0,0.58) 0%,rgba(0,0,0,0.58) 1%,rgba(0,0,0,0) 43%,rgba(0,0,0,0) 100%); /* Opera 12+ */ background: -ms-radial-gradient(center, ellipse cover, rgba(0,0,0,0.58) 0%,rgba(0,0,0,0.58) 1%,rgba(0,0,0,0) 43%,rgba(0,0,0,0) 100%); /* IE10+ */ background: radial-gradient(ellipse at center, rgba(0,0,0,0.58) 0%,rgba(0,0,0,0.58) 1%,rgba(0,0,0,0) 43%,rgba(0,0,0,0) 100%); /* W3C */ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#94000000', endColorstr='#00000000',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */ }
这将在320×320 DIV上创build一个圆形的黑色渐变“点”。 如果您缩放DIV的高度或宽度,则会得到相应的椭圆。 在瓶子或其他圆柱形状下创build阴影非常好。
这里有一个绝对令人难以置信的,超级优秀的工具来创buildCSS渐变:
http://www.colorzilla.com/gradient-editor/
ps:当你使用它时,做一个礼貌的广告点击。 (不,我不隶属于它,但礼貌点击应该成为一个习惯,尤其是对于你经常使用的工具…只是说…因为我们都在网上工作… … )
也许你正在寻找这个。 http://lineandpixel.com/blog/png-shadow
img { png-shadow: 5px 5px 5px #222; }
在我的情况下,它必须在现代移动浏览器上工作,使用不同形状和透明度的PNG图像。 我使用图像的副本创build了投影。 这意味着我有两个相同图像的img
元素,一个在另一个之上(使用position: absolute
),后面的元素应用了以下规则:
.image-shadow { filter: blur(10px) brightness(-100); -webkit-filter: blur(10px) brightness(-100); opacity: .5; }
这包括亮度filter以使底部图像变暗,以及模糊filter,以便投射通常具有的污浊效果的投影。 然后应用50%的不透明度以软化它。
这可以应用跨浏览器使用moz
和ms
标志。
例如: https : //jsfiddle.net/5mLssm7o/
您无法在所有浏览器中可靠地执行此操作。 微软不再支持IE10 +以上的DXfilter,所以这里的解决scheme都不能完全工作:
https://msdn.microsoft.com/en-us/library/hh801215(v=vs.85).aspx
在所有浏览器box-shadow
唯一可靠的属性是box-shadow
,这只是将边框放在元素上(例如div),从而产生一个方形边框:
box-shadow: horizontalOffset verticalOffset blurDistance spreadDistance color inset;
例如
box-shadow: -2px 6px 12px 6px #CCCED0;
如果您碰巧有一个“正方形”但具有统一的圆angular的图像,则投影与border-radius
,因此您始终可以在div中模拟图像的圆angular。
以下是有关box-shadow
的Microsoft文档:
https://msdn.microsoft.com/en-us/library/gg589484(v=vs.85).aspx