Heim  >  Artikel  >  Web-Frontend  >  Warum führt die Skalierung eines SVG-Unterelements dazu, dass es „von links oben einfliegt“ und wie lässt sich das Problem beheben?

Warum führt die Skalierung eines SVG-Unterelements dazu, dass es „von links oben einfliegt“ und wie lässt sich das Problem beheben?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-29 02:03:29720Durchsuche

Why does scaling an SVG sub-element make it

CSS-Transformationsursprungsproblem bei SVG-Unterelementen

Problem:

Beim Versuch Um ein Unterelement innerhalb einer SVG-Datei zu skalieren, wird der Transformationsursprung auf den (0,0)-Punkt der gesamten SVG-Datei gesetzt, was dazu führt, dass das Unterelement bei der Animation so aussieht, als würde es „von oben links hineinfliegen“.

Lösung:

Um den Transformationsursprung relativ zu dem spezifischen Unterelement festzulegen, das animiert wird, fügen Sie die folgende CSS-Regel hinzu:

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

Dies stellt sicher, dass die Transformation relativ zum Begrenzungsrahmen des Unterelements ist, sodass es von seiner Mitte aus skaliert werden kann.

Aktualisiertes Beispiel:

<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>

Erklärung:

Die Transformationsbox-Eigenschaft bestimmt, welcher Teil eines Elements zur Berechnung des Transformationsursprungs verwendet wird. Wenn Sie es auf „fill-box“ setzen, wird der Ursprung anhand des Begrenzungsrahmens des Unterelements anstelle des Koordinatenraums der übergeordneten SVG-Datei berechnet.

Das obige ist der detaillierte Inhalt vonWarum führt die Skalierung eines SVG-Unterelements dazu, dass es „von links oben einfliegt“ und wie lässt sich das Problem beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn