【问题标题】:Customizing the collapse transition in bootstrap 4在引导程序 4 中自定义折叠过渡
【发布时间】:2018-05-24 03:39:40
【问题描述】:

Bootstrap 4 使用类 .collapsing 在打开/关闭 .collapse-element 时为其宽度/高度设置动画。不幸的是,实际更改是通过将宽度/高度作为内联样式添加到元素并在过渡的开始和结束时添加和删除类来实现的。因此很难自定义过渡(例如更改时间或淡入/淡出而不是宽度过渡)。

到目前为止我已经尝试过:

  • 将 css 属性 transition:none 添加到 .collapsing 类:这确实有助于摆脱过渡,但打开/关闭仍会因过渡时间而延迟,因为该类仍会比实际添加几毫秒发生了变化。
  • .collapsing 类添加自定义css 关键帧:由于打开和关闭使用相同的类,因此两者显示相同的动画。

有没有办法改变过渡,例如淡入/淡出(改变不透明度)还是我必须构建 bootstrap.js 的自定义版本?

【问题讨论】:

标签: twitter-bootstrap transition twitter-bootstrap-4-beta


【解决方案1】:

看看这个例子:

.collapse {
  visibility: hidden;
}
.collapse.show {
  visibility: visible;
  display: block;
}
.collapsing {
  position: relative;
  height: 0;
  overflow: hidden;
  -webkit-transition-property: height, visibility;
  transition-property: height, visibility;
  -webkit-transition-duration: 0.35s;
  transition-duration: 0.35s;
  -webkit-transition-timing-function: ease;
  transition-timing-function: ease;
}
.collapsing.width {
  -webkit-transition-property: width, visibility;
  transition-property: width, visibility;
  width: 0;
  height: auto;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" rel="stylesheet"/>
<div class="container">
    <div class="row">
        <div class="col-md-6">
            <button role="button" class="btn btn-danger" data-toggle="collapse" data-target="#demo">
                horizontal collapse
            </button>
            <div id="demo" class="collapse show width">
                <div style="width:400px;">
                    <p>Works smoother when element has defined width. Egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p>
                    <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p>
                </div>
            </div>
        </div>
        <div class="col-md-6">
            <button role="button" class=" btn btn-danger" data-toggle="collapse" data-target="#demo2">
                vertical collapse
            </button>
            <div id="demo2" class="collapse show">
                <div>
                    <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p>
                    <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p>
                </div>
            </div>
        </div>
    </div>
</div>

【讨论】:

  • 在 bootstrap 4 中,.collapse 已经默认为不可见(除非您添加 .show 类)。仅供参考
  • Chrome 和 Bootstrap 4 中的一个问题是 &lt;div&gt; 崩溃是突然发生的,而不是动画。如上所述覆盖.collapsing 解决了它。
【解决方案2】:

如果您使用 SASS 编译 bootstrap.css,请更改为 _variables.scss 文件中的 $transition-collapse 变量指定的时间。

Bootstrap v4.2.1 的默认设置在第 254 行:

$transition-collapse: height .35s ease !default;

我将 .35s 更改为 .15s,但您可以将其设置为您更喜欢的东西。

【讨论】:

    【解决方案3】:

    这是关于过渡风格的。您可以在 s 中指定它的秒数或 ms 中的毫秒数。我通过实验发现这是所需的最低 html。 请注意,Bootstrap 使用 id 和 data-target 将按钮与要折叠的部分相关联。因此,如果您有多个可折叠部分,则需要单独的 id。

    <button
      data-toggle="collapse"
      data-target="#collapseExample">button name</button>
    ...
    <div style="transition: 1s;" id="collapseExample">
    your collapsible stuff goes here.
    </div>
    

    附加信息:

    【讨论】:

      猜你喜欢
      • 2017-07-16
      • 2020-10-25
      • 2015-05-29
      • 2020-11-05
      • 2020-08-20
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      • 1970-01-01
      相关资源
      最近更新 更多