当儿童手风琴边框重叠父边框时,如何扩展父CSS手风琴

时间:2018-03-25 12:14:58

标签: javascript jquery html css accordion

资源和上下文

https://jsfiddle.net/wwx100f8/69/

我正在努力创造一种可扩展/可折叠的手风琴来保存餐厅的食物选择,一种类似于Just-Eat或Hungry House的数字菜单。

使用W3Schools,我尝试使用Animated Accordion来制作这个数字食物菜单。 https://www.w3schools.com/howto/howto_js_accordion.asp

问题

正如您在我的代码中所看到的,我试图将<button class="accordion">“嵌套”在另一个代码中。

然而,嵌套的手风琴一旦消耗,就不会扩展它的父容器。 这导致儿童手风琴的内容被隐藏或中断。

在打开儿童手风琴后折叠父手风琴解决了这个问题。但这对用户来说不方便。

我认为我需要什么

我想我需要一些方法来设置css,以便手风琴容器适合儿童内容。它们似乎是固定的,直到被点击。

我也对任何关于我如何实现这个'数字菜单'的建议持开放态度。

我的示例代码

https://jsfiddle.net/wwx100f8/69/

var acc = document.getElementsByClassName("accordion");
var i;

for (i = 0; i < acc.length; i++) {
  acc[i].addEventListener("click", function() {
    this.classList.toggle("active");
    var panel = this.nextElementSibling;
    if (panel.style.maxHeight){
      panel.style.maxHeight = null;
    } else {
      panel.style.maxHeight = panel.scrollHeight + "px";
    }
  });
}
.accordion {
    background-color: #eee;
    color: #444;
    cursor: pointer;
    padding: 18px;
    width: 100%;
    border: none;
    text-align: left;
    outline: none;
    font-size: 15px;
    transition: 0.4s;
}

.active, .accordion:hover {
    background-color: #ccc;
}

.accordion:after {
    content: '\002B';
    color: #777;
    font-weight: bold;
    float: right;
    margin-left: 5px;
}

.active:after {
    content: "\2212";
}

.panel {
    padding: 0 18px;
    background-color: white;
    max-height: 0;
    overflow: hidden;
    transition: max-height 0.2s ease-out;
}
<button class="accordion">Section 1</button>
    <div class="panel">
      <p>The Text in Section 1</p>
      <button class="accordion">Section 2</button>
      <div class="panel">
        <p>The Text in Section 2</p>
      </div>
    </div>

1 个答案:

答案 0 :(得分:2)

而不是为max-height的{​​{1}}设置绝对值,请尝试将div.panel设置为max-heightlike this

然而,这样做会破坏你的动画,你可以切换到使用jquery进行动画(initial / .slideUp.slideToggle),这不会出现这个问题,或者尝试使用计时器的一些技巧:https://jsfiddle.net/wwx100f8/80/