关键帧动画在内部 Div 页面加载时不起作用

Keyframe Animation Not Working On Inner-Div On Page Load

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

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 向上滑动并取代它的位置,这就是为什么我假设容器 [=51] =] 是必要的。

我还能做些什么来使动画一次应用于子 div 吗? 是否有关于关键帧的东西阻止了 inner-divs 上的动画?用 JavaScript 做这个更好吗?

Link to JSFiddle

一开始可能看起来很奇怪,但您的样式表中有错字。 您声明 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>