2015-12-17 4 views
5

私は、circle svg要素で簡単なパルスアニメーションを作成したいと考えています。私はtransform: scale(..,..)アニメーションを使用していますが、何らかの理由で単純に要素自体を拡大するのではなく、コンテナ内の円全体を動かしています。ここで 私の<circle>はどこに行きますか?

はアニメーションです:

animation: pulsate 2s infinite linear; 

@keyframes pulsate { 
    0% {transform: scale(0.1, 0.1); opacity: 0.0;} 
    50% {opacity: 1.0;} 
    100% {transform: scale(1.2, 1.2); opacity: 0.0;} 
} 

そして、ここで(望ましい結果を生成divに適用されたものと同じアニメーションを含む)の例です:

http://codepen.io/anon/pen/jWqVyb

作成する方法上の任意のアイデアこの効果は?円はsvgのどこにでも配置でき、この位置を維持する必要があります。

答えて

5

transform-origin propertyの値を変更する必要があります。この場合

、あなたが値50% 50%使用します。デフォルトでは

Updated Example

.beacon { 
    height: 100px; 
    width: 100px; 
    border-radius: 50%; 
    background: #fff; 
    box-shadow: 0px 0px 2px 2px #fff; 
    animation: pulsate 2s infinite linear; 
    transform-origin: 50% 50%; 
} 

を、値がsvg要素に0 0です。参考:

CSS Transforms Module - 8 The transform-origin Property

関連するCSSレイアウトボックスなしのSVG要素のデフォルト値は0 0です。あなたは適切な変換-起源を自分のサークルに追加する必要が

+0

グレートインフォメーション、私は変わっていません - 起源はsvgのために特別でした – aw04

+0

@ aw04ええ、私は完全には分からない*なぜ*。他のすべての要素のデフォルト値は '50%50%0'です。 –

+2

SVG仕様(CSSの前に定義されていた)は変換元の概念を持たず、スケーリングは非常に単純な行列である座標系全体をスケーリングするものとして定義されています。 CSSとSVGを一緒にメーリングすることは、標準の人にとっては難しい作業でした。 –

2

circle { 
    fill: #fff; 
    transform-origin: 50px 50px; 
} 

変換-起源をHTMLには、SVGのデフォルト値50% 50%;ではなく、を持っています。

関連する問題