手风琴是一种常见的网页效果,可以通过 CSS 实现。实现手风琴效果的关键是利用 CSS3 中的 transition 和 transform 属性。
首先,我们需要一个 HTML 结构,可以使用无序列表 <ul> 和列表项 <li> 来实现。每个列表项包含一个标题和一个内容区域,标题和内容区域分别用 <div> 元素包裹。
<ul class="accordion">
  <li>
    <div class="title">标题1</div>
    <div class="content">内容1</div>
  </li>
  <li>
    <div class="title">标题2</div>
    <div class="content">内容2</div>
  </li>
  <li>
    <div class="title">标题3</div>
    <div class="content">内容3</div>
  </li>
</ul>
然后,我们需要使用 CSS 来定义样式。首先,设置列表项的样式,包括设置标题和内容区域的宽度、高度、背景颜色、边框等。然后,设置标题的样式,包括设置鼠标指针样式、背景颜色、文本颜色等。最后,设置内容区域的样式,包括设置过渡效果、高度、文本颜色等。
.accordion {
  list-style: none;
  margin: 0;
  padding: 0;
}
.accordion li {
  margin-bottom: 10px;
  border: 1px solid #ccc;
  overflow: hidden;
}
.accordion li .title {
  cursor: pointer;
  padding: 10px;
  background-color: #eee;
  color: #333;
}
.accordion li .content {
  height: 0;
  overflow: hidden;
  transition: height 0.3s ease;
  background-color: #fff;
  color: #333;
}
.accordion li.active .content {
  height: auto;
}
在 CSS 中,我们使用 .accordion 类来设置列表的样式,使用 .accordion li 类来设置列表项的样式,使用 .accordion li .title 类来设置标题的样式,使用 .accordion li .content 类来设置内容区域的样式。
注意,我们使用了 transition 属性来实现平滑的过渡效果,使用了 transform 属性来实现旋转和缩放效果。我们还定义了一个 active 类,用来表示当前处于展开状态的列表项。
最后,我们需要使用 JavaScript 来实现交互效果。当用户点击标题时,我们需要切换 active 类,以展开或收起内容区域。
var accordion = document.querySelector('.accordion');
accordion.addEventListener('click', function(event) {
  if (event.target.classList.contains('title')) {
    var li = event.target.parentNode;
    li.classList.toggle('active');
  }
});
在 JavaScript 中,我们使用 querySelector 方法来获取列表元素,使用 addEventListener 方法来监听 click 事件。当用户点击标题时,我们检查事件目标元素是否包含 title 类,如果包含,则获取其父节点 li,并切换其 active 类。
这样,我们就实现了一个简单的手风琴效果。可以通过调整 CSS 中的样式和 JavaScript 中的代码,来实现不同的手风琴效果。