Pouvez-vous ajouter une ombre à goutte non carrée au contenu PNG avec CSS? [dupliquer]

cette question a déjà une réponse ici:

est-il possible de faire une ombre de chute sur le contenu d'un PNG?

pas un carré , mais un objet goutte d'ombre que

agit sur le contenu non transparent de la PNG.

45
demandé sur Damjan Pavlica 2011-06-22 18:12:12

6 réponses

c'est définitivement possible.

utilisant des filtres, échantillon:

img { 
    -webkit-filter: drop-shadow(5px 5px 5px #222);
    filter:         drop-shadow(5px 5px 5px #222); 
}
101
répondu Slake 2017-01-25 13:56:33

il n'est pas possible de faire cela dans CSS. Cependant, il est tout à fait possible de le faire à l'aide d'une toile, mais il sera quelque peu inefficace (car il est traité par le client à chaque fois) et dépendra de JavaScript. Le faire dans la PNG sera plus facile et fonctionnera sur plus de navigateurs.

si vous voulez plus d'information à ce sujet, rechercher des choses comme" HTML canvas blur "et"html canvas load image". Ou mieux encore, utilisez la fonctionnalité canvas shadow qui peut de faire tout ça.

voici un exemple: http://philip.html5.org/demos/canvas/shadows/various.html

  • créer un contexte à partir de toile
  • set context.shadow(Color|OffsetX|OffsetY|Blur) selon les besoins
  • charger PNG à partir de l'étiquette img avec context.drawImage
  • ah! l'ombre!

et un bonus:

  • utiliser context.toDataURL si vous voulez exporter vers PNG (faire une application web que vous déposez PNGs et il vous donne des ombres!)
19
répondu Chris Morgan 2011-06-22 14:49:33

Comment les temps changent. Il est maintenant possible dans certains navigateurs , comme le montre la réponse actuellement acceptée.


Il n'est pas possible de le faire en utilisant CSS:

C'est ce que je suppose que vous demandez.

12
répondu thirtydot 2013-07-25 15:44:32

Jusqu'à ce qu'il soit disponible pour CSS, vous pouvez essayer mon approche.

mon exemple utilise cette image:

original image

parce qu'il a un fond transparent et il n'est pas carré (pour le box-shadow de CSS pour entrer en action). Ce n'est pas très chic, mais sert ce petit et simple tutoriel amende.

la prochaine étape que j'ai prise était de créer une autre image, basée sur celle ci-dessus, pour la placer sous original.

Step1. Ajouter flou:

blurred original

Step2. Suppression de la lumière et du contraste:

the shadow

donc j'ai l'original et l'ombre.

ensuite je vais l'afficher comme si c'était une ombre:

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;}

Faire de la magie:

Ajouter un div attribute class="divOriginal common " et un autre avec class="divShadow common" .

le résultat doit être:

result: pseudo-shadow

santé!

Adi

4
répondu AdiKonstantin 2015-12-17 18:53:18

j'ai écrit un plugin jQuery pour cela, basé sur la suggestion de Chris Morgan à propos de canvas. Vous pouvez le trouver sur GitHub ici: https://github.com/Kukunin/image-shadow

3
répondu Kukunin 2012-05-09 00:52:00

uF createjs l'échantillon peut être trouvé à 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;
1
répondu Hoy Cheung 2014-06-25 13:35:55