Изменение значка Twitter bootstrap 3.0 при сворачивании

Речь идет о Bootstrap 3.0. Я хотел бы, чтобы значок/глификон менялся при сворачивании. То есть из закрытой папки в открытую.

Я искал повсюду и читал темы здесь на SO, но безрезультатно. Эта ветка была закрыта, и в основном это то, что я хочу. Как я могу заставить его работать в Bootstrap 3?


person benteh    schedule 09.08.2013    source источник


Ответы (10)


Это решение на основе CSS, основанное на реализации сворачивания bootstrap.js по умолчанию. Никакой дополнительной HTML-разметки не требуется (конечно, вы можете заменить Font-Awesome на глификоны).

<style>
    .panel-title > a:before {
        font-family: FontAwesome;
        content: "\f07c";
        padding-right: 5px;
    }
    .panel-title > a.collapsed:before {
        content: "\f07b";
    }
</style>

ДЕМО (Bootstrap 3.3.7):

ДЕМО (Bootstrap 4.0 / Font Awesome 5 CSS):

person Yan F.    schedule 06.02.2015
comment
Мне это решение нравится больше всего. Хотя я уверен, что в бутстрапе есть встроенный способ без добавления CSS. Хотелось бы узнать что это, а то не могу найти. - person Chud37; 15.08.2017

События collapse обрабатываются по-другому в Bootstrap 3. Теперь это будет что-то вроде:

$('#collapseDiv').on('shown.bs.collapse', function () {
   $(".glyphicon").removeClass("glyphicon-folder-close").addClass("glyphicon-folder-open");
});

$('#collapseDiv').on('hidden.bs.collapse', function () {
   $(".glyphicon").removeClass("glyphicon-folder-open").addClass("glyphicon-folder-close");
});

Демонстрация: http://www.bootply.com/73101

person Zim    schedule 09.08.2013
comment
Замечательный! Почти готово! Но, похоже, это портит все остальные кнопки, которые у меня есть :-S - person benteh; 09.08.2013
comment
... это был бесполезный комментарий: происходит то, что когда я нажимаю на закрытую папку, все остальные кнопки также открывают папку. - person benteh; 09.08.2013
comment
Измените селектор $(".glyphicon") внутри функций на атрибут id конкретной кнопки, например $("#myBtn").removeClass.. - person Zim; 09.08.2013
comment
Во второй раз, когда вы написали, я понял это :-) Большое спасибо и ценю, что вы нашли время. - person benteh; 09.08.2013

Этот код находит ваш аккордеон с идентификатором «Accordion». Когда показанное событие срабатывает на свернутой панели, значок находится на панели заголовка (предыдущий элемент), и он находит и изменяет элемент значка глифа в этом блоке кода HTML:

$('#accordion .panel-collapse').on('shown.bs.collapse', function () {
    $(this).prev().find(".glyphicon").removeClass("glyphicon-chevron-right").addClass("glyphicon-chevron-down");
});

//The reverse of the above on hidden event:

$('#accordion .panel-collapse').on('hidden.bs.collapse', function () {
    $(this).prev().find(".glyphicon").removeClass("glyphicon-chevron-down").addClass("glyphicon-chevron-right");
});
person Zymotik    schedule 10.09.2013
comment
Очень быстрый! Хороший код. Если вы копируете, просто обратите внимание, что в примере начальной загрузки используется #accordion, а не #Accordion. - person Patrik Beck; 25.11.2013
comment
Наконец после часа поиска я нашел решение! Большое спасибо! :) - person vignesh; 17.12.2013
comment
Это работает лучше, чем правильный ответ, поскольку он находит прямую свернутую цель. Правильный ответ найдет каждый свернутый элемент на странице и изменит значок для всего. Спасибо! - person Steven; 04.04.2014
comment
Я думаю, что здесь важно добавить одну важную вещь: в целом рекомендуется реагировать на события показанного.bs.collapse вместо того, чтобы реагировать на сами события щелчка, как я видел в другом месте. Затем вы убедитесь, что значок обновляется только после того, как дыра свернута/расширится. - person ArthurT; 11.05.2018

Для бутстрапа свернуть кнопки со знаком плюс и минус.

HTML

<div>
  <a data-toggle="collapse" href="#other">
    <h3>Others<span class="pull-right glyphicon glyphicon-plus"></span></h3>
  </a>
  <div id="other" class="collapse">
    <h1>Others are</h1>
  </div>
</div>

JavaScript

$(document).ready(function () {
     $('.collapse')
         .on('shown.bs.collapse', function() {
             $(this)
                 .parent()
                 .find(".glyphicon-plus")
                 .removeClass("glyphicon-plus")
                 .addClass("glyphicon-minus");
             })
         .on('hidden.bs.collapse', function() {
             $(this)
                 .parent()
                 .find(".glyphicon-minus")
                 .removeClass("glyphicon-minus")
                 .addClass("glyphicon-plus");
             });
         });
person Gautam    schedule 22.12.2014
comment
Хороший простой ответ, который легко применим к нескольким областям сворачивания на одной странице. - person Christopher King; 08.01.2015
comment
Красиво и просто! - person notzippy; 06.10.2017

Вы также можете использовать класс в качестве цели вместо идентификатора.

 <a data-toggle="collapse" href=".details">
     <div class="details collapse in">Show details</div> 
     <div class="details collapse">Hide details</div> 
 </a>
 <div class="details collapse">
 ...
 </div>
person Alexandre    schedule 09.12.2013
comment
Отличное решение, меньше вторжений. - person Midnightly Coder; 16.04.2014
comment
Просто имейте в виду, что поведение по умолчанию включает переходы, и вы ненадолго увидите оба состояния во время переключения. Вы можете добавить пользовательский CSS, например, #someParent .collapsing:first-child { display: none; }в качестве обходного пути. - person Carl Bussema; 13.10.2014

Используя только CSS, значок сворачивания бутстрапа можно изменить на ваши предопределенные значки:

a[aria-expanded=true] .glyphicon-plus {
    display: none;
}
a[aria-expanded=false] .glyphicon-minus {
    display: none;
}
.pointer{
  cursor:pointer;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous" />
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>

<a data-toggle="collapse" class="pointer" aria-expanded="false" data-target="#testCollpase" aria-controls="#testCollpase" >
  <span class="pull-left title-sidebar">Filter By Price</span>
  <span class="pull-right"><i class="glyphicon glyphicon-plus"></i></span>
  <span class="pull-right"><i class="glyphicon glyphicon-minus"></i></span>
  <div class="clearfix"></div>
</a>
<div id="testCollpase" class="collapse">
  <ul>
    <li><a href="#">500$</a></li>
    <li><a href="#">1000$</a></li>
  </ul>
</div>

В вашем HTML добавьте aria-expanded="false" и добавьте две иконки, которые вам нужно установить на панели сворачивания. Нравиться,

<a data-toggle="collapse" class="pointer" aria-expanded="false" data-target="#testCollpase" aria-controls="#testCollpase" >
  <span class="pull-left title-sidebar">Filter By Price</span>
  <span class="pull-right"><i class="glyphicon glyphicon-plus"></i></span>
  <span class="pull-right"><i class="glyphicon glyphicon-minus"></i></span>
</a>

И управлять им из css. Когда полоса сворачивания расширяется, затем

a[aria-expanded=true] .glyphicon-plus {
    display: none;
}

иначе будет

a[aria-expanded=false] .glyphicon-minus {
    display: none;
}

Запустите фрагмент, и я думаю, вам просто нужно это...

person Maniruzzaman Akash    schedule 14.08.2017

События коллапса обрабатываются следующим образом:

$('#collapse').on('shown.bs.collapse', function () {
   $(".glyphicon")
      .removeClass("glyphicon-folder-close")
      .addClass("glyphicon-folder-open");
 });

 $('#collapse').on('hidden.bs.collapse', function () {
    $(".glyphicon")
       .removeClass("glyphicon-folder-open")
       .addClass("glyphicon-folder-close");
 });
person Aryan    schedule 25.01.2015

Вот мое решение:

$('.navbar-toggle').on('click', function() {
    $(this).toggleClass('mobile-close');
})

Скрыть панели значков по умолчанию:

.mobile-close span {
  display: none !important;
}

Затем вы можете стилизовать mobile-close примерно так:

.navbar-toggle.mobile-close {    
  cursor: pointer;
  width: 42px;
  height: 32px;
  line-height: 40px;
}
.navbar-toggle.mobile-close:before {
  content: "×";
  font-size: 40px;
  color: #231f20;
 }
person Community    schedule 01.02.2015

Этот отлично работает для коллапса начальной загрузки:

<script>
    $(document).ready(function () {
        $('#collapseExample').on('hidden.bs.collapse', function () {
            $("#btnDown").removeClass("glyphicon-chevron-up").addClass("glyphicon-chevron-down");
            })
        $('#collapseExample').on('shown.bs.collapse', function () {
            $("#btnDown").removeClass("glyphicon-chevron-down").addClass("glyphicon-chevron-up");
            })
        });
</script>

Это код HTML, который я использую:

<div class="collapse" id="collapseExample">
     <div class="well">
     ...
     </div>
</div>
<button class="btn btn-default" type="button" data-toggle="collapse" data-         target="#collapseExample" aria-expanded="false" aria-controls="collapseExample">
     <span id="btnDown" class="glyphicon glyphicon-chevron-down"></span>
     Settings
</button>
person undead10    schedule 16.01.2016

Полный код для сворачивания нескольких div со значками в бутстрапе

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Example of Bootstrap 3 Accordion with Plus/Minus Icon</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<style type="text/css">
    .bs-example{
        margin: 20px;
    }
    .panel-title .glyphicon{
        font-size: 14px;
    }
</style>
<script>
    $(document).ready(function(){
        // Add minus icon for collapse element which is open by default
        $(".collapse.in").each(function(){
            $(this).siblings(".panel-heading").find(".glyphicon").addClass("glyphicon-minus").removeClass("glyphicon-plus");
        });

        // Toggle plus minus icon on show hide of collapse element
        $(".collapse").on('show.bs.collapse', function(){
            $(this).parent().find(".glyphicon").removeClass("glyphicon-plus").addClass("glyphicon-minus");
        }).on('hide.bs.collapse', function(){
            $(this).parent().find(".glyphicon").removeClass("glyphicon-minus").addClass("glyphicon-plus");
        });
    });
</script>
</head>
<body>
<div class="bs-example">
    <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="#collapseOne"><span class="glyphicon glyphicon-plus"></span> What is HTML?</a>
                </h4>
            </div>
            <div id="collapseOne" class="panel-collapse collapse">
                <div class="panel-body">
                    <p>HTML stands for HyperText Markup Language. HTML is the standard markup language for describing the structure of web pages. <a href="https://www.tutorialrepublic.com/html-tutorial/" target="_blank">Learn more.</a></p>
                </div>
            </div>
        </div>
        <div class="panel panel-default">
            <div class="panel-heading">
                <h4 class="panel-title">
                    <a data-toggle="collapse" data-parent="#accordion" href="#collapseTwo"><span class="glyphicon glyphicon-plus"></span> What is Bootstrap?</a>
                </h4>
            </div>
            <div id="collapseTwo" class="panel-collapse collapse in">
                <div class="panel-body">
                    <p>Bootstrap is a sleek, intuitive, and powerful front-end framework for faster and easier web development. It is a collection of CSS and HTML conventions. <a href="https://www.tutorialrepublic.com/twitter-bootstrap-tutorial/" target="_blank">Learn more.</a></p>
                </div>
            </div>
        </div>
        <div class="panel panel-default">
            <div class="panel-heading">
                <h4 class="panel-title">
                    <a data-toggle="collapse" data-parent="#accordion" href="#collapseThree"><span class="glyphicon glyphicon-plus"></span> What is CSS?</a>
                </h4>
            </div>
            <div id="collapseThree" class="panel-collapse collapse">
                <div class="panel-body">
                    <p>CSS stands for Cascading Style Sheet. CSS allows you to specify various style properties for a given HTML element such as colors, backgrounds, fonts etc. <a href="https://www.tutorialrepublic.com/css-tutorial/" target="_blank">Learn more.</a></p>
                </div>
            </div>
        </div>
    </div>
    <p><strong>Note:</strong> Click on the linked heading text to expand or collapse accordion panels.</p>
</div>
</body>
</html>      
person ankush    schedule 22.02.2018