首页 文章

Bootstrap:展开其他部分时折叠

提问于
浏览
54

我正在制作一个Rails应用程序,并且正在尝试实现与Twitter的Bootstrap collapse相关的特定功能 . 当我解释它时,请耐心等待 .

我目前有以下观点:

enter image description here

单击每个按钮时,将展开其数据切换div . 视图设置如下:

<button class="btn dropdown" data-toggle="collapse" data-target="#keys"><i class="icon-chevron-right"></i> Keys <span class="badge badge-info pull-right"><%= @app.keys.count %></span></button>
    <button class="btn dropdown" data-toggle="collapse" data-target="#attrs"><i class="icon-chevron-right"></i> Attributes</button>
    <button class="btn dropdown" data-toggle="collapse" data-target="#edit"><i class="icon-chevron-right"></i> Edit Details</button>

    <div class="collapse indent" id="keys">
        <!--content-->
    </div>

    <div class="collapse indent" id="attrs">
        <!--content-->
    </div>

    <div class="collapse" id="edit">
        <!--content-->
    </div>

我有这样的设置,因为我想要按钮并排连续 . 如果我将按钮移动到视图正上方,它们会展开/折叠,然后按钮会叠加在一起 .

所以,我的最终目标是将三个按钮并排放置,让它们折叠并展开各自的部分 . 然而,目前的设置工作有点尴尬 . 例如,如果有人展开了“键”部分,然后展开了“属性”部分,则必须在“键”部分下方滚动 .

这个问题有两种可能的解决方案 . 一个是按下一个按钮会导致另一个按钮自行折叠 . 这意味着在任何给定时间,只扩展其中一个部分 .

更好的解决方案,我认为是这样,当键扩展时,右边的按钮向下移动到键div的底部,当属性展开时,编辑细节按钮移动到该div的底部 . 这可能吗?我已经尝试通过让按钮堆叠在一起并通过css改变它们的相对位置来做到这一点,但这不起作用,因为当其中一个部分被扩展时,其他按钮最终出现在尴尬的位置扩展部分的中间部分 .

最后,我想在没有twitter的引导页面上提到的手风琴风格行为的情况下尝试这样做,但是如果有人能够从设计的角度说服我更好,我肯定会重新考虑 .

10 回答

  • 1

    使用 data-parent ,第一个解决方案是坚持示例选择器架构

    <div id="myGroup">
        <button class="btn dropdown" data-toggle="collapse" data-target="#keys" data-parent="#myGroup"><i class="icon-chevron-right"></i> Keys  <span class="badge badge-info pull-right">X</span></button>
        <button class="btn dropdown" data-toggle="collapse" data-target="#attrs" data-parent="#myGroup"><i class="icon-chevron-right"></i> Attributes</button>
        <button class="btn dropdown" data-toggle="collapse" data-target="#edit" data-parent="#myGroup"><i class="icon-chevron-right"></i> Edit Details</button>
    
        <div class="accordion-group">
            <div class="collapse indent" id="keys">
                keys
            </div>
    
            <div class="collapse indent" id="attrs">
                attrs
            </div>
    
            <div class="collapse" id="edit">
                edit
            </div>
        </div>
    </div>
    

    Demo (jsfiddle)

    第二种解决方案是绑定事件并自己隐藏其他可折叠元素 .

    var $myGroup = $('#myGroup');
    $myGroup.on('show.bs.collapse','.collapse', function() {
        $myGroup.find('.collapse.in').collapse('hide');
    });
    

    Demo (jsfiddle)

    PS:演示中的奇怪效果是由示例的 min-height 设置引起的,只是忽略它 .


    编辑:将_1195714_中的JS事件更改为Bootstrap documentation中指定的 show.bs.collapse .

  • 2

    如果您不想更改标记,此功能可以解决问题:

    jQuery('button').click( function(e) {
        jQuery('.collapse').collapse('hide');
    });
    

    每当点击一个按钮时,所有部分都会折叠 . 然后bootstrap打开您选择的那个 .

  • 74

    如果您使用的是Bootstrap 4,并且您不想更改标记:

    var $myGroup = $('#myGroup');
    $myGroup.on('show.bs.collapse','.collapse', function() {
    $myGroup.find('.collapse.show').collapse('hide');
    });
    
  • 3

    Bootstrap 3 example with side by side buttons below the content

    .panel-heading {
      display: inline-block;
    }
    
    .panel-group .panel+.panel {
      margin: 0;
      border: 0;
    }
    
    .panel {
      border: 0 !important;
      -webkit-box-shadow: none !important;
      box-shadow: none !important;
      background-color: transparent !important;
    }
    
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    
    <!-- Latest compiled and minified CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
    
    <!-- Latest compiled and minified JavaScript -->
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
    
    
    <div class="panel-group" id="accordion">
        <div class="panel panel-default">
            <div id="collapse1" class="panel-collapse collapse in">
                <div class="panel-body">Lorem ipsum dolor sit amet, consectetur adipisicing elit,
            sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
            quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div>
            </div>
        </div>
        <div class="panel panel-default">
            <div id="collapse2" class="panel-collapse collapse">
                <div class="panel-body">Lorem ipsum dolor sit amet, consectetur adipisicing elit,
            sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
            quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div>
            </div>
        </div>
        <div class="panel panel-default">
            <div id="collapse3" class="panel-collapse collapse">
                <div class="panel-body">Lorem ipsum dolor sit amet, consectetur adipisicing elit,
            sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
            quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div>
            </div>
        </div>
    </div>
    <div class="panel-heading">
        <h4 class="panel-title">
            <a data-toggle="collapse" data-parent="#accordion" href="#collapse1">Collapsible Group 1</a>
        </h4>
    </div>
    <div class="panel-heading">
        <h4 class="panel-title">
            <a data-toggle="collapse" data-parent="#accordion" href="#collapse2">Collapsible Group 2</a>
        </h4>
    </div>
    <div class="panel-heading">
        <h4 class="panel-title">
            <a data-toggle="collapse" data-parent="#accordion" href="#collapse3">Collaple Group 3</a>
        </h4>
    </div>
    

    Bootstrap 3 example with side by side buttons above the content

    .panel-heading {
      display: inline-block;
    }
    
    .panel-group .panel+.panel {
      margin: 0;
      border: 0;
    }
    
    .panel {
      border: 0 !important;
      -webkit-box-shadow: none !important;
      box-shadow: none !important;
      background-color: transparent !important;
    }
    
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    
    <!-- Latest compiled and minified CSS -->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
    
    <!-- Latest compiled and minified JavaScript -->
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
    
    <div class="panel-heading">
        <h4 class="panel-title">
            <a data-toggle="collapse" data-parent="#accordion" href="#collapse1">Collapsible Group 1</a>
        </h4>
    </div>
    <div class="panel-heading">
        <h4 class="panel-title">
            <a data-toggle="collapse" data-parent="#accordion" href="#collapse2">Collapsible Group 2</a>
        </h4>
    </div>
    <div class="panel-heading">
        <h4 class="panel-title">
            <a data-toggle="collapse" data-parent="#accordion" href="#collapse3">Collaple Group 3</a>
        </h4>
    </div>
    <div class="panel-group" id="accordion">
        <div class="panel panel-default">
            <div id="collapse1" class="panel-collapse collapse in">
                <div class="panel-body">Lorem ipsum dolor sit amet, consectetur adipisicing elit,
            sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
            quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div>
            </div>
        </div>
        <div class="panel panel-default">
            <div id="collapse2" class="panel-collapse collapse">
                <div class="panel-body">Lorem ipsum dolor sit amet, consectetur adipisicing elit,
            sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
            quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div>
            </div>
        </div>
        <div class="panel panel-default">
            <div id="collapse3" class="panel-collapse collapse">
                <div class="panel-body">Lorem ipsum dolor sit amet, consectetur adipisicing elit,
            sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
            quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div>
            </div>
        </div>
    </div>
    
  • 0

    如果你坚持使用Bootstrap约定的HTML结构和适当的选择器,你应该没问题 .

    <div class="panel-group" id="accordion">
        <div class="panel panel-default">
          <div class="panel-heading">
            <h4 class="panel-title">
              <a data-toggle="collapse" data-parent="#accordion" href="#collapse1">Collapsible Group 1</a>
            </h4>
          </div>
          <div id="collapse1" class="panel-collapse collapse in">
            <div class="panel-body">Lorem ipsum dolor sit amet, consectetur adipisicing elit,
            sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
            quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div>
          </div>
        </div>
        <div class="panel panel-default">
          <div class="panel-heading">
            <h4 class="panel-title">
              <a data-toggle="collapse" data-parent="#accordion" href="#collapse2">Collapsible Group 2</a>
            </h4>
          </div>
          <div id="collapse2" class="panel-collapse collapse">
            <div class="panel-body">Lorem ipsum dolor sit amet, consectetur adipisicing elit,
            sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
            quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div>
          </div>
        </div>
        <div class="panel panel-default">
          <div class="panel-heading">
            <h4 class="panel-title">
              <a data-toggle="collapse" data-parent="#accordion" href="#collapse3">Collapsible Group 3</a>
            </h4>
          </div>
          <div id="collapse3" class="panel-collapse collapse">
            <div class="panel-body">Lorem ipsum dolor sit amet, consectetur adipisicing elit,
            sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
            quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div>
          </div>
        </div>
    </div>
    

    DEMO

  • 24

    用这个:

    $('.panel-defaul.ph').on('show.bs.collapse', function () {
        $(this).children('.panel-heading').addClass('panel-heading-collapsed');  
        $('.panel-defaul.ph').not(this).children('.panel-collapse').removeClass('in');
    });
    
  • 4

    在bootstrap 4中关闭所有折叠的工作方式如下:

    行动:

    <button id="CloseAll" class="btn btn-primary" type="button" data-toggle="collapse">Close All</button>
    

    JQUERY:

    $(document).ready(function() {
        $("#CloseAll").on('click', function() {
            $(".collapse").removeClass("show");
        });
    });
    
  • 7

    像一个魅力在这里为bootstrap 4> 4.1.1工作

    var myGroup = $('your-list');
    
    myGroup.on('show.bs.collapse','.collapse', function() {
       myGroup.find('.collapse.show').collapse('hide');
    });
    
  • 1

    该方法适用于我:

    var lanopt = $(".language-option");
    
    lanopt.on("show.bs.collapse",".collapse", function(){
       lanopt.find(".collapse.in").collapse("hide");
    });
    
  • 0

    这对我有帮助:

    jQuery('button').click( function(e) {
        jQuery('.in').collapse('hide');
    });
    

    它已经崩溃已经开放的部分 . 向GrafiCode Studio致敬

相关问题