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

CSS不能淡出然后隐藏

  •  1
  • MyDaftQuestions  · 技术社区  · 8 年前

    我正在尝试制作一个css类和动画,这将使一个div(及其内容)淡出或移动,但最终,这个div将拥有 display:none visibility:hidden

    我的努力无效!我可以让它动画化,或者看起来像是被“移除”

    这个粗糙的例子说明了这个问题

    .hide {
    
        animation-name:fadeOut;
        animation-duration:1s;
        /*visibility: hidden;
        display: none;*/
    }
    
    @keyframes fadeOut {
        from {
            opacity: 1;
            margin-left: 0%;
        }
    
        to {
            opacity: 0;
            margin-left: -100%;
        }
    }
    <div class="hide">
        <div style="padding:20px;background:orange;">
            <div style="padding:5px;background:azure;">
                My content
            </div>
         </div>
    </div>

    我还尝试将CSS更新为

    to {
        opacity: 0;
        margin-left: -100%;
        visibility: hidden;
        display: none;
    }
    

    还有 https://jsfiddle.net/

    正如你所见,在CSS中,我已经注释掉了隐藏部分(尽管不透明使其隐藏)。

    是否可以应用淡出,然后更新 visibility display 不使用JavaScript?

    1 回复  |  直到 8 年前
        1
  •  7
  •   Jos van Weesel    8 年前

    添加 animation-fill-mode: forwards; 使正在设置动画的元素保持在最后一个(关键点) 框架 ,它不会重新开始,也不会刷新到开始。

    了解更多关于 animation-fill-mode .

    编写此动画的另一种方法:

    .hide {
      animation: fadeOut 1s forwards;
    }
    

    .hide {
        animation-name:fadeOut;
        animation-duration:1s;
        animation-fill-mode: forwards; /* added */
        /*visibility: hidden;
        display: none;*/
    }
    
    @keyframes fadeOut {
        from {
            opacity: 1;
            margin-left: 0%;
        }
    
        to {
            opacity: 0;
            margin-left: -100%;
            height: 0; /* added */
        }
    }
    <div class="hide">
      <div style="padding:20px;background:orange;">
        <div style="padding:5px;background:azure;">
          My content
        </div>
      </div>
    </div>
    
       <div>
     Other content
       </div>

    滚动条修复

    解决这个问题的可能办法 滚动条问题 就是用 margin: 0; (或无论初始保证金是多少):

    @keyframes fadeOut {
        0% {
            opacity: 1;
            margin-left: 0%;
        }
    
        99% {
            opacity: 0;
            margin-left: -100%;
            height: 0;
        }
        100% {
            opacity: 0;
            margin-left: 0; /* added */
            height: 0;
        }
    }