【问题标题】:Slide down animation from display:none to display:block?从显示向下滑动动画:无到显示:块?
【发布时间】:2014-08-10 11:15:12
【问题描述】:

有没有办法使用 CSS 为 display:none to display:block 设置动画,以便隐藏的 div 向下滑动而不是突然出现,或者我应该以不同的方式进行吗?

$(document).ready(function() {
    $('#box').click(function() {
        $(this).find(".hidden").toggleClass('open');
    });
});
#box {
    height:auto;
    background:#000;
    color:#fff;
    cursor:pointer;
}
.hidden {
    height:200px;
    display:none;
}
    .hidden.open {
        display:block;
    }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="box">
    Initial Content
    <div class="hidden">
        This is hidden content
    </div>
</div>

还有一个JSFiddle

【问题讨论】:

标签: javascript jquery html css css-transitions


【解决方案1】:

怎么样

$("#yourdiv").animate({height: 'toggle'});

Toggle 将打开/关闭您的 div,动画应使其从下方显示。在这种情况下,您不需要特定的 CSS 来“隐藏”它。

【讨论】:

    【解决方案2】:

    是的,有一种方法: http://jsfiddle.net/6C42Q/12/

    通过使用 CSS3 过渡,并操纵高度,而不是显示属性:

    .hidden {
        height: 0px;
        -webkit-transition: height 0.5s linear;
           -moz-transition: height 0.5s linear;
            -ms-transition: height 0.5s linear;
             -o-transition: height 0.5s linear;
                transition: height 0.5s linear;
    }
    
    .hidden.open {
         height: 200px;
         -webkit-transition: height 0.5s linear;
            -moz-transition: height 0.5s linear;
             -ms-transition: height 0.5s linear;
              -o-transition: height 0.5s linear;
                 transition: height 0.5s linear;
    }
    

    更多:Slide down div on click Pure CSS?

    【讨论】:

    • 不起作用。我尝试点击黑条(初始内容),但没有任何反应。
    • 这没有回答动画显示的原始问题:没有显示:块。这对于可访问性很重要,确保隐藏的内容不在选项卡索引等...
    • 当主类已经有了转场时,我们不需要给子类添加转场
    • 但是你需要知道高度才能做动画。而你在 css 中不知道它。
    【解决方案3】:

    由于您已经在使用 jQuery,最简单的方法就是使用 slideDown()。 http://api.jquery.com/slidedown/

    还有 slideToggle()。

    那么你就不需要手动做所有浏览器特定的过渡css了。

    【讨论】:

    • 我是手动构建的,因为我不知何故忽略了slideDown()。谢谢。
    【解决方案4】:

    你也可以使用

    $('#youDiv').slideDown('fast');
    

    或者你可以告诉活动的 div 上升然后被调用的 div 下降

    $('.yourclick').click(function(e) {
           var gett = $(this).(ID);
           $('.youractiveDiv').slideUp('fast', function(){
            $('.'+gett).slideDown(300);
           });
    });
    

    类似的东西。

    【讨论】:

      【解决方案5】:

      我喜欢 CSS 过渡的想法,但它仍然很跳跃。有时 max-height 必须设置为非常高的数字,因为动态内容会使过渡变得无用,因为它非常跳跃。所以,我又回到了 jQuery,但它也有自己的缺陷。内联元素很跳跃。

      我发现这对我有用:

      $(this).find('.p').stop().css('display','block').hide().slideDown();
      

      停止会停止之前的所有转换。 css 确保它被视为块元素,即使它不是。 hide 隐藏了该元素,但 jquery 会将其记住为块元素。 最后 slideDown 通过向下滑动来显示元素。

      【讨论】:

      • 谢谢!正是我要找的东西:) 我怎样才能把它滑回来?
      • 我猜可能使用 slideUp 而不是 slideDown。 $(this).find('.p').stop().css('display','block').hide().slideUp(); 或者你可以滑动切换? $(this).find('.p').stop().css('display','block').hide().slideToggle();
      • 谢谢!一个简单的.stop().slideUp() 完成了这项工作:)
      【解决方案6】:

      我们可以使用visibility: hiddenvisibility: visible 而不是display: nonedisplay: block 属性。

      看这个例子:

      function toggleSlide () {
        const div = document.querySelector('div')
        
        if (div.classList.contains('open')) {
          div.classList.remove('open')
        } else {
          div.classList.add('open')
        }
      }
      div {
        visibility: hidden;
        transition: visibility .5s, max-height .5s;
        max-height: 0;
        overflow: hidden;
        
        /* additional style */
        background: grey;
        color: white;
        padding: 0px 12px;
        margin-bottom: 8px;
      }
      
      div.open {
        visibility: visible;
        /* Set max-height to something bigger than the box could ever be */
        max-height: 100px;
      }
      <div>
        <p>First paragraph</p>
        <p>Second paragraph</p>
      </div>
      
      
      <button
        onclick="toggleSlide()"
      >
        toggle slide
      </button>

      【讨论】:

        【解决方案7】:

        我为我的 React 站点中的导航标题做了这个解决方法。

        这是常规的可见 css 类

        .article-header {
          position: fixed;
          top: 0;
          transition: top 0.2s ease-in-out;
        }
        

        这是附加到 div 的类(在我的情况下滚动时)

        .hidden {
          top: -50px !important;
          transition: top 0.5s ease-in-out;
         }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-10-20
          • 2013-11-14
          • 1970-01-01
          • 1970-01-01
          • 2019-06-14
          • 1970-01-01
          • 1970-01-01
          • 2017-03-17
          相关资源
          最近更新 更多