TRACKS
TITLE TIME BPM KEY
Blocks (Hip Hop)
Track (EDM)
HTML
<section class="tracks-section">
<h1 class="section-title">TRACKS</h1>
<div class="genre-tabs">
<button class="tab active" data-genre="all">All</button>
<button class="tab" data-genre="hiphop">Hip-Hop</button>
<button class="tab" data-genre="edm">EDM</button>
<button class="tab" data-genre="ambient">Ambient</button>
</div>
<div class="track-header">
<span>TITLE</span>
<span>TIME</span>
<span>BPM</span>
<span>KEY</span>
</div>
<div class="track-list">
<div class="track" data-genre="hiphop">
<div class="track-info">
<p class="title">Blocks (Hip Hop)</p>
<p class="author">Badaboom</p>
</div>
<span class="time">02:34</span>
<span class="bpm">140</span>
<span class="key">C# Major</span>
<audio controls src="audio/blocks.mp3"></audio>
</div>
<div class="track" data-genre="edm">
<div class="track-info">
<p class="title">Track (EDM)</p>
<p class="author">Badaboom</p>
</div>
<span class="time">02:34</span>
<span class="bpm">140</span>
<span class="key">C# Major</span>
<audio controls src="audio/blocks.mp3"></audio>
</div>
</div>
</section>
CSS
body {
margin: 0;
font-family: "Arial", sans-serif;
background-color: #111;
color: white;
}
.tracks-section {
max-width: 960px;
margin: 50px auto;
padding: 0 20px;
}
.section-title {
text-align: center;
font-size: 48px;
font-weight: 900;
letter-spacing: 2px;
}
.genre-tabs {
display: flex;
justify-content: center;
gap: 20px;
margin: 30px 0;
}
.tab {
padding: 10px 20px;
border: none;
background: none;
color: white;
font-size: 16px;
cursor: pointer;
border-bottom: 2px solid transparent;
}
.tab.active {
background-color: #ff5a00;
color: black;
border-radius: 5px;
}
.track-header {
display: grid;
grid-template-columns: 2fr 1fr 1fr 1fr;
margin-bottom: 10px;
border-bottom: 1px solid #888;
padding-bottom: 8px;
font-weight: bold;
text-transform: uppercase;
font-size: 14px;
}
.track {
display: grid;
grid-template-columns: 2fr 1fr 1fr 1fr;
align-items: center;
margin: 20px 0;
gap: 20px;
}
.track-info .title {
font-weight: bold;
font-size: 16px;
margin: 0;
}
.track-info .author {
font-size: 14px;
color: #aaa;
margin: 4px 0 0;
}
audio {
grid-column: 1 / -1;
width: 100%;
margin-top: 10px;
border-radius: 8px;
}
JS
document.addEventListener("DOMContentLoaded", () => {
const tabs = document.querySelectorAll(".tab");
const tracks = document.querySelectorAll(".track");
function filterTracksByGenre(genre) {
tracks.forEach((track) => {
const trackGenre = track.dataset.genre;
if (genre === "all" || trackGenre === genre) {
track.style.display = "grid";
} else {
track.style.display = "none";
}
});
}
tabs.forEach((tab) => {
tab.addEventListener("click", () => {
tabs.forEach((t) => t.classList.remove("active"));
tab.classList.add("active");
const selectedGenre = tab.dataset.genre;
filterTracksByGenre(selectedGenre);
});
});
const activeTab = document.querySelector(".tab.active");
const initialGenre = activeTab ? activeTab.dataset.genre : "all";
filterTracksByGenre(initialGenre);
});