Snippets Contact form

Bootstrap 5 Simple Contact Form

A clean contact card with labelled name, email, subject and message fields, inline validation messages and a full-width send button.

Bootstrap 5 No jQuery Sep 2020 2.3K views

<section class="wdw-stage">
  <div class="container" style="max-width: 600px">
    <div class="wdw-card overflow-hidden">
      <header class="wdw-aurora contact-head d-flex align-items-center gap-3 p-4 px-md-5">
        <span class="contact-icon"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="5" width="18" height="14" rx="3"/><path d="m4 8 8 6 8-6"/></svg></span>
        <div>
          <h1 class="wdw-heading h3 mb-1">Contact us</h1>
          <p class="mb-0 small contact-sub">Questions, ideas or feedback? Drop us a line.</p>
        </div>
      </header>
      <form id="simple-contact" class="p-4 p-md-5" novalidate>
        <div class="row g-3">
          <fieldset class="col-12 m-0">
            <legend class="form-label fw-semibold small float-none">What is this about?</legend>
            <div class="d-flex flex-wrap gap-2">
              <input type="radio" class="btn-check" name="sc-topic" id="sc-t1" value="general" checked>
              <label class="btn btn-outline-primary rounded-pill" for="sc-t1">General</label>
              <input type="radio" class="btn-check" name="sc-topic" id="sc-t2" value="support">
              <label class="btn btn-outline-primary rounded-pill" for="sc-t2">Support</label>
              <input type="radio" class="btn-check" name="sc-topic" id="sc-t3" value="sales">
              <label class="btn btn-outline-primary rounded-pill" for="sc-t3">Sales</label>
              <input type="radio" class="btn-check" name="sc-topic" id="sc-t4" value="feedback">
              <label class="btn btn-outline-primary rounded-pill" for="sc-t4">Feedback</label>
            </div>
          </fieldset>
          <div class="col-sm-6">
            <label for="sc-name" class="form-label fw-semibold small">Name <span class="text-danger" aria-hidden="true">*</span></label>
            <input type="text" class="form-control" id="sc-name" placeholder="Jane Cooper" autocomplete="name" required>
            <div class="invalid-feedback">Please enter your name.</div>
          </div>
          <div class="col-sm-6">
            <label for="sc-email" class="form-label fw-semibold small">Email <span class="text-danger" aria-hidden="true">*</span></label>
            <input type="email" class="form-control" id="sc-email" placeholder="[email protected]" autocomplete="email" required>
            <div class="invalid-feedback">Please enter a valid email.</div>
          </div>
          <div class="col-12">
            <div class="d-flex justify-content-between align-items-baseline">
              <label for="sc-msg" class="form-label fw-semibold small">Message <span class="text-danger" aria-hidden="true">*</span></label>
              <span class="small wdw-muted" id="sc-count" aria-hidden="true">0 / 500</span>
            </div>
            <textarea class="form-control contact-msg" id="sc-msg" rows="5" maxlength="500" placeholder="Tell us more" required></textarea>
            <div class="invalid-feedback">Please write a message.</div>
          </div>
          <div class="col-12">
            <button type="submit" class="btn btn-primary rounded-pill w-100">Send message</button>
            <p class="small wdw-muted text-center mt-3 mb-0"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" class="me-1 align-text-bottom"><circle cx="12" cy="12" r="9"/><path d="M12 7v5l3 2"/></svg>We reply within one business day. Fields marked * are required.</p>
            <p class="text-success text-center fw-semibold small mt-2 mb-0" id="sc-status" role="status" aria-live="polite"></p>
          </div>
        </div>
      </form>
    </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.