考虑一个带有选项卡和选项卡内容的模式。第一个选项卡的内容高度为 100 像素,第二个选项卡的内容高度为 500 像素,第三个选项卡的内容高度为 50 像素。目标是让模态框主体始终为最高选项卡的高度 (500px),因此当您在选项卡之间切换时,模态框的大小保持不变。
这不能通过以下方式实现:
将选项卡内容区域包装器设置为position: relative
并将每个选项卡设置为position: absolute; top: 0; left: 0;
因为绝对定位的元素不占用空间。
默认情况下,将所有选项卡设置为不可见,但活动选项卡除外。这会导致选项卡垂直堆叠,因此选项卡 2 上方将有 100 像素的空间,选项卡 3 上方将有 600 像素的空间(模态框主体的总高度将是所有选项卡的高度之和)。
请参阅下面链接的示例。在“最终目标”和“实际”之间切换以查看视觉差异以及我想要实现的目标。
我真的不想使用 JS 来检查每个选项卡的高度(需要每隔一段时间进行一次,因为选项卡可以根据当前选择等更改高度)。所以这将是一个非常hacky的解决方案。不确定是否有更好的方法。
现在,我将为选项卡容器选择一个“合适”的高度,并允许更高的选项卡在需要时滚动。
示例:https: //codepen.io/joshm123/pen/NWrEVjJ(复制如下)
超文本标记语言
<div class="modal">
<div class="header">
<h2>Welcome!</h2>
</div>
<div class="body">
<div class="tabs">
<button class="tab" onClick="selectTab(1)">Tab 1</button>
<button class="tab" onClick="selectTab(2)">Tab 2</button>
<button class="tab" onClick="selectTab(3)">Tab 3</button>
</div>
<div class="tabs-wrapper">
<div id="tab1" class="tab-content active">
blah blah blah<br/>
blah blah blah
</div>
<div id="tab2" class="tab-content">
blah blah blah<br/>
blah blah blah<br/>
blah blah blah<br/>
blah blah blah<br/>
blah blah blah<br/>
blah blah blah<br/>
blah blah blah<br/>
blah blah blah<br/>
blah blah blah<br/>
blah blah blah
</div>
<div id="tab3" class="tab-content">
blah blah blah
</div>
</div>
</div>
<div class="footer">
<button id="showEndGoalButton" onClick="toggleView()">Show End Goal</button>
<button id="showActualButton" onClick="toggleView()">Show Actual</button>
</div>
</div>
CSS
.modal {
position: absolute;
width: 500px;
left: calc(50% - 250px);
top: 30px;
border: 1px solid #999;
}
.header {
padding: 10px;
border-bottom: 1px solid #999;
}
.header h2 {
margin: 0;
padding: 0;
}
.body {
padding: 10px;
}
.tabs > .tab {
margin-right; 10px;
}
.tabs-wrapper {
margin: 10px 0;
border: 1px dotted red;
}
临摹微笑
相关分类