Toggle navigation
☰
Home
HTML
CSS
Scripting
Database
<!DOCTYPE html> <title>My Example</title> <style> .wizard-form-container { max-width: 600px; margin: 40px auto; background: #fff; border-radius: 8px; padding: 30px; box-shadow: 0 4px 15px rgba(0,0,0,0.1); font-family: sans-serif; } /* -- Progress Bar -- */ .progress-bar { display: flex; justify-content: space-between; list-style: none; padding: 0; margin-bottom: 30px; position: relative; } .progress-bar::before { content: ''; position: absolute; top: 50%; left: 0; width: 100%; height: 4px; background-color: #ddd; transform: translateY(-50%); z-index: 1; } .progress-step { width: 30px; height: 30px; background-color: #ddd; color: #fff; border-radius: 50%; display: flex; justify-content: center; align-items: center; font-weight: bold; z-index: 2; position: relative; transition: background-color 0.3s; } .progress-step.active { background-color: #007bff; } .progress-step.completed { background-color: #28a745; } .progress-step.completed::after { content: '\2713'; /* Checkmark */ color: #fff; } /* -- Form Steps -- */ .form-step { display: none; /* Hide all steps by default */ } .form-step.active { display: block; /* Show only the active step */ } /* -- Form Elements -- */ .form-group { margin-bottom: 20px; } .form-group label { display: block; margin-bottom: 5px; font-weight: 500; } .form-group input { width: 100%; padding: 10px; border: 1px solid #ccc; border-radius: 4px; font-size: 1rem; box-sizing: border-box; } /* -- Navigation Buttons -- */ .form-buttons { display: flex; justify-content: space-between; margin-top: 30px; } .btn { padding: 10px 20px; border: none; border-radius: 4px; background-color: #007bff; color: white; font-size: 1rem; cursor: pointer; } .btn-prev { background-color: #6c757d; } .btn:disabled { background-color: #ccc; cursor: not-allowed; } </style> <div class="wizard-form-container"> <form id="multiStepForm" action="#" method="post"> <!-- Progress Bar --> <ol class="progress-bar"> <li class="progress-step" data-step="1">1</li> <li class="progress-step" data-step="2">2</li> <li class="progress-step" data-step="3">3</li> </ol> <!-- Step 1: Personal Info --> <div class="form-step active" data-step="1"> <div class="form-group"> <label for="name">Name</label> <input type="text" id="name" name="name" required> </div> <div class="form-group"> <label for="email">Email</label> <input type="email" id="email" name="email" required> </div> </div> <!-- Step 2: Account Setup --> <div class="form-step" data-step="2"> <div class="form-group"> <label for="username">Username</label> <input type="text" id="username" name="username" required> </div> <div class="form-group"> <label for="password">Password</label> <input type="password" id="password" name="password" required> </div> </div> <!-- Step 3: Preferences --> <div class="form-step" data-step="3"> <div class="form-group"> <label for="newsletter">Newsletter preference?</label> <select id="newsletter" name="newsletter"> <option value="daily">Daily</option> <option value="weekly">Weekly</option> <option value="monthly">Monthly</option> </select> </div> </div> <!-- Navigation Buttons --> <div class="form-buttons"> <button type="button" class="btn btn-prev" id="prevBtn" disabled>Previous</button> <button type="button" class="btn" id="nextBtn">Next</button> </div> </form> </div> <script> const prevBtn = document.getElementById('prevBtn'); const nextBtn = document.getElementById('nextBtn'); const form = document.getElementById('multiStepForm'); const formSteps = Array.from(document.querySelectorAll('.form-step')); const progressSteps = Array.from(document.querySelectorAll('.progress-step')); let currentStep = 0; function showStep(stepIndex) { // Show the active step, hide others formSteps.forEach((step, index) => { step.classList.toggle('active', index === stepIndex); }); // Update progress bar progressSteps.forEach((step, index) => { step.classList.toggle('completed', index < stepIndex); step.classList.toggle('active', index === stepIndex); }); // Update buttons prevBtn.disabled = stepIndex === 0; nextBtn.textContent = (stepIndex === formSteps.length - 1) ? 'Submit' : 'Next'; } function validateCurrentStep() { const currentFormStep = formSteps[currentStep]; const inputs = currentFormStep.querySelectorAll('input[required]'); for (const input of inputs) { if (!input.value.trim()) { alert(`Please fill out the ${input.name} field.`); return false; } } return true; } nextBtn.addEventListener('click', () => { if (!validateCurrentStep()) return; if (currentStep < formSteps.length - 1) { currentStep++; showStep(currentStep); } else { // Final step reached, submit form manually form.submit(); } }); prevBtn.addEventListener('click', () => { if (currentStep > 0) { currentStep--; showStep(currentStep); } }); // Initialize showStep(currentStep); </script>