Ich mache eine Rails-App und versuche, eine bestimmte Funktionalität im Zusammenhang mit dem Bootstrap- Zusammenbruch von Twitter zu erreichen . Nehmen Sie mich mit, wenn ich es erkläre.
Ich habe derzeit die folgende Ansicht:
Wenn auf jede dieser Schaltflächen geklickt wird, wird ihr Datenumschalt-Div erweitert. Die Ansicht ist wie folgt eingerichtet:
<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>
Ich habe sie so eingerichtet, weil ich die Tasten nebeneinander in einer Reihe haben möchte. Wenn ich die Schaltflächen so bewege, dass sie sich direkt über der Ansicht befinden, die sie erweitern / reduzieren, werden die Schaltflächen übereinander gestapelt.
Mein Endziel ist es also, die drei Schaltflächen nebeneinander zu haben und sie zusammenfallen zu lassen und ihre jeweiligen Abschnitte zu erweitern. Das derzeitige Setup funktioniert jedoch etwas umständlich. Wenn beispielsweise jemand den Schlüsselabschnitt und dann den Attributabschnitt erweitert, muss er unter den Schlüsselabschnitt scrollen.
Für dieses Problem gibt es zwei mögliche Lösungen. Eine ist, dass das Drücken einer Taste dazu führt, dass die anderen 2 zusammenfallen. Dies würde bedeuten, dass zu einem bestimmten Zeitpunkt nur einer dieser Abschnitte erweitert wird.
Ich denke, die bessere Lösung wäre, sie so zu haben, dass beim Erweitern der Tasten die Schaltflächen rechts nach unten zum unteren Rand des Schlüsseldivs verschoben werden und beim Erweitern der Attribute die Schaltfläche zum Bearbeiten von Details zum unteren Rand des Divs verschoben wird . Ist das möglich? Ich habe bereits versucht, dies zu tun, indem ich die Schaltflächen übereinander stapeln ließ und ihre relative Position durch CSS änderte, aber das funktionierte nicht, da die anderen Schaltflächen beim Erweitern eines der Abschnitte an unangenehmen Stellen im Mitte des erweiterten Abschnitts.
Zuletzt möchte ich versuchen, dies ohne das auf der Bootstrap-Seite von Twitter erwähnte Verhalten im Akkordeonstil zu tun, aber wenn mich jemand vom Design-Standpunkt aus davon überzeugen kann, dass es vorzuziehen ist, würde ich es sicherlich noch einmal überdenken.
quelle
data-parent
Attribut angesehen ..?Antworten:
Die
data-parent
erste Lösung besteht darin, sich an die Beispielauswahlarchitektur zu halten<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)
Die zweite Lösung besteht darin, die Ereignisse zu binden und die anderen zusammenklappbaren Elemente selbst auszublenden.
var $myGroup = $('#myGroup'); $myGroup.on('show.bs.collapse','.collapse', function() { $myGroup.find('.collapse.in').collapse('hide'); });
Demo (jsfiddle)
PS: Der seltsame Effekt in den Demos wird durch das
min-height
Set für das Beispiel verursacht. Ignorieren Sie das einfach.Bearbeiten: Das JS-Ereignis wurde von
show
in geändert ,show.bs.collapse
wie in der Bootstrap-Dokumentation angegeben .quelle
<div class="accordion-group">...</div>
das fehlende Stück. Einfach zu benutzendata-parent
hat nicht geholfen. Ich habe die Anforderung deraccordion-group
Klasse in der Bootstrap-Dokumentation nicht gesehen. Vielen Dank!'> .accordion-group > .in'
(src auf Github)Wenn Sie Ihr Markup nicht ändern möchten, führt diese Funktion den Trick aus:
jQuery('button').click( function(e) { jQuery('.collapse').collapse('hide'); });
Jedes Mal, wenn auf eine Schaltfläche geklickt wird, werden alle Abschnitte reduziert. Dann öffnet Bootstrap den von Ihnen ausgewählten.
quelle
(e)
hierFügen Sie das
data-parent
Attributcollapse
stattdessen den Elementen auf dem hinzubutton
.<div id="myGroup"> <button class="btn dropdown" data-toggle="collapse" data-target="#keys"><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"><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="accordion-group"> <div class="collapse indent" id="keys" data-parent="#myGroup"> keys </div> <div class="collapse indent" id="attrs" data-parent="#myGroup"> attrs </div> <div class="collapse" id="edit" data-parent="#myGroup"> edit </div> </div>
quelle
Wenn Sie Bootstrap 4 verwenden und Ihr Markup nicht ändern möchten:
var $myGroup = $('#myGroup'); $myGroup.on('show.bs.collapse','.collapse', function() { $myGroup.find('.collapse.show').collapse('hide'); });
quelle
Bootstrap 3-Beispiel mit nebeneinander angeordneten Schaltflächen unter dem Inhalt
.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-Beispiel mit nebeneinander angeordneten Schaltflächen über dem Inhalt
.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>
quelle
Wenn Sie sich an die HTML-Struktur und die richtigen Selektoren gemäß der Bootstrap-Konvention halten, sollten Sie in Ordnung sein.
<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
quelle
Benutze das:
$('.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'); });
quelle
.not(this)
war das, wonach ich gesucht habe!In Bootstrap 4 funktioniert das Schließen aller reduzierten Elemente folgendermaßen:
AKTION:
<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"); }); });
quelle
hier wie ein Zauber für Bootstrap 4> 4.1.1 arbeiten
var myGroup = $('your-list'); myGroup.on('show.bs.collapse','.collapse', function() { myGroup.find('.collapse.show').collapse('hide'); });
quelle
Die Methode funktioniert richtig für mich:
var lanopt = $(".language-option"); lanopt.on("show.bs.collapse",".collapse", function(){ lanopt.find(".collapse.in").collapse("hide"); });
quelle
Das war hilfreich für mich:
jQuery('button').click( function(e) { jQuery('.in').collapse('hide'); });
Es ist bereits offener Abschnitt zusammengebrochen. Vielen Dank an GrafiCode Studio
quelle