The classic three-field contact form: name, email, message. This is the form most small business websites need first, and the version below is complete — accessible labels, required-field validation, a honeypot spam trap and a small block of CSS you can restyle freely.
<style>
.hf-form { display: grid; gap: 0.75rem; max-width: 28rem; font-family: system-ui, sans-serif; }
.hf-form label { font-weight: 600; font-size: 0.9rem; }
.hf-form input, .hf-form textarea, .hf-form select {
width: 100%; padding: 0.5rem 0.6rem; font: inherit;
border: 1px solid #ccc; border-radius: 6px; box-sizing: border-box;
}
.hf-form button {
justify-self: start; padding: 0.55rem 1.4rem; font: inherit; font-weight: 600;
background: #0b6e4f; color: #fff; border: none; border-radius: 6px; cursor: pointer;
}
.hf-hp { position: absolute; left: -9999px; }
</style>
<form class="hf-form" action="https://example.com/your-endpoint" method="POST">
<label for="name">Name</label>
<input type="text" id="name" name="name" required>
<label for="email">Email</label>
<input type="email" id="email" name="email" required>
<label for="message">Message</label>
<textarea id="message" name="message" rows="5" required></textarea>
<!-- honeypot: humans never see this; bots fill it in. Drop submissions where it has a value. -->
<input class="hf-hp" type="text" name="website" tabindex="-1" autocomplete="off" aria-hidden="true">
<button type="submit">Send message</button>
</form>
No. This form is plain HTML — the browser handles required-field checks and email validation natively. JavaScript only becomes useful for things like inline error styling or submitting without a page reload.
Point the form’s action attribute at your server, or at a form backend service that emails you each submission. The markup works with either.
Tentmaker Stores gives you a complete online store — product pages, checkout and everything in between. Built for small makers and niche sellers.