开发者

Can you add a non-square drop shadow to PNG content with CSS? [duplicate]

开发者 https://www.devze.com 2023-03-14 20:56 出处:网络
This question already has answers here: Drop shadow for PNG image in CSS (15 answers) 开发者_高级运维
This question already has answers here: Drop shadow for PNG image in CSS (15 answers) 开发者_高级运维 Closed 7 years ago.

Is it possible to do a drop shadow on the content of a PNG?

Not a square, but an object drop shadow that

acts on the non-transparent content of the PNG.


It's definitely possible.

Using filters, sample:

img { 
    -webkit-filter: drop-shadow(5px 5px 5px #222);
    filter:         drop-shadow(5px 5px 5px #222); 
}


It's not possible to do that in CSS. However, it's quite possible to do it through a canvas, but it will be somewhat inefficient (as it's processed by the client each time) and will be JavaScript dependent. Doing it in the PNG will be easier and will work on more browsers.

If you want more information about it, search the web for things like "html canvas blur" and "html canvas load image". Or better still, use the canvas shadow functionality which can do it all.

Here's an example: http://philip.html5.org/demos/canvas/shadows/various.html

  • create context from canvas
  • set context.shadow(Color|OffsetX|OffsetY|Blur) as desired
  • load PNG from img tag with context.drawImage
  • ah! the shadows!

And a bonus:

  • use context.toDataURL if you want to export to PNG (make a web app which you drop PNGs in and it gives you shadows!)


How times change. It's now possible in some browsers, as shown in the currently accepted answer.


It's not possible to do this using CSS:

Can you add a non-square drop shadow to PNG content with CSS? [duplicate]

That's what I assume you're asking for.


Until it will be available to CSS, you can try my approach.

My example uses this picture:

Can you add a non-square drop shadow to PNG content with CSS? [duplicate]

because it has a transparent background and it isn't square (for CSS's box-shadow to get into action). It's not very fancy, but serves this small and simple tutorial fine.

Next step I took was to create another image, based on the one above, to place it under the original.

Step1. Add blur:

Can you add a non-square drop shadow to PNG content with CSS? [duplicate]

Step2. Removed light and contrast:

Can you add a non-square drop shadow to PNG content with CSS? [duplicate]

So I have the original and the shadow.

Next I will display it as if it is a shadow:

Style:

.common {width: 100px;height: 100px;background-size: 100% 100%; position:absolute;}

.divOriginal {background-image: url(../img/original.png);top:2em;left:2em;z-index:10;}

.divShadow {background-image: url(../img/shadow.png);top: 3em;left: 2.5em;z-index:8;}

Do the magic:

Add one div and set attribute class="divOriginal common" and another one with class="divShadow common".

The result should be:

Can you add a non-square drop shadow to PNG content with CSS? [duplicate]

Cheers!

Adi


I've wrote a jQuery plugin for this, based on Chris Morgan's suggestion about canvas. You can find it on GitHub here: https://github.com/Kukunin/image-shadow


Use createjs sample can be found at JSFiddle

shadowTarget.shadow = shadow;

stage.addChild(shadowTarget);

shadowTarget.x = 500 / 2;
shadowTarget.y = 450 / 2;

shadowTarget.regX = shadowTarget.image.width/2;
shadowTarget.regY = shadowTarget.image.height/2;
0

精彩评论

暂无评论...
验证码 换一张
取 消