É possível definir sombra projetada para um elemento svg usando css3, algo como
box-shadow: -5px -5px 5px #888;
-webkit-box-shadow: -5px -5px 5px #888;
Vi algumas observações sobre a criação de sombras usando efeitos de filtro. Existe um exemplo de uso de css sozinho. Abaixo está um código de trabalho em que o estilo do cliente é aplicado corretamente, mas sem efeito de sombra. Por favor, ajude-me a obter o efeito de sombra com o mínimo de código.
svg .shadow {
cursor:crosshair;
-moz-box-shadow: -5px -5px 5px #888;
-webkit-box-shadow: -5px -5px 5px #888;
box-shadow: -5px -5px 5px #888;
}
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" baseProfile="full" viewBox="0 0 120 70">
<rect class="shadow" x="10" y="10" width="100" height="50" fill="#c66" />
</svg>
fonte
slope
atributo para ajustar a quantidade de opacidade desejada.Use a
novafilter
propriedade CSS .Suportado pelos navegadores da webkit , Firefox 34+ e Edge .
Você pode usar esse polyfill que oferecerá suporte a FF <34, IE6 +.
Você usaria assim:
Essa abordagem difere do
box-shadow
efeito, pois é responsável pela opacidade e não aplica o efeito de sombra projetada à caixa, mas aos cantos do próprio elemento svg.Nota : Essa abordagem só funciona quando a classe é colocada apenas no
<svg>
elemento. Você NÃO pode usar isso em um elemento svg embutido, como<rect>
.Leia mais sobre filtros css em html5rocks .
fonte
Você pode adicionar facilmente um efeito de sombra projetada a um elemento svg usando a função CSS drop-shadow () e os valores de cor rgba. Usando os valores de cor rgba, você pode alterar a opacidade da sua sombra.
fonte
A maneira mais fácil que eu encontrei é com
feDropShadow
. Nunca voltarei a usar esses nomes de tags de filtro incrivelmente esotéricos que não entendo.fonte
filter:url(#shadow)
ao elemento que deseja ter uma sombra (#shadow
é o ID dafilter
tag). Por exemplo<path d="..." style="filter:url(#shadow)"/>
. Talvez você deva adicionar isso à sua resposta.Não conheço uma solução somente CSS.
Como você mencionou, os filtros são a abordagem canônica para criar efeitos de sombra projetada no SVG. A especificação SVG inclui um exemplo disso.
fonte
-webkit-filter: drop-shadow()
é o caminho a percorrer, com certeza. Veja a resposta de @hitautodestruct.Removed: Filter Effects This chapter is no longer part of the SVG specification
!!Texto em preto com sombra branca
Outra maneira, eu usei para sombra branca (no texto): crie um clone para sombra:
Nota : Isso requer
xmlns:xlink="http://www.w3.org/1999/xlink"
na declaração SVG.O valor do texto real está localizado na
<defs>
seção, com posição e estilo, mas sem umafill
definição.O texto é clonado duas vezes: primeiro para sombra e segundo para o próprio texto.
Sombra mais distante com maior valor como desvio de desfoque :
Você pode usar essa mesma abordagem com objetos SVG regulares.
Com o mesmo requisito: Nenhuma definição de preenchimento na
<defs>
seção !fonte
flood-color
?Blur
é usado para fazer a sombra parecer um pouco embaçada. Veja a minha segunda versão em textoMore distant shadow...
(Apenas adicionada agora)Provavelmente uma evolução, parece que os filtros CSS embutidos funcionam bem em elementos, de certa maneira.
Declarar um filtro CSS drop-shadow, em um elemento svg, em uma classe ou em linha NÃO funciona, conforme especificado anteriormente.
Mas, pelo menos no Firefox, com a seguinte magia:
Anexar a declaração do filtro em linha , com javascript, após o carregamento do DOM .
fonte