【问题标题】:Keyframe Animation Not Working On Inner-Div On Page Load页面加载时,关键帧动画在 Inner-Div 上不起作用
【发布时间】:2020-06-04 17:29:16
【问题描述】:

我正在尝试使用这个问题的解决方案:

css3 transition animation on load?

我的 HTMLCSS 有以下内容:

@keyframes slideInFromRight {
    0% {
      transform: translateX(100%);
    }
    100% {
      transform: translateX(0);
    }
}

.announcements-container {
    position: fixed;
    top: 80px;
    right: 20px;
    z-index: 1001;
    display: flex;
    flex-direction: column;
    width: 300px;
    /* animation: 1s ease-out 0s 1 slideInFromRight; */
}

.announcments-1 {
    animation: 1s ease-out 0s 1 slideInFromRight;
}

.announcements-2 {
    margin-top: 15px;
}

.annoucements-header {
    background-color: #1481C3;
    color: #ffffff;
    font-family: "Proxima Nova Bold";
    padding: 7px 10px;
}

.annoucements-close {
    position: absolute;
    right: 5px;
    width: 24px;
    height: 36px;
    cursor: pointer;
    opacity: .85;
}
.annoucements-close:hover {
    opacity: 1;
}
.annoucements-close::before,
.annoucements-close::after {
    content: '';
    width: 24px;
    height: 2px;
    background: white;
    position: absolute;
    top: 7px;
    left: 0;
}
.annoucements-close::before {
    transform: rotate(-45deg);
}
.annoucements-close::after {
    transform: rotate(45deg);
}
<body>
<div class="announcements-container">
    <div class="announcements-1">
      <div class="annoucements-header">
        <span class="annoucement-type-quantity">2 School Announcements</span>
        <i class="annoucements-close"></i>
      </div>
    </div>
    <div class="announcements-2">
      <div class="annoucements-header">
        <span class="annoucement-type-quantity">1 Admin Annoucement</span>
        <i class="annoucements-close"></i>
      </div>
    </div>
  </div>
</body>

如您所见,当 animation: 1s ease-out 0s 1 slideInFromRight; 应用于内部 div 时,它不会做任何事情。但是,当应用于容器 div 时,它确实有效:

@keyframes slideInFromRight {
    0% {
      transform: translateX(100%);
    }
    100% {
      transform: translateX(0);
    }
}

.announcements-container {
    position: fixed;
    top: 80px;
    right: 20px;
    z-index: 1001;
    display: flex;
    flex-direction: column;
    width: 300px;
    animation: 1s ease-out 0s 1 slideInFromRight;
}

.announcments-1 {
    /*animation: 1s ease-out 0s 1 slideInFromRight;*/
}

.announcements-2 {
    margin-top: 15px;
}

.annoucements-header {
    background-color: #1481C3;
    color: #ffffff;
    font-family: "Proxima Nova Bold";
    padding: 7px 10px;
}

.annoucements-close {
    position: absolute;
    right: 5px;
    width: 24px;
    height: 36px;
    cursor: pointer;
    opacity: .85;
}
.annoucements-close:hover {
    opacity: 1;
}
.annoucements-close::before,
.annoucements-close::after {
    content: '';
    width: 24px;
    height: 2px;
    background: white;
    position: absolute;
    top: 7px;
    left: 0;
}
.annoucements-close::before {
    transform: rotate(-45deg);
}
.annoucements-close::after {
    transform: rotate(45deg);
}
<body>
<div class="announcements-container">
    <div class="announcements-1">
      <div class="annoucements-header">
        <span class="annoucement-type-quantity">2 School Announcements</span>
        <i class="annoucements-close"></i>
      </div>
    </div>
    <div class="announcements-2">
      <div class="annoucements-header">
        <span class="annoucement-type-quantity">1 Admin Annoucement</span>
        <i class="annoucements-close"></i>
      </div>
    </div>
  </div>
</body>

但问题在于,我希望 div 一个接一个地依次滑入。如果我“X”出顶部 div,我希望第二个 div 向上滑动并取而代之,这就是为什么我假设容器 div 是必要的。

我还能做些什么来使动画一次应用于子 div 吗? 是否有一些关键帧会阻止内部 div 上的动画?用 JavaScript 做这件事会更好吗?

Link to JSFiddle

【问题讨论】:

    标签: html css css-animations keyframe


    【解决方案1】:

    一开始可能看起来很奇怪,但您的样式表中有一个错字。 您声明 announcements-1 但使用 announcments-1 设置样式的位置

    所以做对了就会得到你想要的:

    @keyframes slideInFromRight {
      0% {
        transform: translateX(100%);
      }
      100% {
        transform: translateX(0);
      }
    }
    
    .announcements-container {
      position: fixed;
      top: 80px;
      right: 20px;
      z-index: 1001;
      display: flex;
      flex-direction: column;
      width: 300px;
      /*animation: 1s ease-out 0s 1 slideInFromRight;*/
    }
    
    .announcements-1 {
      animation: 1s ease-out 0s 1 slideInFromRight;
    }
    
    .announcements-2 {
      margin-top: 15px;
    }
    
    .annoucements-header {
      background-color: #1481C3;
      color: #ffffff;
      font-family: "Proxima Nova Bold";
      padding: 7px 10px;
    }
    
    .annoucements-close {
      position: absolute;
      right: 5px;
      width: 24px;
      height: 36px;
      cursor: pointer;
      opacity: .85;
    }
    
    .annoucements-close:hover {
      opacity: 1;
    }
    
    .annoucements-close::before,
    .annoucements-close::after {
      content: '';
      width: 24px;
      height: 2px;
      background: white;
      position: absolute;
      top: 7px;
      left: 0;
    }
    
    .annoucements-close::before {
      transform: rotate(-45deg);
    }
    
    .annoucements-close::after {
      transform: rotate(45deg);
    }
    <body>
      <div class="announcements-container">
        <div class="announcements-1">
          <div class="annoucements-header">
            <span class="annoucement-type-quantity">2 School Announcements</span>
            <i class="annoucements-close"></i>
          </div>
        </div>
        <div class="announcements-2">
          <div class="annoucements-header">
            <span class="annoucement-type-quantity">1 Admin Annoucement</span>
            <i class="annoucements-close"></i>
          </div>
        </div>
      </div>
    </body>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-26
      • 2014-09-20
      • 2023-03-22
      相关资源
      最近更新 更多