【发布时间】:2021-04-30 01:16:41
【问题描述】:
几个标签的内容高度不同(例如,一个比另一个有更多的文本),但在子标签之间切换时,父可折叠面板不会调整大小。如何将父级可折叠面板内容更改为与子选项卡高度匹配的最大高度?还是根据标签高度设置最大高度?
编辑 2:片段现在包含 CSS 活动类
编辑:找到半解决方案!
在 JavaScript 中,不要使用此代码:
content.style.maxHeight = content.scrollHeight + "px";
我把它改成了以下:
content.style.maxHeight = "initial";
这可行,但它带来了一个新问题。因为现在 CSS 过渡不再像使用 scrollHeight 时那样工作:
.calendar-unfold {
max-height: 0;
transition: max-height 0.4s ease-out;
}
片段:
var coll = document.getElementsByClassName("calendar-fold");
var i;
for (i = 0; i < coll.length; i++) {
coll[i].addEventListener("click", function () {
this.classList.toggle("active");
var content = this.nextElementSibling;
if (content.style.maxHeight) {
content.style.maxHeight = null;
} else {
content.style.maxHeight = content.scrollHeight + "px";
}
});
}
/* CALENDAR TABS 3*/
function calendarTabCalendarBtn3(){
document.getElementById('calendarTabCalendar3').style.display ='block';
document.getElementById('calendarTabPruning3').style.display ='none';
document.getElementById('calendarTabPregrow3').style.display ='none';
document.getElementById('calendarTabAftergrow3').style.display ='none';
document.getElementById('calendarTabNeighbour3').style.display ='none';
}
function calendarTabPruningBtn3(){
document.getElementById('calendarTabCalendar3').style.display ='none';
document.getElementById('calendarTabPruning3').style.display ='block';
document.getElementById('calendarTabPregrow3').style.display ='none';
document.getElementById('calendarTabAftergrow3').style.display ='none';
document.getElementById('calendarTabNeighbour3').style.display ='none';
}
function calendarTabPregrowBtn3(){
document.getElementById('calendarTabCalendar3').style.display ='none';
document.getElementById('calendarTabPruning3').style.display ='none';
document.getElementById('calendarTabPregrow3').style.display ='block';
document.getElementById('calendarTabAftergrow3').style.display ='none';
document.getElementById('calendarTabNeighbour3').style.display ='none';
}
function calendarTabAftergrowBtn3(){
document.getElementById('calendarTabCalendar3').style.display ='none';
document.getElementById('calendarTabPruning3').style.display ='none';
document.getElementById('calendarTabPregrow3').style.display ='none';
document.getElementById('calendarTabAftergrow3').style.display ='block';
document.getElementById('calendarTabNeighbour3').style.display ='none';
}
function calendarTabNeighbourBtn3(){
document.getElementById('calendarTabCalendar3').style.display ='none';
document.getElementById('calendarTabPruning3').style.display ='none';
document.getElementById('calendarTabPregrow3').style.display ='none';
document.getElementById('calendarTabAftergrow3').style.display ='none';
document.getElementById('calendarTabNeighbour3').style.display ='block';
}
.calendar-fold {
margin: 4px;
padding: 10px;
font-size: 1.25em!important;
background-color: rgba(255,255,255,1.00);
border: 1px solid rgba(55,175,75,1.00);
color: rgba(55,175,75,1.00);
border-radius: 5px;
cursor: pointer;
transition: 0.4s;
}
.calendar-fold:hover {
border: 1px solid rgba(0,145,255,1.00);
color: rgba(0,145,255,1.00);
}
.calendar-fold.active {
background-color: rgba(55,175,75,1.00);
border: 1px solid rgba(55,175,75,1.00);
color: rgba(255,255,255,1.00);
}
.calendar-fold.active:hover {
background-color: rgba(55,175,75,0.80);
border: 1px solid rgba(55,175,75,0.00);
color: rgba(255,255,255,1.00);
}
.calendar-unfold {
max-height: 0;
overflow: hidden;
transition: max-height 0.4s ease-out;
background-color: rgba(200,200,200,1.00);
}
.calendar-tabbuttongroup {
width: calc(100% - 8px);
margin: 0 4px;
}
.calendar-tabbutton {
background-color: rgba(55,175,75,1.00);
color: rgba(255,255,255,1.00);
padding: 8px;
font-size: 1.00em;
float: left;
width: 10%;
cursor: pointer;
}
.calendar-tabbutton:hover {
background-color: rgba(55,175,75,0.80);
}
.calendar-tabgroup {
float: left;
width: 100%;
}
.calendar-tabcontent {
width: 100%;
padding: 0 0 8px 0;
}
#calendarTabCalendar3 { display: block; }
#calendarTabPruning3 { display: none; }
#calendarTabPregrow3 { display: none; }
#calendarTabAftergrow3 { display: none; }
#calendarTabNeighbour3 { display: none; }
<div class="calendar-fold">Collapsible</div>
<div class="calendar-unfold">
<div class="calendar-tabbuttongroup">
<div class="calendar-tabbutton calendarTabbtnCalendar" onclick="calendarTabCalendarBtn3();">Btn 1</div>
<div class="calendar-tabbutton calendarTabbtnPruning" onclick="calendarTabPruningBtn3();">Btn 2</div>
<div class="calendar-tabbutton calendarTabbtnPregrow" onclick="calendarTabPregrowBtn3();">Btn 3</div>
<div class="calendar-tabbutton calendarTabbtnAftergrow" onclick="calendarTabAftergrowBtn3();">Btn 4</div>
<div class="calendar-tabbutton calendarTabbtnNeighbour" onclick="calendarTabNeighbourBtn3();">Btn 5</div>
</div>
<div class="calendar-tabgroup">
<div class="calendar-tabcontent" id="calendarTabCalendar3">
<div class="calendar-moreinfo">
<p class="calendar-pc">
Some default content<br>
Some default content<br>
Some default content
<hr>
</p>
</div>
</div>
<div class="calendar-tabcontent" id="calendarTabPruning3">
<div class="calendar-moreinfo">
<p class="calendar-pc">
Some small content<br>
Some small content
<hr>
</p>
</div>
</div>
<div class="calendar-tabcontent" id="calendarTabPregrow3">
<div class="calendar-moreinfo">
<p class="calendar-pc">
Some large content<br>
Some large content<br>
Some large content<br>
Some large content<br>
Some large content<br>
Some large content
<hr>
</p>
</div>
</div>
<div class="calendar-tabcontent" id="calendarTabAftergrow3">
<div class="calendar-moreinfo">
<p class="calendar-pc">
Some medium content<br>
Some medium content<br>
Some medium content<br>
Some medium content
<hr>
</p>
</div>
</div>
<div class="calendar-tabcontent" id="calendarTabNeighbour3">
<div class="calendar-moreinfo">
<p class="calendar-pc">
Some small content<br>
Some small content
<hr>
</p>
</div>
</div>
</div>
</div>
【问题讨论】:
-
虽然面板不应该需要最大高度;块元素只有它需要的大小。它应该根据内部最高元素的高度调整大小。如果您需要这方面的帮助,我们需要一个合适的minimal reproducible example。
-
我们至少需要查看 HTML 以便
getElementsByClassName("calendar-fold")将返回一个我们可以检查的有用集合。 -
谢谢,我已经用 sn-p 编辑了我的帖子
标签: javascript css tabs panel