带箭头的Bootstrap手风琴

10

我有一个关于Bootstrap手风琴的简单问题。

我创建了一个手风琴,可以通过标题进行展开和折叠。 这很好用,但我的问题是标题中没有显示箭头。

.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);
}
<script src="http://netdna.bootstrapcdn.com/bootstrap/3.0.2/js/bootstrap.min.js"></script>
<link href="http://netdna.bootstrapcdn.com/bootstrap/3.0.2/css/bootstrap.min.css" rel="stylesheet"/>
<!-- Accordion START -->
<div class="panel-group" id="accordion">
  <div class="panel panel-default">
    <div class="panel-heading accordion-toggle collapsed" data-toggle="collapse" data-parent="#accordion" data-target="#collapseOne">
      <h4 class="panel-title">Test1</h4>

    </div>
    <div id="collapseOne" class="panel-collapse collapse">
      <div class="panel-body">
        <p>sadfsadfsdaf sadf</p>
      </div>
    </div>
  </div>
  <div class="panel panel-default">
    <div class="panel-heading accordion-toggle collapsed" data-toggle="collapse" data-parent="#accordion" data-target="#collapseTwo">
      <h4 class="panel-title">Test2</h4>

    </div>
    <div id="collapseTwo" class="panel-collapse collapse">
      <div class="panel-body">
        <p>
          Bla bla bla
        </p>
      </div>
    </div>
  </div>
</div>
<!-- Accordion END -->

2个回答

19

问题出现在选择器之间的空格上:

.panel-heading [data-toggle="collapse"]:after
              ^------- // remove this space to make this selector work

现在你正在选择所有具有data-toggle属性且是.panel-heading后代的元素。应该这样写:

```javascript $('.panel-heading [data-toggle]') ```
.panel-heading[data-toggle="collapse"]:after

.panel-heading {
  position: relative;
}
.panel-heading[data-toggle="collapse"]:after {
  font-family: 'Glyphicons Halflings';
  content: "\e072"; /* "play" icon */
  position: absolute;
  color: #b0c5d8;
  font-size: 18px;
  line-height: 22px;
  right: 20px;
  top: calc(50% - 10px);

  /* 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);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
<!-- Accordion START -->
      <div class="panel-group" id="accordion">
        <div class="panel panel-default">
          <div class="panel-heading accordion-toggle collapsed" data-toggle="collapse" data-parent="#accordion" data-target="#collapseOne">
            <h4 class="panel-title">Test1</h4>

          </div>
          <div id="collapseOne" class="panel-collapse collapse">
            <div class="panel-body">
              <p>sadfsadfsdaf sadf</p>
            </div>
          </div>
        </div>
        <div class="panel panel-default">
          <div class="panel-heading accordion-toggle collapsed" data-toggle="collapse" data-parent="#accordion" data-target="#collapseTwo">
            <h4 class="panel-title">Test2</h4>

          </div>
          <div id="collapseTwo" class="panel-collapse collapse">
            <div class="panel-body">
<p>
Bla bla bla
</p>
            </div>
          </div>
        </div>
      </div>
      <!-- Accordion END -->


这个可以工作但不完美。我认为现在的行为与这个例子[链接](http://jsfiddle.net/3gYa3/221/)相同。问题是当面板打开时,面板内部的文本会向右跳动。 - Christian
正是我所寻找的。学到了新东西。 - Himalaya Garg

2

无需字体(图标):

我提供了一个简单的解决方案:

.card-link::after {
    content: "";
    border-bottom: 0;
    border-top: .3em solid;
    border-right: .3em solid transparent;
    border-left: .3em solid transparent;
}

.card-link[aria-expanded="true"]::after {
    content: "";
    border-top: 0;
    border-bottom: .3em solid;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接