Snippets Contact form

Bootstrap 5 Contact Form with Icons and Validation

A split contact form with an icon beside each field, built-in validation messages and a success confirmation, next to a panel with the studio's contact details.

Bootstrap 5 No jQuery May 2019 2.5K views

<section class="wdw-stage">
  <div class="container" style="max-width:980px">
    <div class="wdw-card overflow-hidden">
      <div class="row g-0">
        <aside class="col-lg-5 wdw-aurora p-4 p-lg-5 d-flex flex-column">
          <span class="badge rounded-pill text-bg-light align-self-start mb-4">Contact</span>
          <h1 class="h2 fw-bold mb-2">Let us hear from you</h1>
          <p class="opacity-75 mb-4">Tell us about your project and we will reply within one business day.</p>
          <ul class="list-unstyled mt-auto mb-0"><li class="d-flex gap-3 align-items-center mb-3"><span class="cc-ico"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.85" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="5" width="18" height="14" rx="2"/><path d="m3 7 9 6 9-6"/></svg></span><span><span class="d-block small opacity-75">Email</span><span class="fw-semibold">[email protected]</span></span></li><li class="d-flex gap-3 align-items-center mb-3"><span class="cc-ico"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.85" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="7" y="2" width="10" height="20" rx="2"/><path d="M11 18h2"/></svg></span><span><span class="d-block small opacity-75">Phone</span><span class="fw-semibold">+1 (555) 014-2024</span></span></li><li class="d-flex gap-3 align-items-center mb-3"><span class="cc-ico"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.85" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0z"/><circle cx="12" cy="10" r="3"/></svg></span><span><span class="d-block small opacity-75">Studio</span><span class="fw-semibold">214 Mercer Street, New York</span></span></li></ul>
        </aside>
        <div class="col-lg-7 p-4 p-lg-5">
          <form id="contactForm" novalidate>
            <div class="row g-3">
              <div class="col-12"><label for="ccName" class="form-label small fw-semibold">Full name</label>
<div class="input-group has-validation"><span class="input-group-text"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.85" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="8" r="4"/><path d="M4 21a8 8 0 0 1 16 0"/></svg></span><input type="text" class="form-control" id="ccName" name="ccName" placeholder="Jane Cooper" autocomplete="name" required><div class="invalid-feedback">Please enter a valid full name.</div></div></div>
              <div class="col-12"><label for="ccEmail" class="form-label small fw-semibold">Email</label>
<div class="input-group has-validation"><span class="input-group-text"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.85" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="5" width="18" height="14" rx="2"/><path d="m3 7 9 6 9-6"/></svg></span><input type="email" class="form-control" id="ccEmail" name="ccEmail" placeholder="[email protected]" autocomplete="email" required><div class="invalid-feedback">Please enter a valid email.</div></div></div>
              <div class="col-12"><label for="ccPhone" class="form-label small fw-semibold">Phone <span class="wdw-muted fw-normal">(optional)</span></label>
<div class="input-group has-validation"><span class="input-group-text"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.85" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="7" y="2" width="10" height="20" rx="2"/><path d="M11 18h2"/></svg></span><input type="tel" class="form-control" id="ccPhone" name="ccPhone" placeholder="+1 555 000 0000" autocomplete="tel"><div class="invalid-feedback">Please enter a valid phone.</div></div></div>
              <div class="col-12"><label for="ccSubject" class="form-label small fw-semibold">Subject</label>
<div class="input-group has-validation"><span class="input-group-text"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.85" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 6h16M4 12h16M4 18h10"/></svg></span><input type="text" class="form-control" id="ccSubject" name="ccSubject" placeholder="How can we help?" autocomplete="off" required><div class="invalid-feedback">Please enter a valid subject.</div></div></div>
              <div class="col-12"><label for="ccMessage" class="form-label small fw-semibold">Message</label>
              <div class="input-group has-validation"><span class="input-group-text align-items-start pt-3"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.85" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 12a8 8 0 0 1-11.8 7L3 20l1.2-5.6A8 8 0 1 1 21 12z"/></svg></span><textarea class="form-control cc-textarea" id="ccMessage" name="message" rows="5" placeholder="Share a few details about your project" required minlength="10"></textarea><div class="invalid-feedback">Please write at least 10 characters.</div></div></div>
              <div class="col-12"><button type="submit" class="btn btn-primary rounded-pill w-100">Send message</button></div>
              <div class="col-12 d-none" id="ccSuccess" role="status"><div class="alert alert-success mb-0 rounded-4" >Thanks, your message is on its way. We will be in touch soon.</div></div>
            </div>
          </form>
        </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.