在 Bootstrap 4 中平滑过渡选项卡激活
Smoothly transition tab activation in Bootstrap 4
我创建了一个页面,页面底部有 bootstrap 个选项卡。
选项卡本身的高度各不相同,我发现当我激活总高度较小的选项卡(并且页面向下滚动到最下方)时,浏览器如何捕捉到较小的页面高度令人不快。
在尝试了六条建议后,我最终找到了一个解决方案,我将所有选项卡设置为相同的高度,但我仍然希望它们之间至少有一些过渡并选择了不透明度。
查看我的fiddle。
HTML
<div class="consistent-height">
<ul class="nav nav-tabs">
<li class="nav-item">
<a class="nav-link active" data-toggle="tab" href="#tab1">tab 1</a>
</li>
<li class="nav-item">
<a class="nav-link" data-toggle="tab" href="#tab2">tab 2</a>
</li>
</ul>
<div class="tab-content">
<img class="logo" alt="logo" src="/static/images/logo_icon.svg">
<div id="tab1" class="tab-pane active">
tra la la
</div>
<div id="tab2" class="tab-pane fade">
juhuhu
</div>
</div>
</div>
CSS
.logo {
float: right;
height: 20em;
}
.tab-content {
padding-top: 2em;
}
.consistent-height .tab-content {
position: relative;
transition: opacity .5s ease 0s;
}
.consistent-height .tab-content > .tab-pane {
display: block; /* undo "display: none;" */
opacity: 0;
position: absolute;
width: calc(100% - 15em);
}
.consistent-height .tab-content > .active {
opacity: 100%;
}
这几乎可以正常工作,但是当我从“选项卡 2”移动到“选项卡 1”时会有额外的延迟(与激活“选项卡 2”时的立即转换相比)。
我怀疑延迟是由重叠转换引起的,但我对它们的理解还不够深入,无法理解这里困扰浏览器的是什么。
我做错了什么?
.fade
class 正在应用与不透明度相关的额外 css 样式。
只有第二个选项卡有 .fade
class,因此感觉不一致。
如果将 .fade
添加到两者,您会注意到两个转换都有延迟。
不确定为什么要添加 .fade
,它似乎是要与模态框一起使用。您可能已经自己定义了它并且不知道 bootstrap 也有淡入淡出 class
.tab-content {
padding-top: 2em;
}
.consistent-height .tab-content {
position: relative;
}
.consistent-height .tab-content>.tab-pane {
display: block;
opacity: 0;
position: absolute;
width: calc(100% - 15em);
transition: opacity .5s ease 0s;
}
.consistent-height .tab-content>.active {
opacity: 100%;
}
<h1> no fade </h1>
<div class="consistent-height">
<ul class="nav nav-tabs">
<li class="nav-item">
<a class="nav-link active" data-toggle="tab" href="#tab1">tab 1</a>
</li>
<li class="nav-item">
<a class="nav-link" data-toggle="tab" href="#tab2">tab 2</a>
</li>
</ul>
<div class="tab-content">
<div id="tab1" class="tab-pane active">
tab 1 content
</div>
<div id="tab2" class="tab-pane">
tab 2 content
</div>
</div>
</div>
<h1><br> with fade </h1>
<div class="consistent-height">
<ul class="nav nav-tabs">
<li class="nav-item">
<a class="nav-link active" data-toggle="tab" href="#tab3">tab 3</a>
</li>
<li class="nav-item">
<a class="nav-link" data-toggle="tab" href="#tab4">tab 4</a>
</li>
</ul>
<div class="tab-content">
<div id="tab3" class="tab-pane fade active">
tab 3 content
</div>
<div id="tab4" class="tab-pane fade">
tab 4 content
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-fQybjgWLrvvRgtW6bFlB7jaZrFsaBXjsOMm/tB9LTS58ONXgqbR9W8oWht/amnpF" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css" integrity="sha384-zCbKRCUGaJDkqS1kPbPd7TveP5iyJE0EjAuZQTgFLD2ylzuqKfdKlfG/eSrtxUkn" crossorigin="anonymous">
我创建了一个页面,页面底部有 bootstrap 个选项卡。
选项卡本身的高度各不相同,我发现当我激活总高度较小的选项卡(并且页面向下滚动到最下方)时,浏览器如何捕捉到较小的页面高度令人不快。
在尝试了六条建议后,我最终找到了一个解决方案,我将所有选项卡设置为相同的高度,但我仍然希望它们之间至少有一些过渡并选择了不透明度。
查看我的fiddle。
HTML
<div class="consistent-height">
<ul class="nav nav-tabs">
<li class="nav-item">
<a class="nav-link active" data-toggle="tab" href="#tab1">tab 1</a>
</li>
<li class="nav-item">
<a class="nav-link" data-toggle="tab" href="#tab2">tab 2</a>
</li>
</ul>
<div class="tab-content">
<img class="logo" alt="logo" src="/static/images/logo_icon.svg">
<div id="tab1" class="tab-pane active">
tra la la
</div>
<div id="tab2" class="tab-pane fade">
juhuhu
</div>
</div>
</div>
CSS
.logo {
float: right;
height: 20em;
}
.tab-content {
padding-top: 2em;
}
.consistent-height .tab-content {
position: relative;
transition: opacity .5s ease 0s;
}
.consistent-height .tab-content > .tab-pane {
display: block; /* undo "display: none;" */
opacity: 0;
position: absolute;
width: calc(100% - 15em);
}
.consistent-height .tab-content > .active {
opacity: 100%;
}
这几乎可以正常工作,但是当我从“选项卡 2”移动到“选项卡 1”时会有额外的延迟(与激活“选项卡 2”时的立即转换相比)。 我怀疑延迟是由重叠转换引起的,但我对它们的理解还不够深入,无法理解这里困扰浏览器的是什么。
我做错了什么?
.fade
class 正在应用与不透明度相关的额外 css 样式。
只有第二个选项卡有 .fade
class,因此感觉不一致。
如果将 .fade
添加到两者,您会注意到两个转换都有延迟。
不确定为什么要添加 .fade
,它似乎是要与模态框一起使用。您可能已经自己定义了它并且不知道 bootstrap 也有淡入淡出 class
.tab-content {
padding-top: 2em;
}
.consistent-height .tab-content {
position: relative;
}
.consistent-height .tab-content>.tab-pane {
display: block;
opacity: 0;
position: absolute;
width: calc(100% - 15em);
transition: opacity .5s ease 0s;
}
.consistent-height .tab-content>.active {
opacity: 100%;
}
<h1> no fade </h1>
<div class="consistent-height">
<ul class="nav nav-tabs">
<li class="nav-item">
<a class="nav-link active" data-toggle="tab" href="#tab1">tab 1</a>
</li>
<li class="nav-item">
<a class="nav-link" data-toggle="tab" href="#tab2">tab 2</a>
</li>
</ul>
<div class="tab-content">
<div id="tab1" class="tab-pane active">
tab 1 content
</div>
<div id="tab2" class="tab-pane">
tab 2 content
</div>
</div>
</div>
<h1><br> with fade </h1>
<div class="consistent-height">
<ul class="nav nav-tabs">
<li class="nav-item">
<a class="nav-link active" data-toggle="tab" href="#tab3">tab 3</a>
</li>
<li class="nav-item">
<a class="nav-link" data-toggle="tab" href="#tab4">tab 4</a>
</li>
</ul>
<div class="tab-content">
<div id="tab3" class="tab-pane fade active">
tab 3 content
</div>
<div id="tab4" class="tab-pane fade">
tab 4 content
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/jquery@3.5.1/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-fQybjgWLrvvRgtW6bFlB7jaZrFsaBXjsOMm/tB9LTS58ONXgqbR9W8oWht/amnpF" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css" integrity="sha384-zCbKRCUGaJDkqS1kPbPd7TveP5iyJE0EjAuZQTgFLD2ylzuqKfdKlfG/eSrtxUkn" crossorigin="anonymous">