【问题标题】:Bootstrap Collapse on a Panel, padding causes "jump"面板上的引导折叠,填充导致“跳转”
【发布时间】:2017-03-15 00:15:14
【问题描述】:

我将折叠行为应用于面板元素,它确实有效,但由于应用于.panel-body 的填充,动画在填充处停止,然后立即捕捉到高度。您可以在 codepen 中最基本的示例中看到这种情况:http://codepen.io/FiveSixTwo/pen/NRQLPo

<div class="container">
  <div class="panel panel-default">
    <div class="panel-heading" role="button" data-target="#test" data-toggle="collapse">Test Heading<span class="btn-collapse-header glyphicons glyphicons-chevron-up"></span></div>
    <div id="test" class="panel-body collapse in" aria-expanded="true">
      <p>Laoreet ac, aliquam sit amet justo nunc tempor, metus vel placerat suscipit, orci nisl iaculis eros, a tincidunt nisi odio eget lorem nulla condimentum tempor mattis ut vitae feugiat augue cras ut metus a risus iaculis scelerisque eu ac ante fusce
        non varius purus aenean nec magna felis fusce vestibulum.</p>
      <p>Laoreet ac, aliquam sit amet justo nunc tempor, metus vel placerat suscipit, orci nisl iaculis eros, a tincidunt nisi odio eget lorem nulla condimentum tempor mattis ut vitae feugiat augue cras ut metus a risus iaculis scelerisque eu ac ante fusce
        non varius purus aenean nec magna felis fusce vestibulum.</p>
      <p>Laoreet ac, aliquam sit amet justo nunc tempor, metus vel placerat suscipit, orci nisl iaculis eros, a tincidunt nisi odio eget lorem nulla condimentum tempor mattis ut vitae feugiat augue cras ut metus a risus iaculis scelerisque eu ac ante fusce
        non varius purus aenean nec magna felis fusce vestibulum.</p>
    </div>
  </div>
</div>

半解:

.panel-body {
  padding: 0;
  p {
    padding: 15px 15px 0;
    &:last-of-type { padding-bottom: 15px; }
  }
}

这是一个“半解决方案”,因为如果没有大量额外的 CSS 来覆盖默认填充而不破坏布局,它就无法在我的整个应用程序中运行。

理想情况下,我希望保持.panel-body 上的填充,并让折叠动画顺利播放,而不会在动画的开头和结尾出现不和谐的高度变化。

我用笔将解决方案 CSS 注释掉,以便您查看问题。

我想最简单的做法是将所有内容放在另一个带有填充的 div 中,但这并不比半解决方案好多少。我更喜欢全局 CSS 甚至 JS 解决方案,但到目前为止我还没有想出任何东西。

Bootstrap 对于某些事情来说很好,但我使用它的次数越多,我的应用程序越大,我就越讨厌它。

【问题讨论】:

    标签: jquery twitter-bootstrap css collapse


    【解决方案1】:

    http://codepen.io/anon/pen/QKeZea

    我认为它不起作用,因为您缺少包裹面板的div.panel-group。

    使用手风琴语法http://getbootstrap.com/javascript/#collapse-example-accordion

    <div class="container">
      <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
      <div class="panel panel-default">
        <div class="panel-heading" role="tab" id="headingOne">
          <h4 class="panel-title">
            <a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
              Collapsible Group Item #1
            </a>
          </h4>
        </div>
        <div id="collapseOne" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingOne">
          <div class="panel-body">
                  <p>Laoreet ac, aliquam sit amet justo nunc tempor, metus vel placerat suscipit, orci nisl iaculis eros, a tincidunt nisi odio eget lorem nulla condimentum tempor mattis ut vitae feugiat augue cras ut metus a risus iaculis scelerisque eu ac ante fusce
            non varius purus aenean nec magna felis fusce vestibulum.</p>
          <p>Laoreet ac, aliquam sit amet justo nunc tempor, metus vel placerat suscipit, orci nisl iaculis eros, a tincidunt nisi odio eget lorem nulla condimentum tempor mattis ut vitae feugiat augue cras ut metus a risus iaculis scelerisque eu ac ante fusce
            non varius purus aenean nec magna felis fusce vestibulum.</p>
          <p>Laoreet ac, aliquam sit amet justo nunc tempor, metus vel placerat suscipit, orci nisl iaculis eros, a tincidunt nisi odio eget lorem nulla condimentum tempor mattis ut vitae feugiat augue cras ut metus a risus iaculis scelerisque eu ac ante fusce
            non varius purus aenean nec magna felis fusce vestibulum.</p>
          </div>
        </div>
      </div>  
    </div>
    </div>
    

    【讨论】:

    • 谢谢!这样就解决了问题。尽管我讨厌不得不返回整个应用程序并添加标记,但我想这是唯一可行的方法。我将添加一个带有填充的 div,因为这样会减少标记并且看起来效果很好。
    • 我仍在努力。了解为什么会发生这种情况将帮助我找到更好的解决方案。我仍然更喜欢 JS 解决方案而不是添加标记。 TIA。
    • @sinrise 我很确定发生这种情况的原因是 bootstrap 的 javascript 期望某个您没有提供的 DOM 结构。
    • 谢谢。这很明显,但并没有真正解决问题的根源。我试图弄清楚为什么它很重要,结构是什么,什么时候填充是问题。
    猜你喜欢
    • 2013-09-28
    • 2014-11-26
    • 2015-03-29
    • 2023-03-18
    • 2014-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多