最大高度的奇怪手风琴行为

Posted

技术标签:

【中文标题】最大高度的奇怪手风琴行为【英文标题】:Strange accordion behavior with max-height 【发布时间】:2016-01-24 16:38:58 【问题描述】:

我正在创建手风琴,但由于 height: 0height: auto 之间的过渡无法动画化,我找到了一种动画化 max-width 的方法 但是像你这样可以看到时间轴不好,在打开用户点击的那个之前,然后关闭其他的。 有办法解决吗?

.content
  overflow: hidden;
  max-height: 0;
  transition: all 1s;

.active .content
  max-height: 500px;

FIDDLE HERE

更新: 问题在于最大高度,因为特定高度就像魅力一样。

【问题讨论】:

您是否要让它们都可以同时打开? 这实际上是一个好问题。以前没有考虑过这个。 【参考方案1】:

删除

.removeClass

喜欢这个

$(document).ready(function()
$(".singleAccordion").on("click", function()
$(this).addClass("active").siblings("active");
);
);

【讨论】:

【参考方案2】:

你可以只使用 jQuery 的 sliedUp()slideDown():

$(document).ready(function()
    $(".singleAccordion").on("click", function()
        $(this).siblings().children(".content").slideUp();
        $(".content", this).slideDown();
    );
);

使用以下 CSS:

.content
  overflow: hidden;
  max-height: 500;
  display: none;


让我试着解释一下。

通常两个转换应该(几乎)同时运行。如果您将 max-height 替换为 height (在您的原始代码中),您可以看到实际情况确实如此。但是对于max-height,这似乎有所不同。我不知道为什么会出现这种情况,但我猜想可能很难推导出必须应用的实际高度,而其他转换在同一个 DOM 子树上运行,所以它是刚刚排队。

我将查看一些文档以了解其背后的原因。如果我找到更多的情报,会回来报告。


好吧,我挖得更深了。看起来实际高度的计算确实是个问题。使用上面的代码并将max-height: 500px 替换为max-height: 5000px。你会看到直到崩溃发生需要很长时间。现在把max-height: 50px 放在那里,它们似乎会同时发生。 也许这是因为它的动画仍然超出了实际需要的高度。很遗憾你 can't animate onto height: auto - 很可能是出于同样的原因。

【讨论】:

它看起来有效。但是能解释一下为什么我的方法不行吗? ps:如果可能的话,我更喜欢使用类,因为您可以添加更多动画 是的,给我一秒钟 感谢您的回复。所以我认为有两种解决方案。第一个:设置每个高度,然后为该高度设置动画或第二个:使用 slideUp 和 slideDown。 @dghez 你很受欢迎。如果您真的知道高度,最好还是直接使用高度(而不是最大高度):) 我没有。手风琴里面有一些文字,无法设置固定高度;)【参考方案3】:

只需使用 Jquery Ui Accordion。太棒了。 这里是JssFiddle

  <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>  

【讨论】:

是的,但我不想添加 jQuery UI。 哦! :) 。但这太棒了:)。

以上是关于最大高度的奇怪手风琴行为的主要内容,如果未能解决你的问题,请参考以下文章

Twitter Bootstrap 100% 高度手风琴“跳跃”

如何在反应中改变手风琴的高度?

使用带有奇怪标记的 jQuery 手风琴

如何让我的手风琴在所有菜单关闭的情况下加载?

Jquery手风琴高度溢出

手风琴高度问题中的WPF DataGrid