UI tab canggih dengan garis bawah geser halus yang mengikuti pengguna saat mereka beralih antar tab.
transition atau transform CSS, kami menerapkan gerakan di mana garis bawah meluncur.Ini memberikan masukan yang bagus bahwa Anda telah berpindah tab.indigo-600 menjadi blue-500 atau emerald-600 agar sesuai dengan warna merek.width dan transform) agar sesuai dengan jumlah tab.<div class="max-w-md mx-auto">
<div class="relative flex border-b border-gray-200 dark:border-zinc-800">
<button class="tab-btn flex-1 py-3 text-sm font-medium text-indigo-600 dark:text-indigo-400" data-target="tab1">Account</button>
<button class="tab-btn flex-1 py-3 text-sm font-medium text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200" data-target="tab2">Security</button>
<button class="tab-btn flex-1 py-3 text-sm font-medium text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200" data-target="tab3">Notifications</button>
<div id="tab-indicator" class="absolute bottom-0 left-0 h-0.5 bg-indigo-600 dark:bg-indigo-400 transition-all duration-300 ease-out" style="width: 33.33%; transform: translateX(0%);"></div>
</div>
<div class="pt-4">
<div id="tab1" class="tab-content text-gray-600 dark:text-gray-300 text-sm">Account settings content goes here. Manage your profile details.</div>
<div id="tab2" class="tab-content hidden text-gray-600 dark:text-gray-300 text-sm">Security settings content goes here. Change your password.</div>
<div id="tab3" class="tab-content hidden text-gray-600 dark:text-gray-300 text-sm">Notification preferences go here. Manage email alerts.</div>
</div>
</div>
<script>
const btns = document.querySelectorAll('.tab-btn');
const contents = document.querySelectorAll('.tab-content');
const indicator = document.getElementById('tab-indicator');
btns.forEach((btn, i) => {
btn.addEventListener('click', () => {
btns.forEach(b => {
b.classList.remove('text-indigo-600', 'dark:text-indigo-400');
b.classList.add('text-gray-500', 'dark:text-gray-400');
});
btn.classList.remove('text-gray-500', 'dark:text-gray-400');
btn.classList.add('text-indigo-600', 'dark:text-indigo-400');
indicator.style.transform = `translateX(${i * 100}%)`;
contents.forEach(c => c.classList.add('hidden'));
document.getElementById(btn.dataset.target).classList.remove('hidden');
});
});
</script>