3 Best Plugins for Customizing Contact Form 7 Forms in WordPress
Contact Form 7 is an incredibly popular plugin for building WordPress contact forms with over 3 million active installs. It supports the building of forms without HTML coding. Forms can include CAPTCHAs, file upload, and quiz fields.
While Contact Form 7’s default markup and style are fine for most basic contact forms, often you’ll want to change it.
Improving Contact Form 7 Accessibility: A Quick Note
One plugin I recommend installing shortly after adding Contact Form 7 is Joe Dolson’s Contact Form 7: Accessible Defaults.
This changes the structure of the default form to make it more accessible by associating form labels with the form controls.
It also adds the
[response] shortcode above the form so that if there’s an error submitting the form it’s reported above the form itself.
For the standard form, the code generated by the plugin is:
If you’re interested in finding out more about accessibility, check out The Ultimate Guide to Accessibility and WordPress.
Easy Contact Form 7 Styling With Plugins
If you want a quick form style, there are plugins that can do the hard work so you don’t have to.
Contact Form 7 Style
Contact Form 7 Style has a number of preset styles to choose from including Valentine’s and Christmas styles.
For Twenty Fifteen theme users, there’s also a style to match.
To apply a style, go to Contact Styles > Quick Edit, check the form you want to apply the style to and click Update.
Contact Form 7 Style Custom Styles
Add your own styles and see the results on the fly by going to Contact Styles > Add New.
Using this tool you can customize just about any aspect of your form, including:
- Colour and background – including hover states
- Fonts – a range of Google Fonts are included
When you add a value to (for example) padding, the editor sensibly copies across the value you have chosen, generating the same value for top, right, bottom and left padding. You can, of course, adjust the values. There’s a dropdown to choose between pixels, em or % too.
The custom style you can create also stretches to error and success messages too.
The preview area is at the bottom of the screen; scroll down to see your changes.
Here’s my finished form, using the Cherry Swash font:
Contact Form 7 Skins
To use Contact Form 7 Skins, create a new contact form and scroll down the page to the Skins section. There you can choose a template and a style for your form.
Templates include forms for events, registration, and suggestion.
Here’s what the Survey form looks like with Topaz styling using the Twenty Fifteen theme.
Material Design For Contact Form 7
This plugin styles forms in the Material Design style.
The plugin suggests that you remove the default form and use its shortcodes.
Here is an example with Hestia theme. Note the floating label when the cursor is moved to a particular form field.
A style customizer is available in the plugin’s Pro version.
Styling Contact Form 7 to Match Your Theme
Most of the time, Contact Form 7 will inherit styling from the theme selected. See this example with Coral Dark theme.
A Bespoke Contact Form 7 Design for ColorMag Theme
Here is the form with no styling applied. It inherits the blue button colour from ColorMag theme.
I started by uploading a photo to use as a background image for the form and changing the code for the form labels from grey to white with a blue text-shadow.
The next changes were to increase the margins between the form labels and form fields, change the submit button hover color and add a border when the cursor enters the form fields.
The display of error/success messages when the form is submitted needed to be changed too so they would show up properly.
The spinning GIF when the form is submitted didn’t show up too well so I found an alternative at Loading.io and referenced it with CSS.
This is the final form:
And this is the code:
Contact Form 7 Styling for Upfront Spirit Theme
Upfront is WPMU DEV’s front-end builder, which comes with a number of themes. To learn more about Upfront and get started, read this post on Upfront basics.
1.6 million WordPress Superheroes read and trust our blog. Join them and get daily posts delivered to your inbox - free!
The Spirit theme has its own inbuilt contact form, but should you want to use Contact Form 7 instead, it’s possible to style it to match with a bit of work.
Here’s the form style we will recreate.
To start, create your form and add the Contact Form 7 shortcode on the page you want the form to appear via Upfront’s front-end customizer.
Open the Theme Settings and go to the Edit Global CSS button, which opens up the CSS editor.
It’s best to add your form styles to the end of the file to keep things tidy.
You won’t be able to view your contact form via Upfront as it will show the Contact Form 7 shortcode, so keep the relevant page open in a new tab as you save your changes.
If you will have multiple contact forms on different pages, it’s a very good idea to add a form class or id to your form to make your custom style only apply to a single instance of the form. You can do this by modifying the form shortcode.
This turns my form shortcode of:
This is the code for the initial form:
And this is what it looks like on the front end. It’s too narrow, and not very pretty yet.
Step 1 is to add placeholder text to the form fields to resemble the Upfront contact form.
Rather than deleting the form labels, we can hide them instead using the visuallyhidden class which is already built into Upfront. This means that any users reliant on a screen reader will still hear the labels read out.
The final form HTML is this:
On the front-end the placeholders are there but there are large gaps between the form fields and the form isn’t wide enough. Let’s see what we can do to fix that.
The obvious thing to try is to make the form 100% width:
Unfortunately, this doesn’t work.
We need to style the individual form elements instead. This style will take care of the width:
The CSS box model is different for block-level and inline elements. The box-sizing: border-box; is necessary to match the width property of the text fields and textarea with the submit button. Otherwise, the submit button is the right width and the others are a little wide.
With a bit more styling of the submit button and the placeholders, the form looks like this:
The next part is to move the fields closer together with the use of zero and negative margins. Also, the max-height of the message textarea was set to 170px.
The form is now pretty close to the Upfront contact form – but there’s a problem!
Submitting invalid data on the original contact form puts all the errors in a box above the form, whereas Contact Form 7 displays errors inline.
When submitting our form without completing the fields correctly, the error messages are positioned wrongly relative to the form fields. The Name error is covering the Name field, and the Message error is too low down.
That means we need to space out the error messages in between the form fields to leave room for the errors, and add some remedial styling to change the font and error display.
We need to change the style for the success message too.
Here’s the final Contact Form 7 form compared to the original. Not perfectly identical, but pretty close.
Contact Form 7 styled form compared to Upfront contact form on Spirit theme
This is how the form displays if completed incorrectly.
Here’s the final CSS.
One point to note: if you create a new form on another page using Spirit theme with a white background, the form fields won’t show up.
You can get around this by adding a style such as this. Using the .wpcf7 means it will apply to all Contact Form 7 forms:
Just remember to add it before your Spirit form style so it doesn’t override the style on your contact page!
Customizing Contact Form 7 With the Right Tools
For a free plugin, Contact Form 7 is powerful, especially when you start styling it with CSS. Hopefully the plugins in this tutorial will help you get started with your own styling. The great thing about these plugins is that they’re free, so you can give them a go and see how they work before committing.