J'ai une image PNG, qui a une forme libre (non carrée).
Je dois appliquer un effet d'ombre portée à cette image.
L'approche standard ...
-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;
... affiche des ombres pour cette image, comme si c'était un carré. Donc, je vois mon image et mon ombre carrée, qui ne suit pas la forme de l'objet, affichée dans l'image.
Existe-t-il un moyen de le faire correctement?
css
image
png
transparency
AntonAL
la source
la source
filter
propriété CSS multiplateforme ... Bien que je ne pense pas que des balises HTML SVG soient nécessaires, tout PNG avec canal alpha fera l'affairefilter: drop-shadow(x y blur color);
donc l'astuce SVG ne devrait plus être nécessaire.Oui, il est possible d'utiliser
filter: dropShadow(x y blur? spread? color?)
, en CSS ou en ligne:la source
Si vous avez> 100 images pour lesquelles vous souhaitez avoir des ombres portées, je suggère d'utiliser le programme de ligne de commande ImageMagick . Avec cela, vous pouvez appliquer des ombres portées en forme à 100 images en tapant une seule commande! Par exemple:
La commande ci-dessus (shell) prend chaque fichier .png dans le répertoire courant, applique une ombre portée et enregistre le résultat dans le répertoire shadow /. Si vous n'aimez pas les ombres portées générées, vous pouvez modifier beaucoup les paramètres; commencez par regarder la documentation pour les ombres , et les instructions générales d' utilisation ont beaucoup d'exemples sympas de choses qui peuvent être faites aux images.
Si vous changez d'avis à l'avenir sur l'apparence des ombres portées - ce n'est qu'une commande pour générer de nouvelles images avec différents paramètres :-)
la source
mkdir shadow
) 2.$i
devrait être cité (comme dans"$i"
) ou il s'étouffera si une image a un espace dans son nom de fichier:for i in *.png; do convert "$i" '(' +clone -background black -shadow 80x3+3+3 ')' +swap -background none -layers merge +repage shadow/"$i".png; done
filename.png.png
. Voici une version entièrement fonctionnelle:for i in *.png; do convert "$i" '(' +clone -background black -shadow 80x3+3+3 ')' +swap -background none -layers merge +repage shadow/"$i"; done
Cela a très bien fonctionné pour moi. Une chose à noter dans IE, vous avez besoin de la couleur (# 222222) trois caractères ne fonctionnent pas.
la source
Comme Dudley l'a mentionné dans sa réponse, cela est possible avec le filtre CSS ombre portée pour webkit, SVG pour Firefox et les filtres DirectX pour Internet Explorer 9-.
Une étape supplémentaire consiste à intégrer le SVG, en éliminant la demande supplémentaire:
la source
Ajoutez une bordure avec un rayon dans votre classe si c'est un bloc. car par défaut, l'ombre s'applique sur la bordure du bloc, même si votre image a un coin arrondi.
border-radius: 4px;
changer son rayon de bordure en fonction de votre coin d'image. J'espère que cette aide.
la source
Ajoutez simplement ceci:
exemple:
la source
Voici un extrait de code d'animation glow hover prêt pour cela:
http://codepen.io/widhi_allan/pen/ltaCq
la source
Quand j'ai posté cela à l'origine, ce n'était pas possible, c'est donc la solution de contournement. Maintenant, je suggère simplement d'utiliser d'autres réponses.
Il n'y a aucun moyen d'obtenir exactement le contour de l'image, mais vous pouvez le simuler avec un div derrière l'image au centre.
Si mon astuce ne fonctionne pas, vous devez découper l'image et le faire pour chacune des petites images. (plus il y a d'images, plus l'ombre sera précise), mais pour la plupart des images, elle semble correcte avec une seule img.
ce que vous devez faire est de mettre un div enveloppant autour de votre img comme si
puis vous mettez un séparateur vide à l'intérieur de l'enveloppe (cela servira d'ombre)
puis vous devez faire apparaître l'ombre derrière l'img avec CSS:
maintenant positionnez l'imgWrap pour positionner l'img d'origine ... pour centrer l'ombre de l'img vous pouvez jouer avec les deux premières valeurs de l'ombre de boîte les rendant négatives .... ou vous pouvez positionner l'img et les diviseurs d'ombre absolument faire des valeurs img top et left = 0 et les valeurs shadow div = la moitié de la largeur et de la hauteur img respectivement.
Si cela semble horrible, coupez votre image et réessayez.
(Si vous ne voulez pas que l'ombre derrière l'image soit juste sur le contour, vous devez rendre votre image opaque et la faire agir comme si elle était transparente, ce qui n'est pas si difficile et vous pouvez commenter et je vous expliquerai plus tard)
la source
Dans mon cas, il devait fonctionner sur des navigateurs mobiles modernes, avec une image PNG de différentes formes et transparence. J'ai créé une ombre portée à l'aide d'un double de l'image. Cela signifie que j'ai deux
img
éléments de la même image, l'un au-dessus de l'autre (en utilisantposition: absolute
), et celui derrière a les règles suivantes qui lui sont appliquées:Cela inclut un filtre de luminosité afin d'assombrir l'image du bas, et un filtre de flou afin de projeter l'ombre portée avec un effet flou. Une opacité à 50% est ensuite appliquée afin de l'assouplir.
Cela peut être appliqué à travers le navigateur à l'aide des indicateurs
moz
etms
.Exemple: https://jsfiddle.net/5mLssm7o/
la source
Il existe une fonctionnalité proposée que vous pouvez utiliser pour les ombres portées de forme arbitraire. Vous pouvez le voir ici, gracieuseté de Lea Verou:
http://www.netmagazine.com/features/hot-web-standards-css-blending-modes-and-filters-shadow-dom
La prise en charge du navigateur est cependant minime.
la source
Ce ne sera pas possible avec css - une image est un carré, et donc l'ombre serait l'ombre d'un carré. La façon la plus simple serait d'utiliser Photoshop / Gimp ou tout autre éditeur d'image pour appliquer l'ombre comme le dessin de base.
la source
Une astuce que j'utilise souvent lorsque j'ai juste besoin d'une "petite" ombre (lire: le contour ne doit pas être super précis) consiste à placer un DIV avec un remplissage radial de 100% - noir à 100% - transparent sous l'image. Le CSS pour le DIV ressemble à quelque chose comme:
Cela créera un `` point '' noir circulaire délavé sur un DIV 320x320. Si vous modifiez la hauteur ou la largeur du DIV, vous obtenez un ovale correspondant. Très agréable à créer, par exemple, des ombres sous des bouteilles ou d'autres formes cylindriques.
Il existe un outil absolument incroyable et super excellent pour créer des dégradés CSS ici:
http://www.colorzilla.com/gradient-editor/
ps: Faites un clic de publicité de courtoisie lorsque vous l'utilisez. (Et, non, je n'y suis pas affilié. Mais les clics de courtoisie devraient devenir un peu une habitude, en particulier pour les outils que vous utilisez souvent ... dites simplement ... puisque nous travaillons tous sur le net ... )
la source
Vous ne pouvez pas le faire de manière fiable sur tous les navigateurs. Microsoft ne prend plus en charge les filtres DX à partir d'IE10 +, donc aucune des solutions ici ne fonctionne pleinement:
https://msdn.microsoft.com/en-us/library/hh801215(v=vs.85).aspx
La seule propriété qui fonctionne de manière fiable sur tous les navigateurs est
box-shadow
, et cela place simplement la bordure sur votre élément (par exemple, un div), résultant en une bordure carrée:shadow-box: horizontalOffset verticalOffset blurDistance spreadDistance encart de couleur ;
par exemple
Si vous avez une image «carrée» mais avec des coins arrondis uniformes, l'ombre portée fonctionne avec
border-radius
, vous pouvez donc toujours émuler les coins arrondis de votre image dans votre div.Voici la documentation Microsoft pour
box-shadow
:https://msdn.microsoft.com/en-us/library/gg589484(v=vs.85).aspx
la source
Vous êtes peut-être à la recherche de cela. http://lineandpixel.com/blog/png-shadow
la source