Contact form examples

21 contact form templates in plain HTML and CSS — free to copy, styled six different ways, and written out for every framework worth naming. Point one at your endpoint and it sends to your inbox.

Contact form designs

Same three fields, six different looks. Every one is plain HTML and CSS you can paste straight into a page.

By framework

The markup barely changes between stacks — what changes is where the submit handler lives. Pick yours.

Contact forms that do more

File uploads, captcha, validation, auto-reply. All of it without adding a server of your own.

What every one of these has in common

One attribute. A contact form is an ordinary HTML form until you tell the browser where to send it, and the action is what turns it into something that reaches your inbox:

<form action="https://submit.formemailapi.com/YOUR_FORM_ID" method="POST">

That is the whole integration. There is no script tag, no package to install, no build step and no server of your own — which is why these work identically on GitHub Pages, Netlify, a page builder, or a folder on shared hosting. Swap YOUR_FORM_ID for the id of a form you created and the example is live.

Which one should you take?

If you are not sure, take the simple contact form — three fields and about forty lines of CSS, which is what most sites need and all most sites should ask for. Building a whole page rather than dropping a form into one? The contact us page example puts an address, a phone number and opening hours beside it, for the visitors who were never going to fill anything in.

Already in a framework? The markup barely changes — what changes is where the submit handler lives, so go straight to the React, Next.js or Vue version. And if you came here to replace a PHP script, the PHP contact form page has an honest account of what mail() gets wrong.

Before you put one live

  • Give every input a name attribute. Browsers only submit fields that have one, and this is the usual reason a field silently disappears from the email.
  • Add the hidden honeypot field. It is one line, it is invisible to people, and it stops most automated submissions without asking anybody to solve a puzzle.
  • Set a redirect so visitors land on your own thank-you page rather than ours.
  • Send yourself a real message from the finished page. Most broken contact forms are broken because nobody ever pressed the button.

Contact form templates: common questions

Are these contact form templates free?
The code is free to copy and use however you like, including commercially — there is nothing to attribute and no licence to accept. Sending the submissions is free too, up to 250 messages a month with unlimited forms, and nothing expires.
How do I make an HTML contact form actually send email?
Set the form's action to an endpoint that handles the sending. HTML on its own cannot open a mail connection, which is why contact forms traditionally needed a PHP script or a serverless function; pointing the action somewhere that already does it removes both.
Do I need a backend or a database?
No. Every example here is a static HTML file. The submission is emailed to you and kept as a searchable record, so there is no server of yours involved and nothing to deploy or keep patched.
Can I change the fields and the styling?
All of it. These are ordinary form elements with ordinary CSS — no widget, no iframe, no class names you have to keep. Any input with a name attribute is delivered, so add or remove fields freely.

Pick one and give it an endpoint

Creating a form takes about a minute and costs nothing. FormEmailAPI handles the sending, the spam and the record of what came in; the markup stays yours.

Create your form