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

隐藏第二个元素,直到第一个元素完成动画-CSS关键帧

  •  0
  • HappyHands31  · 技术社区  · 4 年前

    @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;
    }
    
    .announcements-1 {
        animation: 0.4s ease-out 0s 1 slideInFromRight;
      }
      
    .announcements-2 {
        margin-top: 15px;
        /* opacity: 0; */
        /* display: none; */
        /* animation-fill-mode: both; */
        animation: 0.4s ease-out 0s 1 slideInFromRight;
        animation-delay: 0.4s;
    }
    
    .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仍然显示,而第一个div从右侧滑入。我试着添加 animation-delay , transition-delay ,将延迟值更改为 0.4 排队 animation: 0.4s ease-out 0.4s 1 slideInFromRight;

    @keyframes slideInFromRight {
        0% {
          transform: translateX(100%);
        }
        100% {
          transform: translateX(0);
        }
    }
    
    @keyframes slideInFromRight2 {
        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;
    }
    
    .announcements-1 {
        animation: 0.4s ease-out 0s 1 slideInFromRight;
      }
      
    .announcements-2 {
        margin-top: 15px;
        /* opacity: 0; */
        /* display: none; */
        /* animation-fill-mode: both; */
        -webkit-animation: slideInFromRight2 0.4s ease-out 1s 1 normal;
        -moz-animation: slideInFromRight2 0.4ss ease-out 1s 1 normal;
        -o-animation: slideInFromRight2 0.4s ease-out 1s 1 normal;
        animation: slideInFromRight2 0.4s ease-out 1s 1 normal;
    }
    
    .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);
    }
    <车身>
    <div class=“公告容器”>
    <div class=“announces header”>
    <span class=“announcement type quantity”>2学校公告</span>
    <i class=“announces close”></i>
    </div>
    </div>
    <div class=“announces header”>
    <span class=“annoucement type quantity”>1管理公告</span>
    <i class=“announces close”></i>
    </div>
    </div>
    </body>

    Link to JSFiddle

    1 回复  |  直到 4 年前
        1
  •  1
  •   arnavpanwar99    4 年前

    对于这个问题,有一种纯CSS的方法,这种方法是首先对每个你想设置动画的元素,给出一个 opacity: 0 @keyframes 动画开始后,将其“不透明度”(opacity)设置为1。然后动画看起来像:

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

    并添加到要设置动画的每个元素 在css中 animation-fill-mode: forwards