奇怪的手风琴行为和最大高度
奇怪的手风琴行为和最大高度
我正在创建一个手风琴效果,但由于在`height: 0`和`height: auto`之间的过渡无法进行动画,所以我尝试使用`max-width`进行动画效果。\n但是,如你所见,这种方式的时间轴不好,在打开用户点击的那个之前关闭其他的。\n有没有办法解决这个问题?\n
.content { overflow: hidden; max-height: 0; transition: all 1s; } .active .content { max-height: 500px; }
\n点击这里查看示例\n更新:
\n问题出在最大高度上,使用特定高度的时候效果很好。
奇怪的手风琴行为与最大高度有关
问题出现的原因是没有使用jQuery UI Accordion。
解决方法是使用jQuery UI Accordion,添加以下代码:
<head> <meta charset="utf-8"> <title>jQuery UI Accordion - Default functionality</title> <link rel="stylesheet" href="http://code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css"> <script src="http://code.jquery.com/jquery-1.10.2.js"></script> <script src="http://code.jquery.com/ui/1.11.4/jquery-ui.js"></script> </head> <body> <div id="accordion"> <h3>Part1</h3> <div> <p> 1 </p> </div> <h3>part2</h3> <div> <p> 2 </p> </div> <h3>Part3</h3> <div> <p> 3 </p> </div> <h3>Part4</h3> <div> <p> 4 </p> </div> </div> <script> $(function() { $( "#accordion" ).accordion(); }); </script> </body>
奇怪的手风琴行为与max-height的问题出现的原因可能是由于计算实际高度的问题。在使用max-height时,可能很难在同一DOM子树上同时运行其他过渡效果,并且将动画排队。这可能是因为在其他过渡效果运行时,很难推导出必须应用的实际高度。
解决这个问题的方法之一是将max-height替换为height,并设置一个固定的高度。这样可以确保过渡效果同时进行。但是,如果无法设置固定高度,可以使用jQuery的slideUp()和slideDown()方法来解决问题。
以下是一个使用jQuery和CSS的示例代码:
HTML代码:
Header 1Content 1Header 2Content 2
CSS代码:
.accordion-content { overflow: hidden; max-height: 0; transition: max-height 0.5s ease; } .accordion.active .accordion-content { max-height: 500px; }
JavaScript代码:
$(document).ready(function(){ $(".accordion-header").on("click", function(){ $(this).parent().toggleClass("active"); }); });
以上代码中,点击手风琴的标题时,会通过toggleClass()方法在手风琴的父元素上添加或移除active类。active类会将max-height设置为一个较大的值,从而展开手风琴内容,再次点击标题时则会收起内容。
这样,无论手风琴内容的高度是多少,都可以通过添加或移除active类来实现展开和收起的效果,而不需要计算实际高度。
希望这可以解决你的问题!