dom_dom0900_005

タブ切り替えUIで、選択中タブのパネルのみを表示する最も簡潔な方法はどれですか?

  1. すべてのパネルにdisplay: blockを設定する
  2. 選択中以外のパネルへhidden属性やaria-hidden=”true”相当を付ける
  3. visibility: collapseを全パネルに付ける
  4. CSSアニメーションで非表示に見せる
正解
  1. 選択中以外のパネルへhidden属性やaria-hidden=”true”相当を付ける
解説

不要なパネルはhiddenやdisplay:noneで非表示にし、選択中のみ表示します。同時にaria-selectedやaria-controlsなどのARIA属性を適切に更新するとアクセシビリティが向上します。

使用例(サンプルコード)

[ html ]

<div role="tablist">
  <button role="tab" aria-controls="p1" aria-selected="true">Tab1</button>
  <button role="tab" aria-controls="p2">Tab2</button>
</div>
<div id="p1" role="tabpanel">Content 1</div>
<div id="p2" role="tabpanel" hidden>Content 2</div>
<script>
const tabs = document.querySelectorAll('[role="tab"]');
tabs.forEach(tab => tab.addEventListener('click', () => {
  tabs.forEach(t => { t.setAttribute('aria-selected','false'); document.getElementById(t.getAttribute('aria-controls')).hidden = true; });
  tab.setAttribute('aria-selected','true');
  document.getElementById(tab.getAttribute('aria-controls')).hidden = false;
}));
</script>