J'ai mis en place cette version simple de l' accordéon Bootstrap :
Accordéon simple: http://jsfiddle.net/darrenc/cngPS/
Actuellement, l'icône ne pointe que vers le bas , mais est-ce que quelqu'un sait quel JS serait nécessaire pour être implémenté afin de changer la classe de l'icône en:
<i class="icon-chevron-up"></i>
... de sorte qu'il pointe jusqu'à quand étendus et dos à bascule vers le bas à nouveau quand il est replié, et ainsi de quatrième?
.bs.collapse
. J'ai également changéshown and hidden to show and hide
pour que l'animation se produise avant l'ouverture de l'accordéon.Voici mon approche pour Bootstrap 2.x. C'est juste du CSS. Aucun JavaScript nécessaire:
.accordion-caret .accordion-toggle:hover { text-decoration: none; } .accordion-caret .accordion-toggle:hover span, .accordion-caret .accordion-toggle:hover strong { text-decoration: underline; } .accordion-caret .accordion-toggle:before { font-size: 25px; vertical-align: -3px; } .accordion-caret .accordion-toggle:not(.collapsed):before { content: "▾"; margin-right: 0px; } .accordion-caret .accordion-toggle.collapsed:before { content: "▸"; margin-right: 0px; }
Ajoutez simplement la classe accordéon-caret à la div du groupe d'accordéon, comme ceci:
<div class="accordion-group accordion-caret"> <div class="accordion-heading"> <a class="accordion-toggle" data-toggle="collapse" href="#collapseOne"> <strong>Header</strong> </a> </div> <div id="collapseOne" class="accordion-body collapse in"> <div class="accordion-inner"> Content </div> </div> </div>
la source
Le Bootstrap Collapse a des événements auxquels vous pouvez réagir:
$(document).ready(function(){ $('#accordProfile').on('shown', function () { $(".icon-chevron-down").removeClass("icon-chevron-down").addClass("icon-chevron-up"); }); $('#accordProfile').on('hidden', function () { $(".icon-chevron-up").removeClass("icon-chevron-up").addClass("icon-chevron-down"); }); });
la source
Utilisez le pseudo-sélecteur CSSes: après avoir utilisé les Glyphicons intégrés de Bootstrap 3 pour une réponse non JS avec une modification mineure de votre HTML ...
CSS
.panel-heading [data-toggle="collapse"]:after { font-family: 'Glyphicons Halflings'; content: "\e072"; /* "play" icon */ float: right; color: #b0c5d8; font-size: 18px; line-height: 22px; /* rotate "play" icon from > (right arrow) to down arrow */ -webkit-transform: rotate(-90deg); -moz-transform: rotate(-90deg); -ms-transform: rotate(-90deg); -o-transform: rotate(-90deg); transform: rotate(-90deg); } .panel-heading [data-toggle="collapse"].collapsed:after { /* rotate "play" icon from > (right arrow) to ^ (up arrow) */ -webkit-transform: rotate(90deg); -moz-transform: rotate(90deg); -ms-transform: rotate(90deg); -o-transform: rotate(90deg); transform: rotate(90deg); }
HTML
Ajoutez
class="collapsed"
à toutes les balises d'ancrage fermées par défaut.Cela fera tourner les ancres telles que
<a data-toggle="collapse" data-parent="#accordion" href="#collapseTwo">
dans
<a class="collapsed" data-toggle="collapse" data-parent="#accordion" href="#collapseTwo">
Exemple CodePen Live
http://codepen.io/anon/pen/VYobER
Capture d'écran
la source
Ajouté à @muffls answer pour que cela fonctionne avec tous les collapsus de bootstrap de Twitter et modifie la flèche avant le début de l'animation.
$('.collapse').on('show', function(){ $(this).parent().find(".icon-chevron-left").removeClass("icon-chevron-left").addClass("icon-chevron-down"); }).on('hide', function(){ $(this).parent().find(".icon-chevron-down").removeClass("icon-chevron-down").addClass("icon-chevron-left"); });
En fonction de votre structure HTML, vous devrez peut-être modifier le fichier
parent()
.la source
Je pense que les meilleurs codes sont les suivants:
$('#accordion1').collapse({ toggle: false }).on('show',function (e) { $(e.target).parent().find(".icon-chevron-down").removeClass("icon-chevron-down").addClass("icon-chevron-up"); }).on('hide', function (e) { $(e.target).parent().find(".icon-chevron-up").removeClass("icon-chevron-up").addClass("icon-chevron-down"); });
la source
Si quelqu'un est intéressé, voici comment vous faites avec BS3 depuis qu'ils ont changé les noms des événements:
$('.collapse').on('show.bs.collapse', function(){ var i = $(this).parent().find('i') i.toggleClass('fa-caret-right fa-caret-down'); }).on('hide.bs.collapse', function(){ var i = $(this).parent().find('i') i.toggleClass('fa-caret-down fa-caret-right'); });
Vous changez simplement les noms de classe dans l'exemple pour ceux que vous utilisez dans votre cas.
la source
La solution CSS uniquement la plus lisible serait probablement d'utiliser l'attribut aria-extended. N'oubliez pas que vous devrez ajouter aria-Expand = "false" à tous les éléments de réduction car cela n'est pas défini au chargement (uniquement au premier clic).
Le HTML:
<h2 data-toggle="collapse" href="#collapseId" aria-expanded="false"> <span class="glyphicon glyphicon-chevron-right"></span> <span class="glyphicon glyphicon-chevron-down"></span> Title </h2>
Le CSS:
h2[aria-expanded="false"] span.glyphicon-chevron-down, h2[aria-expanded="true"] span.glyphicon-chevron-right { display: none; } h2[aria-expanded="true"] span.glyphicon-chevron-down, h2[aria-expanded="false"] span.glyphicon-chevron-right { display: inline; }
Fonctionne avec Bootstrap 3.x.
la source
Voici ma solution qui est affinée à partir de celle publiée par @ john-magnolia et résout certains de ses problèmes
/** * Toggle on/off arrow for Twitter Bootstrap collapsibles. * * Multi-collapsible-friendly; supports several collapsibles in the same group, on the same page. */ function animateCollapsibles() { $('.collapse').on('show', function() { var $t = $(this); var header = $("a[href='#" + $t.attr("id") + "']"); header.find(".icon-chevron-right").removeClass("icon-chevron-right").addClass("icon-chevron-down"); }).on('hide', function(){ var $t = $(this); var header = $("a[href='#" + $t.attr("id") + "']"); header.find(".icon-chevron-down").removeClass("icon-chevron-down").addClass("icon-chevron-right"); }); }
Et voici l'exemple de balisage:
<div class="accordion" id="accordion-send"> <div class="accordion-group"> <div class="accordion-heading"> <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion-send" href="#collapse-refund"> <i class="icon icon-chevron-right"></i> Send notice </a> </div> <div id="collapse-refund" class="accordion-body collapse"> <div class="accordion-inner"> <p>Lorem ipsum Toholampi city</p> </div> </div> </div> </div>
la source
Une solution bootstrap v3 (où les événements ont des noms différents), utilisant également un seul sélecteur jQuery (comme vu ici ):
$('.accordion').on('hide.bs.collapse show.bs.collapse', function (n) { $(n.target).siblings('.panel-heading').find('i.glyphicon').toggleClass('glyphicon-chevron-down glyphicon-chevron-up'); });
la source
C'est comme ça que je le fais sans aucun js.
J'ai utilisé l'icône glyphicon-triangle-right mais cela fonctionne avec n'importe quelle autre icône, ce qu'il fait, c'est qu'il applique une rotation de 90 degrés à l'icône lorsque le panneau est ouvert ou non. J'utilise Bootstrap 3.3.5 pour celui-ci.
Code CSS
h4.panel-title a { display: block; } h4.panel-title a.collapsed .glyphicon-triangle-right { color: #ada9a9 !important; transform: rotate(0deg); } h4.panel-title a .glyphicon-triangle-right { color: #515e64 !important; transform: rotate(90deg); }
Il s'agit de la structure HTML tirée de l'exemple Bootstrap
<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"> Proven Expertise <span class="glyphicon glyphicon-triangle-right pull-right" aria-hidden="true"></span> </a> </h4> </div> <div id="collapseOne" class="panel-collapse collapse in" role="tabpanel" aria-labelledby="headingOne"> <div class="panel-body"> Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS. </div> </div> </div> </div>
la source
Aucune de ces solutions n'a fonctionné pour moi, mais j'ai trouvé ceci et cela a fonctionné:
function toggleChevron(el) { if ($(el).find('i').hasClass('icon-chevron-left')) $(el).find('.icon-chevron-left').removeClass("icon-chevron-left").addClass("icon-chevron-down"); else $(el).find('.icon-chevron-down').removeClass("icon-chevron-down").addClass("icon-chevron-left"); }
Implémentation HTML:
<div class="accordion" id="accordion-send"> <div class="accordion-group"> <div class="accordion-heading" onClick="toggleChevron(this)"> <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion-send" href="#collapse-refund"> <i class="icon icon-chevron-right"></i> Send notice </a> ...
la source
@RobSadler:
Version CSS uniquement de RE Martin Wickman ...
Vous pouvez contourner ce problème en mettant accordéon-caret sur la balise d'ancrage et en lui donnant une classe réduite par défaut. Ainsi:
<div class="accordion-group"> <div class="accordion-heading"> <a class="accordion-toggle accordion-caret collapsed" data-toggle="collapse" href="#collapseOne"> <strong>Header</strong> </a> </div> <div id="collapseOne" class="accordion-body collapse in"> <div class="accordion-inner"> Content </div> </div>
Cela a fonctionné pour moi.
la source
Pour Bootstrup 3.2 + FontAwesome
$(document).ready(function(){ $('#accordProfile').on('shown.bs.collapse', function () { $(".fa-chevron-down").removeClass("fa-chevron-down").addClass("fa-chevron-up"); }); $('#accordProfile').on('hidden.bs.collapse', function () { $(".fa-chevron-up").removeClass("fa-chevron-up").addClass("fa-chevron-down"); }); });
Parfois, vous devez l'écrire. Si c'est le cas
$('.collapsed span').removeClass('fa-minus').addClass('fa-plus');
Généré automatiquement (class = "collapsed"), lorsque vous appuyez sur le menu Masquer.
ps lorsque vous devez créer un menu arborescent
la source
Cela a été répondu de nombreuses façons, mais ce que j'ai trouvé était le plus simple et le plus facile pour moi avec Bootstrap 3 et la police géniale. je viens de faire
$('a.toggler').on('click', function () {$('i', this).toggleClass('fa-caret-up');});
Cela bascule simplement la classe CSS de l'icône que je veux afficher. J'ajoute le basculeur de classe à l'élément auquel je souhaite l'appliquer. Cela peut être ajouté à n'importe quel élément pour lequel vous souhaitez basculer une icône.
la source
Une autre solution sans javascript qui utilise la fonctionnalité de réduction elle-même:
/* Prevent block display and transition animation */ .expand-icon.collapse.in, .collapse-icon.collapse.in { display: inline; } .expand-icon.collapsing { display: none; } /* HTML Toggler with glyphicons */ <a data-toggle="collapse" href=".my-collapse"> <span class="my-collapse collapse-icon collapse in"> <span class="glyphicon glyphicon-collapse-up"></span> </span> <span class="my-collapse expand-icon collapse"> <span class="glyphicon glyphicon-expand"></span> </span> </a>
la source
Pour une solution CSS uniquement (et sans icône) utilisant Bootstrap 3, j'ai dû faire un peu de violon basé sur la réponse de Martin Wickman ci-dessus.
Je n'ai pas utilisé la notation accordéon- * car c'est fait avec des panneaux dans BS3.
De plus, j'ai dû inclure dans le code HTML initial aria-extended = "true" sur l'élément qui est ouvert au chargement de la page.
Voici le CSS que j'ai utilisé.
.accordion-toggle:hover { text-decoration: none; } .accordion-toggle:hover span, .accordion-toggle:hover strong { text-decoration: underline; } .accordion-toggle:before { font-size: 25px; } .accordion-toggle[data-toggle="collapse"]:before { content: "+"; margin-right: 0px; } .accordion-toggle[aria-expanded="true"]:before { content: "-"; margin-right: 0px; }
Voici mon HTML purifié:
<div id="acc1"> <div class="panel panel-default"> <div class="panel-heading"> <span class="panel-title"> <a class="accordion-toggle" data-toggle="collapse" aria-expanded="true" data-parent="#acc1" href="#acc1-1">Title 1 </a> </span> </div> <div id=“acc1-1” class="panel-collapse collapse in"> <div class="panel-body"> Text 1 </div> </div> </div> <div class="panel panel-default"> <div class="panel-heading"> <span class="panel-title"> <a class="accordion-toggle" data-toggle="collapse" data-parent="#acc1” href=“#acc1-2”>Title 2 </a> </span> </div> <div id=“acc1-2” class="panel-collapse collapse"> <div class="panel-body"> Text 2 </div> </div> </div> </div>
la source
Réponse la plus courte possible.
HTML
<a data-toggle="collapse" data-parent="#panel-quote-group" href="#collapseQuote"> <span class="toggle-icon glyphicon glyphicon-collapse-up"></span> </a>
JS:
<script type="text/javascript"> $(function () { $('a[data-toggle="collapse"]').click(function () { $(this).find('span.toggle-icon').toggleClass('glyphicon-collapse-up glyphicon-collapse-down'); }) }) </script>
Et bien sûr, vous pouvez utiliser n'importe quoi pour un sélecteur au lieu d'une balise d'ancrage
a
et vous pouvez également utiliser un sélecteur spécifique au lieu de savoirthis
si votre icône se trouve en dehors de l'élément sur lequel vous avez cliqué.la source
Voici une solution qui crée une section extensible en utilisant une conception quelque peu matérielle, bootstrap 4.5 / 5 alpha et entièrement non-javascript.
Style pour la section de tête
<style> [data-toggle="collapse"] .fa:before { content: "\f077"; } [data-toggle="collapse"].collapsed .fa:before { content: "\f078"; } </style>
Corps html
<div class="pt-3 pb-3" style="border-top: 1px solid #eeeeee; border-bottom: 1px solid #eeeeee; cursor: pointer;"> <a href="#expandId" class="text-dark float-right collapsed" data-toggle="collapse" role="button" aria-expanded="false" aria-controls="expandId"> <i class="fa" aria-hidden="false"></i> </a> <a href="#expandId" class="text-dark collapsed" data-toggle="collapse" role="button" aria-expanded="false" aria-controls="expandId">Expand Header</a> <div class="collapse" id="expandId"> CONTENT GOES IN HERE </div>
la source