2017-05-03 5 views
1

私はイラストレーターからSVGにエクスポートした形をしています。背景はありません。これがPNGの場合、影を設定することができましたが、形状から開始しますが、SVGに影を設定すると、不可視のボックスに適用される形状には適用されません。ここでCSSシャドウをsvgボックスに適用

は、私が何を意味するか示すための例です:

私は影がちょうど形状に適用させるにはどうすればよい

body{ 
 
    background-color: #000; 
 
} 
 

 
.oval{ 
 
    width: 500px; 
 
    box-shadow: 10px 10px 20px #fff; 
 
} 
 

 
img{ 
 
    margin: 50px; 
 
}
<img class="oval" src="http://gdurl.com/4EiW" alt="oval" />

+0

は、画像を変更し、イメージファイル自体にドロップシャドウを設定します。 feGaussianBlurとfeOffset要素を使用してSVG影を設定する必要があるかもしれません。 –

答えて

2

SVG影使用する正しい方法:

<svg width="500" height="200" xmlns="http://www.w3.org/2000/svg"> 
 
    <defs> 
 
    <filter id="shadow"> 
 
     <feDropShadow dx="4" dy="8" stdDeviation="4"/> 
 
    </filter> 
 
    </defs> 
 

 
    <ellipse cx="200" cy="80" rx="100" ry="50" 
 
     style="fill:blue; filter:url(#shadow);"/> 
 
</svg>

アップデートを!アニメーションSVG:

body { 
 
    background: #E75B47; 
 
    background-image: -webkit-linear-gradient(-89deg, rgba(255,255,255,0.10) 0%, rgba(0,0,0,0.00) 100%); 
 
    background-image: -moz-linear-gradient(-89deg, rgba(255,255,255,0.10) 0%, rgba(0,0,0,0.00) 100%); 
 
    background-image: -o-linear-gradient(-89deg, rgba(255,255,255,0.10) 0%, rgba(0,0,0,0.00) 100%); 
 
    background-image: linear-gradient(-89deg, rgba(255,255,255,0.10) 0%, rgba(0,0,0,0.00) 100%); 
 
    text-align: center; 
 
} 
 

 
.bolt { 
 
    fill: hsl(7, 50%, 38%); 
 
    filter: url(#bolt-inner-shadow); 
 
} 
 

 
.bolt.loading { 
 
    -webkit-animation: light-pulse 3s infinite; 
 
    -moz-animation: light-pulse 3s infinite; 
 
    animation: light-pulse 3s infinite; 
 
} 
 

 
@keyframes light-pulse { 
 
    1% { fill: hsl(7, 50%, 38%); } 
 
    50% { fill: hsl(7, 50%, 78%); } 
 
    100% { fill: hsl(7, 50%, 38%); } 
 
} 
 

 
@-webkit-keyframes light-pulse { 
 
    1% { fill: hsl(7, 50%, 38%); } 
 
    50% { fill: hsl(7, 50%, 78%); } 
 
    100% { fill: hsl(7, 50%, 38%); } 
 
} 
 

 
@-webkit-keyframes pulse { 
 
    1% { -webkit-transform: scale(0.7); } 
 
    25% { -webkit-transform: scale(1.1); } 
 
    45% { -webkit-transform: scale(0.9); } 
 
    63% { -webkit-transform: scale(1.05); } 
 
    79% { -webkit-transform: scale(0.95); } 
 
    100% { -webkit-transform: scale(1.0); } 
 
} 
 

 
@keyframes pulse { 
 
    1% { transform: scale(0.7); } 
 
    25% { transform: scale(1.1); } 
 
    45% { transform: scale(0.9); } 
 
    63% { transform: scale(1.05); } 
 
    79% { transform: scale(0.95); } 
 
    100% { transform: scale(1.0); } 
 
}
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="258px" height="437px" viewBox="0 0 258 437" version="1.1"> 
 
    <defs> 
 
    <filter id="bolt-inner-shadow"> 
 
     <feOffset dx="0" dy="0" /> 
 
     <feGaussianBlur 
 
     stdDeviation="8" 
 
     result="offset-blur" 
 
     /> 
 
     <feComposite 
 
     operator='out' 
 
     in='SourceGraphic' 
 
     in2='offset-blur' 
 
     result='inverse' 
 
     /> 
 
     <feFlood 
 
     flood-color='6B2C22' 
 
     flood-opacity='1' 
 
     result='color' 
 
     /> 
 
    
 
     <!-- Clip color inside shadow --> 
 
     <feComposite 
 
     operator='in' 
 
     in='color' 
 
     in2='inverse' 
 
     result='shadow' 
 
     /> 
 
    
 
     <!-- Put shadow over original object --> 
 
     <feComposite 
 
     operator='over' 
 
     in='shadow' 
 
     in2='SourceGraphic' 
 
     /> 
 
    </filter> 
 
    </defs> 
 
    <path d="M12 240.2 L221.733736 6 L165.795158 192.5 L245.547254 191.8 L35.813518 426 L91.7520965 239.5 Z M12 240.2" class="bolt loading"> 
 
</svg>

+0

私はこれが唯一の方法だと思います。私はCSSでアニメーション化したいと考えていましたが、これは単純なシャドウアニメーションの複雑さを増やしています。私はsvgアニメーションを知らないためです。残念ながら、私はこの場合PNGにフォールバックする必要があると思います。ご協力いただきありがとうございます。 – Guerrilla

+0

私はそれをアニメートする方法を見つける場合、歓迎です♥ –

+0

@Guerrilla私はそれを見て私の答えを更新しました:) –

関連する問題