Wie behalte ich den Ursprung in der Bildmitte in der Maßstabsanimation?

Lesezeit: 4 Minuten

Wie behalte ich den Ursprung in der Bildmitte in der
annikam

Ich habe eine ähnliche Situation wie diese Geige, wo ich eine CSS3-Animation habe, die ein Element skaliert, das absolut in der Mitte eines anderen Elements positioniert ist. Wenn die Animation jedoch stattfindet, ist sie außermittig, wie in dem Beispiel durch die roten Quadrate relativ zu Blau zu sehen ist. Wie zentriere ich es? Ich habe ein paar Konfigurationen in der Umgebung ausprobiert transform-origin -Eigenschaft, aber dies führt nicht zu den richtigen Ergebnissen.

@keyframes ripple_large {
	0% {transform:scale(1); }
	75% {transform:scale(3); opacity:0.4;}
	100% {transform:scale(4); opacity:0;}
}

.container {
  position: relative;
	display: inline-block;
  margin: 10vmax;
}

.cat {
  height: 20vmax;
}

.center-point {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  height: 10px;
  width: 10px;
  background: blue;
}

.to-animate {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  border: 1px solid red;
  height: 5vmax;
  width: 5vmax;
  transform-origin:center;
}

.one {
		animation: ripple_large 2s linear 0s infinite;
}

.two {
		animation: ripple_large 2s linear 1s infinite;
}
<div class="container">
  <img src="http://www.catster.com/wp-content/uploads/2017/08/Pixiebob-cat.jpg" class="cat">
  <div class="center-point">
  </div>
  <div class="to-animate one"></div>
  <div class="to-animate two"></div>
</div>

1647267726 994 Wie behalte ich den Ursprung in der Bildmitte in der
Temani Afif

Das Problem ist, dass Sie die überschreiben translate Transformation.

Wenn Sie eine neue Transformation (die in der Animation) angeben, wird sie überschreiben der erste. In deinem Fall du entfernen die Übersetzung das fixiert die Center Ausrichtung.

Sie müssen sie dem gleichen hinzufügen transform Eigenschaft und achten Sie auf die Reihenfolge, weil es wichtig ist (Warum ist die Reihenfolge der Transformationen wichtig? Drehen/Skalieren ergibt nicht das gleiche Ergebnis wie Skalieren/Drehen)

@keyframes ripple_large {
  0% {
    transform: translate(-50%, -50%) scale(1);
  }
  75% {
    transform: translate(-50%, -50%) scale(3);
    opacity: 0.4;
  }
  100% {
    transform: translate(-50%, -50%) scale(4);
    opacity: 0;
  }
}

.container {
  position: relative;
  display: inline-block;
  margin: 10vmax;
}

.cat {
  height: 20vmax;
}

.center-point {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  height: 10px;
  width: 10px;
  background: blue;
  transform-origin: center;
}

.to-animate {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  border: 1px solid red;
  height: 5vmax;
  width: 5vmax;
}

.one {
  -webkit-animation: ripple_large 2s linear 0s infinite;
  animation: ripple_large 2s linear 0s infinite;
}

.two {
  -webkit-animation: ripple_large 2s linear 1s infinite;
  animation: ripple_large 2s linear 1s infinite;
}
<div class="container">
  <img src="http://www.catster.com/wp-content/uploads/2017/08/Pixiebob-cat.jpg" class="cat">
  <div class="center-point">
  </div>
  <div class="to-animate one"></div>
  <div class="to-animate two"></div>
</div>

AKTUALISIEREN

Wie kommentiert, ist es besser, Ihr Element mit einer anderen Methode als der Übersetzung zu zentrieren, um eine Änderung der Animation zu vermeiden, da dies mit anderen Elementen verwendet werden kann.

Beispiel:

@keyframes ripple_large {
  0% {
    transform: scale(1) ;
  }
  75% {
    transform:scale(3) ;
    opacity: 0.4;
  }
  100% {
    transform: scale(4) ;
    opacity: 0;
  }
}

.container {
  position: relative;
  display: inline-block;
  margin: 10vmax;
}

.cat {
  height: 20vmax;
}

.center-point {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  height: 10px;
  width: 10px;
  background: blue;
  transform-origin:center;
}

.to-animate {
  position: absolute;
  top: 0;
  left: 0;
  bottom:0;
  right:0;
  margin:auto;
  border: 1px solid red;
  height: 5vmax;
  width: 5vmax;
}

.one {
  animation: ripple_large 2s linear 0s infinite;
}

.two {
  animation: ripple_large 2s linear 1s infinite;
}
<div class="container">
  <img src="http://www.catster.com/wp-content/uploads/2017/08/Pixiebob-cat.jpg" class="cat">
  <div class="center-point">
  </div>
  <div class="to-animate one"></div>
  <div class="to-animate two"></div>
</div>

  • Entweder das oder benutze (in diesem speziellen Fall) margin um das Element zu zentrieren, da die width/height sind repariert. Falls sie die behalten wollen keyframes agnostisch gegenüber dem Element, dass es angewendet wird.

    – Gabriele Petrioli

    14. Dezember 2017 um 19:44 Uhr


  • @GabyakaG.Petrioli ja sicher 😉 Ich habe mich auf die Art und Weise konzentriert, wie sie überschrieben werden, und sie zur Animation hinzugefügt, um sie zu zeigen. Aber ich stimme zu, dass es besser ist, die Ausrichtung auf andere Weise zu beheben 🙂

    – Temani Afif

    14. Dezember 2017 um 19:46 Uhr

  • Ich bin mir nicht sicher, ob mein Vorschlag wirklich besser ist, ich wollte nur eine alternative Lösung erwähnen.

    – Gabriele Petrioli

    14. Dezember 2017 um 19:53 Uhr

  • @GabyakaG.Petrioli Ich denke im Allgemeinen ist es besser, da wir zum Beispiel den Fall in Betracht ziehen können, in dem wir eine externe Bibliothek verwenden, die beim Transformieren Animationen hinzufügt, und in diesem Fall können wir die Animation nicht ändern und es ist besser, das CSS unseres Elements zu ändern.

    – Temani Afif

    14. Dezember 2017 um 19:56 Uhr

1001930cookie-checkWie behalte ich den Ursprung in der Bildmitte in der Maßstabsanimation?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy