<script src="https://cdn.tailwindcss.com"></script> <script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js"></script> <script type="module" src="https://unpkg.com/ionicons@7.1.0/dist/ionicons/ionicons.esm.js"></script> <script nomodule src="https://unpkg.com/ionicons@7.1.0/dist/ionicons/ionicons.js"></script> <body class="bg-gray-50 min-h-screen p-8"> <div class="max-w-6xl mx-auto"> <h1 class="text-4xl font-bold text-gray-900 mb-2">Animated Button Examples</h1> <p class="text-gray-600 mb-12">Minimal and professional button designs with smooth animations</p> <!-- Row 1: Slide and Scale Effects --> <div class="mb-16"> <h2 class="text-2xl font-semibold text-gray-800 mb-6">Slide & Scale Effects</h2> <div class="flex flex-wrap gap-4"> <!-- Slide Right Button --> <button class="group relative px-6 py-3 font-medium text-white bg-blue-600 rounded-lg overflow-hidden transition-all duration-300 hover:bg-blue-700"> <span class="relative z-10 flex items-center gap-2"> <ion-icon name="arrow-forward-outline" class="text-xl transition-transform duration-300 group-hover:translate-x-1"></ion-icon> Slide Right </span> </button> <!-- Scale Up Button --> <button class="px-6 py-3 font-medium text-white bg-purple-600 rounded-lg transition-all duration-300 hover:scale-105 hover:bg-purple-700 hover:shadow-lg flex items-center gap-2"> <ion-icon name="expand-outline" class="text-xl"></ion-icon> Scale Up </button> <!-- Slide Background Button --> <button class="group relative px-6 py-3 font-medium text-white bg-gray-900 rounded-lg overflow-hidden"> <span class="absolute inset-0 bg-gradient-to-r from-blue-600 to-purple-600 transform -translate-x-full transition-transform duration-300 group-hover:translate-x-0"></span> <span class="relative z-10 flex items-center gap-2"> <ion-icon name="color-wand-outline" class="text-xl"></ion-icon> Slide Fill </span> </button> </div> </div> <!-- Row 2: Border and Glow Effects --> <div class="mb-16"> <h2 class="text-2xl font-semibold text-gray-800 mb-6">Border & Glow Effects</h2> <div class="flex flex-wrap gap-4"> <!-- Border Expand Button --> <button class="group relative px-6 py-3 font-medium text-gray-900 bg-white border-2 border-gray-900 rounded-lg overflow-hidden transition-all duration-300 hover:text-white"> <span class="absolute inset-0 bg-gray-900 transform scale-x-0 origin-left transition-transform duration-300 group-hover:scale-x-100"></span> <span class="relative z-10 flex items-center gap-2"> <ion-icon name="git-compare-outline" class="text-xl"></ion-icon> Border Expand </span> </button> <!-- Glow Button --> <button class="px-6 py-3 font-medium text-white bg-gradient-to-r from-pink-500 to-rose-500 rounded-lg transition-all duration-300 hover:shadow-[0_0_20px_rgba(236,72,153,0.5)] hover:scale-105 flex items-center gap-2"> <ion-icon name="sparkles-outline" class="text-xl"></ion-icon> Glow Effect </button> <!-- Outline to Fill Button --> <button class="group px-6 py-3 font-medium text-emerald-600 border-2 border-emerald-600 rounded-lg transition-all duration-300 hover:bg-emerald-600 hover:text-white flex items-center gap-2"> <ion-icon name="checkmark-circle-outline" class="text-xl"></ion-icon> Outline Fill </button> </div> </div> <!-- Row 3: Icon and Loading Effects --> <div class="mb-16"> <h2 class="text-2xl font-semibold text-gray-800 mb-6">Icon & Loading Effects</h2> <div class="flex flex-wrap gap-4"> <!-- Icon Rotate Button --> <button class="group px-6 py-3 font-medium text-white bg-indigo-600 rounded-lg transition-all duration-300 hover:bg-indigo-700 flex items-center gap-2"> <ion-icon name="refresh-outline" class="text-xl transition-transform duration-500 group-hover:rotate-180"></ion-icon> Icon Rotate </button> <!-- Shimmer Button --> <button class="shimmer relative px-6 py-3 font-medium text-white bg-gradient-to-r from-amber-500 to-orange-500 rounded-lg overflow-hidden flex items-center gap-2"> <ion-icon name="flash-outline" class="text-xl"></ion-icon> Shimmer Effect </button> <!-- Loading Button with Alpine --> <div x-data="{ loading: false }"> <button @click="loading = true; setTimeout(() => loading = false, 2000)" :disabled="loading" class="px-6 py-3 font-medium text-white bg-teal-600 rounded-lg transition-all duration-300 hover:bg-teal-700 disabled:opacity-75 disabled:cursor-not-allowed flex items-center gap-2 min-w-[140px] justify-center" > <ion-icon :name="loading ? 'hourglass-outline' : 'download-outline'" class="text-xl" :class="{ 'animate-spin': loading }" ></ion-icon> <span x-text="loading ? 'Loading...' : 'Download'"></span> </button> </div> </div> </div> <!-- Row 4: Advanced Effects --> <div class="mb-16"> <h2 class="text-2xl font-semibold text-gray-800 mb-6">Advanced Effects</h2> <div class="flex flex-wrap gap-4"> <!-- Ripple Effect Button --> <div x-data="{ ripple: false }"> <button @click="ripple = true; setTimeout(() => ripple = false, 600)" class="relative px-6 py-3 font-medium text-white bg-cyan-600 rounded-lg overflow-hidden transition-all duration-300 hover:bg-cyan-700 flex items-center gap-2" > <span x-show="ripple" x-transition:enter="transition ease-out duration-600" x-transition:enter-start="opacity-100 scale-0" x-transition:enter-end="opacity-0 scale-150" class="absolute inset-0 bg-white rounded-full" ></span> <ion-icon name="radio-button-on-outline" class="text-xl relative z-10"></ion-icon> <span class="relative z-10">Ripple Click</span> </button> </div> <!-- Bounce Button --> <button class="px-6 py-3 font-medium text-white bg-red-600 rounded-lg transition-all duration-300 hover:bg-red-700 hover:animate-bounce flex items-center gap-2"> <ion-icon name="heart-outline" class="text-xl"></ion-icon> Bounce </button> <!-- 3D Lift Button --> <button class="px-6 py-3 font-medium text-white bg-violet-600 rounded-lg transition-all duration-300 hover:bg-violet-700 hover:shadow-[0_10px_20px_rgba(139,92,246,0.3)] hover:-translate-y-1 flex items-center gap-2"> <ion-icon name="cube-outline" class="text-xl"></ion-icon> 3D Lift </button> </div> </div> <!-- Row 5: State Buttons --> <div> <h2 class="text-2xl font-semibold text-gray-800 mb-6">Interactive States</h2> <div class="flex flex-wrap gap-4"> <!-- Toggle Button --> <div x-data="{ active: false }"> <button @click="active = !active" :class="active ? 'bg-green-600 hover:bg-green-700' : 'bg-gray-600 hover:bg-gray-700'" class="px-6 py-3 font-medium text-white rounded-lg transition-all duration-300 flex items-center gap-2" > <ion-icon :name="active ? 'checkmark-circle' : 'ellipse-outline'" class="text-xl"></ion-icon> <span x-text="active ? 'Active' : 'Inactive'"></span> </button> </div> <!-- Counter Button --> <div x-data="{ count: 0 }"> <button @click="count++" class="group px-6 py-3 font-medium text-white bg-orange-600 rounded-lg transition-all duration-300 hover:bg-orange-700 hover:scale-105 flex items-center gap-2" > <ion-icon name="add-circle-outline" class="text-xl transition-transform duration-300 group-hover:rotate-90"></ion-icon> <span>Clicked: <span x-text="count" class="font-bold"></span></span> </button> </div> <!-- Success Button --> <div x-data="{ success: false }"> <button @click="success = true; setTimeout(() => success = false, 2000)" :class="success ? 'bg-green-600' : 'bg-slate-600 hover:bg-slate-700'" class="px-6 py-3 font-medium text-white rounded-lg transition-all duration-300 flex items-center gap-2 min-w-[130px] justify-center" > <ion-icon :name="success ? 'checkmark-done-outline' : 'paper-plane-outline'" class="text-xl transition-all duration-300" :class="{ 'scale-125': success }" ></ion-icon> <span x-text="success ? 'Success!' : 'Submit'"></span> </button> </div> </div> </div> </div>
@keyframes shimmer { 0% { transform: translateX(-100%); } 100% { transform: translateX(100%); } } .shimmer::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(255,255,255,0.3), transparent); animation: shimmer 2s infinite; }
Login to leave a comment
No comments yet. Be the first!
View Project
No comments yet. Be the first!