Skip to content

Instantly share code, notes, and snippets.

@FloKnapp
Created July 4, 2025 19:15
Show Gist options
  • Save FloKnapp/b0a791dbfa21ac283a6804039848a353 to your computer and use it in GitHub Desktop.
Save FloKnapp/b0a791dbfa21ac283a6804039848a353 to your computer and use it in GitHub Desktop.
Super small tab system for the web
// HTML
<div class="tabContainer">
<div class="tabs">
<div class="tab">Tab Selector 1</div>
<div class="tab">Tab Selector 2</div>
<div class="tab">Tab Selector 3</div>
</div>
<div class="contents">
<div class="content">
// Content for Tab Selector 1
</div>
<div class="content">
// Content for Tab Selector 2
</div>
<div class="content">
// Content for Tab Selector 3
</div>
</div>
</div>
// JS
const tabContainer = document.querySelector('.tabContainer');
const tabs = tabContainer.querySelectorAll('.tabs .tab');
const contents = tabContainer.querySelectorAll('.contents .content');
let tabCount = 0;
let contentCount = 0;
tabs.forEach((item) => {
item.dataset.id = 'tab_' + tabCount;
item.addEventListener('click', function(e) {
const target = tabContainer.querySelector('[data-id="tabContent_' + this.dataset.id.substring(4) + '"]');
if (!target) {
return;
}
contents.forEach((item) => {
item.classList.add('hidden');
});
target.classList.remove('hidden');
tabs.forEach((item) => {
item.classList.remove('active');
})
this.classList.add('active');
});
tabCount++;
});
contents.forEach((item) => {
item.dataset.id = 'tabContent_' + contentCount;
item.classList.add('hidden');
if (contentCount === 0) {
item.classList.remove('hidden');
tabs[0].classList.add('active');
}
contentCount++;
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment