【发布时间】:2021-10-30 04:09:23
【问题描述】:
我在使用 ReactJS 手风琴进行转换时遇到了这个问题。在没有看到问题的情况下,我在香草中创建了这个 sn-p 并发生了接缝!
const acs = document.querySelectorAll('.accordion');
acs.forEach((a, i) => {
a.addEventListener('click', () => {
acs.forEach((aa, ii) => {
aa.classList.toggle('expanded', i === ii);
})
})
})
.accordion {
padding: 0.5em;
margin-bottom: 1em;
background: #f3f3f3;
}
.accordion p:last-child {
overflow: hidden;
margin: 0;
max-height: 0;
transition: 1s linear max-height;
}
.accordion.expanded p:last-child {
max-height: 100px;
}
<div class="accordion">
<p>toggle me</p>
<p>lorem ipsum</p>
</div>
<div class="accordion">
<p>toggle me</p>
<p>lorem ipsum</p>
</div>
<div class="accordion">
<p>toggle me</p>
<p>lorem ipsum</p>
</div>
为什么转换不会同时发生?没有setTimeout 或transition-delay
似乎我对 css 过渡感到生疏
-编辑-
注意到,如果我在 height 上应用转换,它会按预期工作,但容器的高度超过了内容所需的高度。如何使用 max-height 实现它?
const acs = document.querySelectorAll('.accordion');
acs.forEach((a, i) => {
a.addEventListener('click', () => {
acs.forEach((aa, ii) => {
aa.classList.toggle('expanded', i === ii);
})
})
})
.accordion {
padding: 0.5em;
margin-bottom: 1em;
background: #f3f3f3;
}
.accordion p:last-child {
overflow: hidden;
margin: 0;
height: 0;
transition: 1s linear height;
outline: 1px dashed red;
}
.accordion.expanded p:last-child {
height: 1em;
}
<div class="accordion">
<p>toggle me</p>
<p>lorem ipsum</p>
</div>
<div class="accordion">
<p>toggle me</p>
<p>lorem ipsum</p>
</div>
<div class="accordion">
<p>toggle me</p>
<p>lorem ipsum</p>
</div>
【问题讨论】:
-
@biberman - 代码并没有那么凌乱,请注意有些人很难清楚地看到如此小的缩进。例如,OP 更宽的缩进让我更容易阅读。
-
哦,对不起。刚刚看到段落的未整理的innerText,并没有意识到缩进更宽......
标签: javascript css css-transitions toggle