html - 如何在比例动画中保持原点在图像中心?

标签 html css css-animations css-transforms

我遇到的情况与此fiddle类似,在这里,我有一个CSS3动画,该动画可缩放绝对位于另一个元素中心的元素。但是,发生动画时,动画会偏离中心,如本例中红色方块相对于蓝色方块所示。如何居中?我已经尝试过围绕transform-origin属性进行一些配置,但这无法产生正确的结果。

代码如下:

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

最佳答案

问题是您要擦除translate转换。

指定新的转换(动画中的转换)时,它会覆盖第一个转换,因此您需要将它们添加到相同的transform属性中。在您的情况下,您要删除固定中心对齐的平移:



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





更新

如前所述,最好使用其他方法将元素居中,而不要使用平移以避免更改动画,因为这可以与其他元素一起使用。

关于html - 如何在比例动画中保持原点在图像中心?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58274661/

相关文章:

javascript - Ajax没有得到php结果的响应

php - echo 背景图像内联样式不显示

jquery - Firefox 不会将样式应用于通过 Ajax 加载的内容(使用 AngularJS)

html - 使用线性渐变作为背景的响应式闪耀动画

javascript - 将一些 Javascript 放在单独的文件中?

html - 类后元素的选择器

html - 标题的差距是多少?

CSS 位置 :fixed is working for the header but not for the footer

javascript - 通过 JavaScript 动态创建 CSS 关键帧动画

javascript - 将鼠标悬停在不同的元素上时,CSS3 动画开始了吗?