自定义bootstrap 4中的折叠转换

TiP*_*iPE 11 transition twitter-bootstrap twitter-bootstrap-4-beta

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

到目前为止我尝试过的:

  • 将css属性添加transition:none.collapsing类中:这确实有助于消除转换,但打开/关闭仍然会延迟转换时间,因为在实际更改发生之前,类仍会添加几毫秒.
  • 将自定义css关键帧添加到.collapsing类中:由于使用相同的类进行打开和关闭,因此会显示相同的动画.

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

Luc*_*ico 7

看一下这个例子:

.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;
}
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)


Dre*_*rew 6

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

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

$transition-collapse: height .35s ease !default;
Run Code Online (Sandbox Code Playgroud)

我将 0.35s 更改为 0.15s,但您可以将其设置为您更满意的值。


Dis*_*ame 5

这是关于过渡风格的。您可以用 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>
Run Code Online (Sandbox Code Playgroud)

附加信息: