CodingLaboratory
Lab Commands
Enter The Lab

Component Lab / forms-checkout / accessible-contact-form

Stable release
Back to category

Open experiment

Accessible contact form

A two-column contact section with semantic field grouping, inline validation, an accessible status region, and a useful non-JavaScript submit target.

Lab tested Responsive Dark mode Interactive
Version
1.0.0
Updated
2026-08-02
Dependencies
Zero
Live canvasInstant token updates
Source filesEditable and export-ready
<section class="cmp-contact">
  <div>
    <p>Start a conversation</p>
    <h2>Tell us what you’re building.</h2>
    <p>Share a few useful details. We’ll reply within one business day with a clear next step.</p>
    <dl>
      <div>
        <dt>Typical response</dt>
        <dd>Under 4 hours</dd>
      </div>
      <div>
        <dt>Good fit</dt>
        <dd>Websites, apps, and design systems</dd>
      </div>
    </dl>
  </div>
  <form class="cmp-contact__form" action="#contact-sent" novalidate>
    <div>
      <label for="cmp-contact-name">Name</label
      ><input id="cmp-contact-name" name="name" autocomplete="name" required /><small
        >How should we address you?</small
      >
    </div>
    <div>
      <label for="cmp-contact-email">Work email</label
      ><input
        id="cmp-contact-email"
        name="email"
        type="email"
        autocomplete="email"
        required
      /><small>We only use this to reply.</small>
    </div>
    <div>
      <label for="cmp-contact-scope">Project type</label
      ><select id="cmp-contact-scope" name="scope">
        <option>Marketing site</option>
        <option>Web application</option>
        <option>Component system</option>
      </select>
    </div>
    <div>
      <label for="cmp-contact-message">Useful context</label
      ><textarea id="cmp-contact-message" name="message" rows="4" minlength="20" required></textarea
      ><small>Goals, timing, and what already exists.</small>
    </div>
    <button type="submit">Send project details</button>
    <p class="cmp-contact__status" role="status" aria-live="polite"></p>
  </form>
</section>
No runtime reactions detected Open in Editor

Validated in the lab

Experiment report

  • Schema and source files passed
  • Responsive test passed
  • Keyboard test passed
  • No console errors

Component ingredients

Dependencies
None
Browser support
Current Chrome, Current Edge, Current Firefox, Current Safari
Version
1.0.0
Last tested
2026-08-02

Accessibility notes

  • Every control has a persistent label.
  • Errors are linked with aria-describedby.
  • Submission status uses an aria-live region.

License: MIT License for open-source use, modification, and distribution.