带动画的 CSS 下拉菜单(无 js)

Posted

技术标签:

【中文标题】带动画的 CSS 下拉菜单(无 js)【英文标题】:CSS Dropdown menu with animation (no js) 【发布时间】:2013-05-01 13:32:14 【问题描述】:

尝试使用 CSS 动画创建动画下拉菜单,无需任何 JS。以为我一直在吠叫正确的树,但看不到我哪里出错了,对于这个简化的菜单项......

<div class="menu">Menu Item
    <ul>
        <li>Dropdown 1</li>
        <li>Dropdown 2</li>
        <li>Dropdown 3</li>
        <li>Dropdown 4</li>
        <li>Dropdown 5</li>
    </ul>
</div>

还有下面的CSS;

.menu ul 
    height: 0px;
    overflow: hidden;
    -webkit-transition: all 0.5s ease-in-out;
    -moz-transition: all 0.5s ease-in-out;
    -o-transition: all 0.5s ease-in-out;
    transition: all 0.5s ease-in-out;


.menu:hover ul 
    height: auto;

认为应该成功地导致 div 向下滚动,但它只是不断出现。有什么想法吗?干杯

【问题讨论】:

可以看一个例子...jsfiddle.net/Sm9pU CSS transition height: 0; to height: auto;的可能重复 【参考方案1】:

请参阅此主题以供参考:How can I transition height: 0; to height: auto; using CSS?

简单地说,你不能为height: auto;制作动画。不支持。如果您有一个预先确定的固定高度,您可以通过为该特定值设置动画来实现。例如 0px 到 100px。但是不支持自动。

上面链接中的第一个答案链接到另一篇文章,其中给出了一种解决方法。您可以探索它以在您的网站上实施。

Can you use CSS3 to transition from height:0 to the variable height of content?

【讨论】:

啊,没想到,想远离 js 以减少你在旧电脑和移动设备上得到的那种颤抖效果。猜猜我可能会坚持转换到预先计算的高度,公平地说,考虑到每个 li 都有固定的高度,这应该不难计算。为此干杯! 一点也不难,当然也足够了。如果您动态加载导航,则计算该高度会变得很麻烦,一旦您修改导航,就会弄乱您的计算。理想情况下,您不必手动更改该值。但是,如果您的导航预计不会发生太大变化,我认为大多数人都可以忍受这个问题。【参考方案2】:

您不能将 CSS 过渡与 height:auto 一起使用,只能使用特定值。

.menu:hover ul 
    height: 100px;

http://jsfiddle.net/mblase75/cWZMu/

【讨论】:

为此干杯,正如我上面所说,可能只是要遵循这个建议【参考方案3】:

下拉菜单的动画可以用纯 CSS 实现:

ul 
  overflow: hidden;
  transition: all .3s ease;


ul.folded 
  max-height: 0;


ul.unfolded 
  max-height: 300px; //value of max-height should always bigger than actual sum of all li's height

【讨论】:

【参考方案4】:

我能够构建类似于@artcher 的解决方案,但我使用了max-height: 100%;,并且效果很好:

ul.submenu 
  overflow: hidden;
  transition: all .3s ease;
  max-height: 0;


.top-level-item:hover 
  .submenu 
    max-height: 100%;
  

【讨论】:

不,你不能用最大高度为 0 -> 100% 设置动画。你确定这个答案?你能提供一个 Codepen 或同化吗?

以上是关于带动画的 CSS 下拉菜单(无 js)的主要内容,如果未能解决你的问题,请参考以下文章

求助,css下拉菜单怎么设置能默认显示第一条

js+css+html制作下拉菜单

只用CSS能否制作可以收缩的下拉菜单

vue+css动画实现下拉菜单上、下箭头切换

css js 下拉菜单会突然消失之谜

用原生JS实现的一个导航下拉菜单,下拉菜单的宽度与浏览器视口的宽度一样(js+html+css)