从显示屏向下滑动动画:无显示:阻止?

APA*_*AD1 21 html javascript css jquery css-transitions

有没有办法动画显示:无显示:阻止使用CSS,以便隐藏的div滑下而不是突然出现,或者我应该采取不同的方式?

HTML:

<div id="box">
    Initial Content
    <div class="hidden">
        This is hidden content
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS:

#box {
    height:auto;
    background:#000;
    color:#fff;
    cursor:pointer;
}
.hidden {
    height:200px;
    display:none;
}
    .hidden.open {
        display:block;
    }
Run Code Online (Sandbox Code Playgroud)

这是我的脚本:

$(document).ready(function() {
    $('#box').click(function() {
        $(this).find(".hidden").toggleClass('open');
    });
});
Run Code Online (Sandbox Code Playgroud)

还有一个JSFiddle

sin*_*ake 27

是的,有一种方法: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;
}
Run Code Online (Sandbox Code Playgroud)

更多这里:向下滑动div单击Pure CSS?

  • 这不能回答动画显示的原始问题:无显示:块.这对于可访问性非常重要,确保隐藏内容不在选项卡索引等中... (8认同)
  • 但是您需要知道高度才能制作动画。而你在 css 里面并不知道它。 (3认同)

bha*_*lin 8

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

还有slideToggle().

然后,您不需要手动执行所有特定于浏览器的转换css.


Web*_*r G 6

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

我发现这对我有用:

$(this).find('.p').stop().css('display','block').hide().slideDown();
Run Code Online (Sandbox Code Playgroud)

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


Nur*_*uda 6

我们可以使用visibility: hiddentovisibility: visible来代替display: nonetodisplay: block属性。并且使用max-height而不hight应该保持元素具有自动高度。

看这个例子:

function toggleSlide () {
  const div = document.querySelector('div')
  
  if (div.classList.contains('open')) {
    div.classList.remove('open')
  } else {
    div.classList.add('open')
  }
}
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
<div>
  <p>First paragraph</p>
  <p>Second paragraph</p>
</div>


<button
  onclick="toggleSlide()"
>
  toggle slide
</button>
Run Code Online (Sandbox Code Playgroud)