代码之家  ›  专栏  ›  技术社区  ›  me_digvijay

单独指定属性时,CSS动画的工作方式不同

  •  0
  • me_digvijay  · 技术社区  · 5 年前

    我有以下用于设置两个独立元素动画的CSS:

    .loading-icon,
    .loading-icon-2{
      height: 50px;
      position: relative;
      left: 50%;
      top: 30%;
      transform: translateXY(-50%, 50%);
    }
    
    .loading-icon {
      display: flex;
      border: 16px solid #f3f3f3; /* Light grey */
      border-top: 16px solid #3498db; /* Blue */
      border-radius: 50%;
      width: 60px;
      height: 60px;
      text-align: center;
      animation-name: spin;
      animation-duration: 2s;
      transition-timing-function: linear;
      animation-iteration-count: infinite;
      animation: spin 2s linear infinite;
    }
    
    .loading-icon-2 {
      display: flex;
      border: 16px solid #f3f3f3; /* Light grey */
      border-top: 16px solid #3498db; /* Blue */
      border-radius: 50%;
      width: 60px;
      height: 60px;
      text-align: center;
      animation-name: anotherspin;
      animation-duration: 2s;
      transition-timing-function: linear;
      animation-iteration-count: infinite;
    }
    
    .loading-icon div,
    .loading-icon-2 div {
      margin: auto;
    }
    
    @keyframes spin {
      0% { transform: rotate(0deg); }
      100% { transform: rotate(360deg); }
    }
    
    @keyframes anotherspin {
      0% { transform: rotate(0deg); }
      100% { transform: rotate(360deg); }
    }
    

    唯一的区别是 loading-icon-2 类所有动画属性都是单独指定的,而不是使用速记样式。

    但这两种元素的行为都不同。有人能帮我理解为什么会发生这种事吗?或者我是不是错过了什么。 请参阅此处的代码 CodePen .

    1 回复  |  直到 5 年前
        1
  •  3
  •   Andy Hoffman    5 年前

    区别在于你使用的是 transition-timing-function: linear 而不是 animation-timing-function: linear . 但是,当您使用速记时,它隐式地使用了正确的属性名,使动画看起来连续而不容易。