JS 特效 词条目录
前端Wiki/JS 特效/滑动与切换/内容切换

选项卡 Tabs

选项卡(Tabs):点击标签切换内容面板,Web 最常见的组件之一。结构:标签栏 + 面板组,JS 点击时给标签和面板同时切 .active,底层内容用 display:none 切换。

面板切换的两种做法:display:none(瞬时、不保留状态)或 active 面板 absolute 叠加(可加过渡动画);加动画时注意先将新面板 opacity:0 → 1 渐入。

  • 标签与面板用 data-tab 属性一一对应
  • 点击时先全部清除 active 再给当前项加
  • 可用 role="tab"/aria-selected 增强可访问性
HTML
<style>
#tabs { max-width: 420px; margin: 20px auto; font-family: sans-serif; }
#tabs .heads { display: flex; gap: 4px; border-bottom: 2px solid #f0e6ff; }
#tabs .heads button { flex: 1; padding: 10px; border: none; background: none;
                      cursor: pointer; font-size: 14px; color: #888;
                      border-bottom: 2px solid transparent; margin-bottom: -2px; }
#tabs .heads button.on { color: #a371f7; border-bottom-color: #a371f7; font-weight: 700; }
#tabs .panel { display: none; padding: 16px; background: #faf7ff; border-radius: 0 0 10px 10px; }
#tabs .panel.on { display: block; animation: tabIn .3s ease; }
@keyframes tabIn { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; } }
</style>
<div id="tabs">
  <div class="heads">
    <button class="on" data-tab="p1">标签一</button>
    <button data-tab="p2">标签二</button>
    <button data-tab="p3">标签三</button>
  </div>
  <div class="panel on" id="p1">这是第一个面板的内容</div>
  <div class="panel" id="p2">第二个面板:切换有淡入动画</div>
  <div class="panel" id="p3">第三个面板:结构标签栏 + 面板组</div>
</div>
<script>
var tabs = document.getElementById('tabs');
tabs.querySelector('.heads').addEventListener('click', function (e) {
  var btn = e.target.closest('button'); if (!btn) return;
  tabs.querySelectorAll('.heads button').forEach(function (b) { b.classList.remove('on'); });
  tabs.querySelectorAll('.panel').forEach(function (p) { p.classList.remove('on'); });
  btn.classList.add('on');
  document.getElementById(btn.dataset.tab).classList.add('on');
});
</script>
本节要点Tabs = data 属性对应 + 统一切 active;面板淡入用 animation tabIn。
🔗 相关词条DOM事件JavaScript