html css css3 css-animations css-transforms

html - ¿Cómo mantener el origen en el centro de la imagen en la animación a escala?



css css3 (1)

Tengo una situación similar a este fiddle , donde tengo una animación CSS3 que escala un elemento en posición absoluta en el centro de otro elemento. Sin embargo, cuando la animación tiene lugar, está descentrada, como se ve por los cuadrados rojos en relación con el azul en el ejemplo. ¿Cómo lo centro? He intentado un par de configuraciones en torno a la propiedad de transform-origin , pero esto no produce los resultados correctos.

Código a continuación:

@-webkit-keyframes ripple_large { 0% {-webkit-transform:scale(1);} 75% {-webkit-transform:scale(3); opacity:0.4;} 100% {-webkit-transform:scale(4); opacity:0;} } @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 { -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; }


El problema es que está borrando la transformación de translate .

Cuando especifica una nueva transformación (la que está dentro de la animación), anula la primera, por lo que debe agregarlas en la misma propiedad de transform . En su caso, está eliminando la traducción que está arreglando la alineación central :

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

ACTUALIZAR

Como se comentó, es mejor centrar su elemento usando otro método que la traducción para evitar cambiar la animación, ya que esto se puede usar con otros elementos.