耍花招
How can I transition height: 0; to height: auto; using CSS?
:
var acc = document.getElementsByClassName("accordion");
for (var i = 0; i < acc.length; i++) {
acc[i].addEventListener("click", function() {
this.classList.toggle("active");
var panel = this.nextElementSibling;
panel.classList.toggle("active");
});
}
.accordion {
background-color: #00827D;
color: White;
cursor: pointer;
padding: 18px;
width: 100%;
border: none;
text-align: left;
outline: none;
font-size: 15px;
}
.active,
.accordion:hover {
background-color: #00827D;
}
.panel {
padding: 0 18px;
max-height: 0;
background-color: white;
overflow: hidden;
transition: all 3s ease;
}
.panel.active {
max-height: 100vh;
}
<h2>Accordion</h2>
<div class="accordion">Section 1</div>
<div class="panel">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
</div>
<button class="accordion">Section 2</button>
<div class="panel">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
</div>
<button class="accordion">Section 3</button>
<div class="panel">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
</div>
诀窍是改变
max-height
而不是
display
因为这允许平稳过渡。从占用空间到顺利改变是不可能的(
display: block
)消失(
display: none
)反之亦然。