Snippets Form

Bootstrap 5 Signup Form with Flip Animation

A split sign-up card with a brand panel and a validated form that flips in 3D to a welcome confirmation after submitting.

Bootstrap 5 No jQuery Nov 2020 2.1K views

<section class="wdw-stage">
  <div class="container" style="max-width:920px">
    <div class="flip" id="signupFlip">
      <div class="flip-inner">
        <div class="flip-face wdw-card overflow-hidden" id="faceFront">
          <div class="row g-0 h-100">
            <div class="col-md-5 wdw-aurora p-4 p-lg-5 d-flex flex-column justify-content-between">
              <span class="fw-bold fs-5"><i class="bi bi-stars"></i> Lumen</span>
              <div class="py-4">
                <h2 class="fw-bold mb-3 su-brand-title">Start building something great</h2>
                <ul class="list-unstyled mb-0 su-points">
                  <li><i class="bi bi-check-circle-fill"></i> Free for 14 days</li>
                  <li><i class="bi bi-check-circle-fill"></i> No credit card required</li>
                  <li><i class="bi bi-check-circle-fill"></i> Cancel any time</li>
                </ul>
              </div>
            </div>
            <form class="col-md-7 p-4 p-lg-5" id="signupForm" novalidate>
              <h1 class="h3 wdw-heading mb-1">Create your account</h1>
              <p class="wdw-muted mb-4">Already have one? <a href="#" class="fw-semibold">Log in</a></p>
              <div class="form-floating mb-3">
                <input type="text" class="form-control" id="suName" placeholder="Full name" autocomplete="name" required>
                <label for="suName">Full name</label>
              </div>
              <div class="form-floating mb-3">
                <input type="email" class="form-control" id="suEmail" placeholder="Email address" autocomplete="email" required>
                <label for="suEmail">Email address</label>
                <div class="invalid-feedback">Enter a valid email address.</div>
              </div>
              <div class="input-group mb-3">
                <div class="form-floating flex-grow-1">
                  <input type="password" class="form-control" id="suPass" placeholder="Password" autocomplete="new-password" minlength="8" required>
                  <label for="suPass">Password (8+ characters)</label>
                </div>
                <button class="btn btn-outline-secondary" type="button" id="suToggle" aria-label="Show password" aria-pressed="false" style="min-width:48px"><i class="bi bi-eye"></i></button>
              </div>
              <div class="form-check mb-4">
                <input class="form-check-input" type="checkbox" id="suTerms" required>
                <label class="form-check-label small" for="suTerms">I agree with the <a href="#">Terms & Conditions</a></label>
              </div>
              <button type="submit" class="btn btn-primary rounded-pill w-100 btn-lg">Sign up</button>
              <p class="small text-danger mt-3 mb-0" id="suError" role="alert" hidden></p>
            </form>
          </div>
        </div>
        <div class="flip-face flip-back wdw-card d-flex align-items-center justify-content-center text-center p-4 p-lg-5" id="faceBack" aria-hidden="true">
          <div>
            <span class="wdw-icon mx-auto mb-4" style="width:4rem;height:4rem;font-size:1.75rem"><i class="bi bi-check-lg"></i></span>
            <h2 class="wdw-heading mb-2">Welcome aboard, <span id="suWho">friend</span></h2>
            <p class="wdw-muted mb-4">We sent a confirmation link to <strong id="suMail" class="text-body"></strong>.</p>
            <button type="button" class="btn btn-outline-primary rounded-pill px-4" id="suBack">Back to sign up</button>
          </div>
        </div>
      </div>
    </div>
  </div>
</section>

Built on Bootstrap 5.3.8 with plain JavaScript — no jQuery. Supports light and dark mode via data-bs-theme.

Free to use in personal and commercial projects under the MIT license.