An all-in-one wizard plugin that is extremely flexible, compact and feature-rich. Demo page.

<!-- Css --><link rel="stylesheet" href="vendors/form-wizard/jquery.steps.css" type="text/css"><!-- Javascript --><script src="vendors/form-wizard/jquery.steps.min.js"></script>
Basic Content Wizard

Below is an example of a basic horizontal form wizard.

Personal Information

Personal Information

Try the keyboard navigation by clicking arrow left or right!

Billing Information

Payment Details

<div id="wizard-example">  <h3>Personal Information</h3>  <section class="card card-body border mb-0">    <h5>Personal Information</h5>    <p>Try the keyboard navigation by clicking arrow left or right!</p>  </section>  <h3>Billing Information</h3>  <section class="card card-body border mb-0">    <h5>Billing Information</h5>    <p>Wonderful transition effects.</p>  </section>  <h3>Payment Details</h3>  <section class="card card-body border mb-0">    <h5>Payment Details</h5>    <p>The next and previous buttons help you to navigate through your content.</p>  </section></div>
$('#wizard-example').steps({    headerTag: 'h3',    bodyTag: 'section',    autoFocus: true,    titleTemplate: '<span class="wizard-index">#index#</span> #title#'});
Basic Form Wizard with Validation

Personal Information

Personal Information

Try the keyboard navigation by clicking arrow left or right!

Looks good!
Looks good!

Billing Information

Payment Details

<div id="wizard-example">    <h3>Personal Information</h3>    <section class="card card-body border mb-0">        <h5>Personal Information</h5>        <p>Try the keyboard navigation by clicking arrow left or right!</p>        <form id="form1">            <div class="form-group wd-xs-300">                <label>First name</label>                <input type="text" class="form-control" placeholder="First name" required>                <div class="valid-feedback">                    Looks good!                </div>            </div>            <div class="form-group wd-xs-300">                <label>Last name</label>                <input type="text" class="form-control" name="lastname" placeholder="Enter lastname"                       required>                <div class="valid-feedback">                    Looks good!                </div>            </div>        </form>    </section>    <h3>Billing Information</h3>    <section class="card card-body border mb-0">        <h5>Billing Information</h5>        <p>Wonderful transition effects.</p>        <form id="form2">            <div class="form-group wd-xs-300">                <label class="form-control-label">Email: <span class="tx-danger">*</span></label>                <input id="email" class="form-control" name="email" placeholder="Enter email address"                       type="email" required>                <div class="valid-feedback">                    Looks good!                </div>            </div>        </form>    </section>    <h3>Payment Details</h3>    <section class="card card-body border mb-0">        <h5>Payment Details</h5>        <p>The next and previous buttons help you to navigate through your content.</p>    </section></div>
$('#wizard-example').steps({    headerTag: 'h3',    bodyTag: 'section',    autoFocus: true,    titleTemplate: '<span class="wizard-index">#index#</span> #title#',    onStepChanging: function (event, currentIndex, newIndex) {        if (currentIndex < newIndex) {            var form = document.getElementById('form1'),                form2 = document.getElementById('form2');            if (currentIndex === 0) {                if (form.checkValidity() === false) {                    event.preventDefault();                    event.stopPropagation();                    form.classList.add('was-validated');                } else {                    return true;                }            } else if (currentIndex === 1) {                if (form2.checkValidity() === false) {                    event.preventDefault();                    event.stopPropagation();                    form2.classList.add('was-validated');                } else {                    return true;                }            } else {                return true;            }        } else {            return true;        }    }});