📅  最后修改于: 2023-12-03 15:23:52.499000             🧑  作者: Mango
在网页中,经常会遇到需要展开或收缩内容的情况,例如,展开一篇文章的评论,收缩一些选项,等等。本文将介绍如何使用 HTML、CSS 和 JavaScript 在滚动上创建收缩标题。
首先,我们需要在 HTML 中创建标题和内容的结构。我们可以使用 div 元素来包含一个标题和一个内容区域:
<div class="expandable">
<div class="header">
<h2>Title</h2>
</div>
<div class="content">
<p>Content goes here.</p>
</div>
</div>
在这个例子中,我们给最外层的 div 元素添加了一个类名 expandable。我们还可以给标题和内容分别添加类名 header 和 content。这些类名将在 CSS 中使用。
接下来,我们需要使用 CSS 样式来隐藏内容区域,并设置展开和收缩的动画效果。
.expandable .content {
max-height: 0;
overflow: hidden;
transition: max-height 0.3s ease-out;
}
.expandable.active .content {
max-height: 500px;
transition: max-height 0.5s ease-in;
}
这个 CSS 样式的作用是将内容区域的最大高度设置为 0,使其隐藏起来。我们还为 .content 添加了 transition 属性,使展开和收缩的效果更加平滑。
我们还为 .expandable.active .content 添加了另一组样式,当 .expandable 元素被激活时,即被用户点击后,展开内容区域。这里我们将最大高度设置为 500px,你可以根据实际需求进行修改。
最后,我们需要使用 JavaScript 来添加事件监听器,当用户点击标题时,切换 .expandable 元素的状态。
const expanders = document.querySelectorAll(".expandable");
expanders.forEach(expander => {
const header = expander.querySelector(".header");
header.addEventListener("click", () => {
expander.classList.toggle("active");
});
});
这里我们使用了 document.querySelectorAll() 方法来选择所有带有类名 expandable 的元素。然后我们使用 forEach() 循环遍历每个元素,并为每个元素的标题添加一个 click 事件监听器。当用户点击标题时,我们使用 classList.toggle() 方法来切换元素的状态。
综合上述的 HTML、CSS、JavaScript 代码片段,我们得到以下完整代码:
<div class="expandable">
<div class="header">
<h2>Title</h2>
</div>
<div class="content">
<p>Content goes here.</p>
</div>
</div>
<style>
.expandable .content {
max-height: 0;
overflow: hidden;
transition: max-height 0.3s ease-out;
}
.expandable.active .content {
max-height: 500px;
transition: max-height 0.5s ease-in;
}
</style>
<script>
const expanders = document.querySelectorAll(".expandable");
expanders.forEach(expander => {
const header = expander.querySelector(".header");
header.addEventListener("click", () => {
expander.classList.toggle("active");
});
});
</script>
运行这段代码,你将看到一个可收缩的标题和内容区域。
如果想要进一步了解如何优化收缩标题的效果,可以参考以下文章: