当屏幕尺寸变小时, Bootstrap 选项卡会像图像一样重叠。
我使用了 col-sm
并且我的 Angular HTML 是这样的(但是任何非 Angular HTML 解决方案也可以):
<div class="col-sm-6"> <tabset> <tab>
<tab-heading active="true">
Tab1
<toggle-switch ></toggle-switch>
</tab-heading>
...
</tab>
<tab>
<tab-heading>Tab2
<toggle-switch ></toggle-switch></tab-heading>
...
</tab>
<tab>
<tab-heading>Tab3
<toggle-switch ></toggle-switch></tab-heading>
...
</tab></tabset></div>
我希望其他选项卡堆叠在后台而不是前台。
请原谅我糟糕的 gimp 技巧,但事件选项卡应该始终在前面,所以如果选择选项卡 3,那么另一行应该移到后面。
它不必像这样专门安排,但要点是事件选项卡与其内容 Pane 之间不应有任何内容,所以像这样也可以:
最佳答案
有一个结合了 Css 和 Javascript 的解决方案。
但是,您需要知道选项卡的高度和宽度!
因为您的图片中每个标签的宽度和高度都相同,所以这似乎不是问题。
// Tab width
var tabWidth = 140;
// Tab height
var tabHeight = 42;
var updateAllTabs = function(){
$('li.active a[data-toggle="tab"]').each(function(){
updateTabs({target : this});
});
};
var updateTabs = function(e){
// Get elements
var activeItem = e.target.parentNode;
var menu = activeItem.parentNode;
var items = menu.getElementsByTagName("li");
// Reset menu
menu.style.paddingLeft = 0;
menu.style.paddingBottom = 0;
var menuWidth = jQuery(menu).width();
var otherItems = [];
// Clear old changes - make new list
for(var i=0; i < items.length; i++){
items[i].style.marginLeft = "0px";
items[i].style.marginTop = "0px";
if(items[i] != activeItem)
otherItems.push(items[i]);
}
// If one line return (or only one item)
if(menuWidth >= items.length * tabWidth || items.length <= 1)
return;
// Make some calculations
var perLine = Math.floor(menuWidth / tabWidth);
var lines = Math.ceil(items.length / perLine);
// 1 tab per line
if(perLine == 1){
menu.style.paddingBottom = jQuery(activeItem).height() + "px";
return;
} else if(perLine + 1 == items.length){
menu.style.paddingBottom = jQuery(activeItem).height() + "px";
}
var pad = jQuery(activeItem).width();
// More than one per tab
menu.style.paddingLeft = pad + "px";
// For every line exept the last
for(var i=0; i < lines-1; i++){
// Move first of the line
otherItems[i*perLine].style.marginLeft = ((i+1)*pad*(-1)) + "px";
otherItems[i*perLine].style.marginTop = (i*tabHeight) + "px";
}
return;
};
$( window ).resize(updateAllTabs);
$('a[data-toggle="tab"]').on('shown.bs.tab', updateTabs);
updateAllTabs();
.nav-tabs > li{
width: 140px;
height: 42px;
}
@media only screen and (max-width: 840px) {
.nav-tabs{
position: relative;
}
.nav-tabs > li.active{
position: absolute;
bottom: -1px;
left: 0px;
}
}
<link rel="stylesheet prefetch" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<div>
<!-- Nav tabs -->
<ul class="nav nav-tabs" role="tablist">
<li role="presentation" class="active"><a href="#tab1" aria-controls="home" role="tab" data-toggle="tab">Tab 1</a></li>
<li role="presentation"><a href="#tab2" aria-controls="profile" role="tab" data-toggle="tab">Tab 2</a></li>
<li role="presentation"><a href="#tab3" aria-controls="messages" role="tab" data-toggle="tab">Tab 3</a></li>
<li role="presentation"><a href="#tab4" aria-controls="settings" role="tab" data-toggle="tab">Tab 4</a></li>
<li role="presentation"><a href="#tab5" aria-controls="settings" role="tab" data-toggle="tab">Tab 5</a></li>
<li role="presentation"><a href="#tab6" aria-controls="settings" role="tab" data-toggle="tab">Tab 6</a></li>
</ul>
<!-- Tab panes -->
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="tab1">This is the tab 1</div>
<div role="tabpanel" class="tab-pane" id="tab2">This is the tab 2</div>
<div role="tabpanel" class="tab-pane" id="tab3">This is the tab 3</div>
<div role="tabpanel" class="tab-pane" id="tab4">This is the tab 4</div>
<div role="tabpanel" class="tab-pane" id="tab5">This is the tab 5</div>
<div role="tabpanel" class="tab-pane" id="tab6">This is the tab 6</div>
</div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
那么,这是如何工作的?
基本思想是每次激活一个新标签时,
我们将事件选项卡设置为 position: absolute;左:0px;底部:-1px;
然后我们在选项卡菜单上添加等于选项卡宽度的填充。
最后,我们在每行的第一个选项卡上添加边距减去选项卡的宽度。
更多信息:
该代码甚至适用于超过 2 行的选项卡。
通过在 otherItems
数组上添加假元素并在 previus 元素上添加 margin-right
,可以很容易地将其转换为匹配上一张图像的布局。
(明白了吗?还是我必须为你编码?:P)
关于html - 当屏幕尺寸变小时, Bootstrap 选项卡重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37274375/