ホームページ >ウェブフロントエンド >CSSチュートリアル >SVG サブ要素をスケーリングすると「左上から飛んでくる」のはなぜですか?またその修正方法は何ですか?

SVG サブ要素をスケーリングすると「左上から飛んでくる」のはなぜですか?またその修正方法は何ですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-29 02:03:29806ブラウズ

Why does scaling an SVG sub-element make it

SVG サブ要素に関する CSS 変換元の問題

問題:

試行時SVG 内のサブ要素をスケールするには、transform-origin が SVG 全体の (0,0) 点に設定され、アニメーション化されたときにサブ要素が「左上から飛んでくる」ように見えます。

解決策:

アニメーション化されている特定のサブ要素を基準にして変換原点を設定するには、次の CSS ルールを追加します。

<code class="css">transform-box: fill-box;</code>

This変換がサブ要素の境界ボックスに相対的であることを保証し、その中心からスケールできるようにします。

更新された例:

<code class="css">@keyframes scaleBox {
  from {transform: scale(0);}
  to {transform: scale(1);}
}
#animated-box {
  transform-box: fill-box;
  animation: scaleBox 2s infinite;
}</code>
<code class="html"><svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" style="
        width: 195px;
    ">
    <defs>
    <style>.cls-1{fill:#7f7777;}.cls-2{fill:#fff;}
</style>
    </defs>
    <rect class="cls-1" x="0.5" y="0.5" width="99" height="99"></rect>
    <path d="M99,1V99H1V1H99m1-1H0V100H100V0Z"></path>
    <rect id="animated-box" class="cls-2" x="10.5" y="8.5" width="22" height="6"></rect>
</svg></code>

説明:

transform-b​​ox プロパティは、要素のどの部分を変換原点の計算に使用するかを決定します。 fill-box に設定すると、親 SVG の座標空間ではなく、サブ要素の境界ボックスを使用して原点が計算されます。

以上がSVG サブ要素をスケーリングすると「左上から飛んでくる」のはなぜですか?またその修正方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。