Designing Custom Form Dropdowns in Webflow

Nikolai Bain Profile Picture

By Nikolai Bain

Last updated: 

Oct 14, 2026

Posted: 

Mar 21, 2021

Designing Custom Form Dropdowns in Webflow

Share this article

Designing Custom Form Dropdowns in Webflow

Prefer video?

Watch the video version of this blog post on my Youtube channel.

Watch Video 

Webflow's form dropdown component (as will most other website builders) simply adopt the design of whatever browser it's currently being viewed on. You'll find on Chrome that this is less of an issue, but on Safari, the design is a lot more jarring.

A default Webflow form dropdown as it appears in Safari

You won't be able to customise this properly with only the built in Webflow settings, as this is controlled from the level of the browser. Because of this, if we want to have a consistent look and feel across your website, and therefor make the style fit in line with the rest of the form elements, we have to add custom code.

Why Form Dropdowns Look Different in Every Browser

A dropdown is made of two parts. The closed field you see on the page can be styled with Webflow's normal controls: border, background, padding, font and radius. The open list of options is different. It is drawn by the browser and the operating system, not by your page, so its colours, spacing, fonts and corners are decided by Chrome, Safari, Firefox or the mobile OS, not by your stylesheet. That is why a form that looks consistent in the Designer can look quite different for a visitor on a Mac, a Windows PC or an iPhone.

For most websites this is acceptable. For a brand-led site where the form is a key conversion point, a mismatched dropdown among carefully styled inputs is the kind of detail that makes the whole page feel unfinished.

Three Ways to Handle It

  1. Leave the native dropdown alone. It is the most accessible and the most reliable option, especially on mobile, where the operating system shows its own touch-friendly picker. If your form is short and the dropdown is not central, this may be the right call.
  2. Restyle only the closed field. Style the field with Webflow's controls, remove the default browser arrow with a small piece of custom CSS (setting the appearance to none), and draw your own arrow as a background image. The open list stays native, so you keep the accessibility and mobile behaviour, and the field matches the rest of the form.
  3. Replace the dropdown with a custom one. This gives you full control over the open list as well, and it is what the rest of this guide covers.

If you are not sure, start with option 2 and only move to option 3 if the open list genuinely needs to match your brand.

Using jQuery Nice Select

Rather than try to figure everything out ourselves, we can use jQuery Nice Select, a lightweight code snippet that will enable us to fully customise the dropdown.

The jQuery Nice Select plugin example

As we aren't going to add in the plug-in, we are instead going to add some custom code that does the same thing. You can either add this custom code to the page settings of the page you are adding the dropdown on, or to the project settings custom code tab if you are using it on many different pagers.

A few things to keep in mind before you paste it in. The script replaces every select element on the pages where it runs, so if you only want it on one form, add the code to that page's settings rather than site-wide. Custom code does not show in the Designer, so you will need to publish and check the live or staging page each time you change the styling. And because the custom dropdown replaces the native one, test it with a keyboard and on a phone before launch. If you want to go further with custom code, my roundup of 5 code snippets to add to your Webflow website has other useful ones.

Here is the code, followed by how to apply it.

Webflow Templates Cover

Don't want to build from scratch?

Start with a Webflow template and have your new website up in no time.

Here's the javascript to enable the custom dropdown element. jQuery needs to be loaded before this runs, which it is on a standard Webflow site when you add the code to the "Before </body> tag" section:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-nice-select/1.1.0/js/jquery.nice-select.min.js"></script>
<script>
$(document).ready(function() {
$('select').niceSelect();
});
</script>

‍

Hold your breath for this next bit, it's a lot of code!

The Code

Here's the css to style our dropdown element:

<style>
:root {/* ----------- Colors ----------- */
 --list-bg-color: #ffffff;
 --list-text-color: inherit;
 --select-field-arrow-color: #546E7A;
 --list-item-bg-color: #F0F2F4;
 --border-color-hover: #37474e;
 
 /* ----------- Spacing ----------- */
 --select-field-padding-left: 15px;
 --select-field-padding-right: 15px;
 --list-padding-top-bottom: 10px;
 --list-max-height: 200px;
 --list-item-padding-left: 18px;
 --list-item-padding-right: 18px;
 --list-item-min-height: 40px;
 --list-item-line-height: 40px;
}

.nice-select {
 box-sizing: border-box;
 clear: both;
 padding-left: var(--select-field-padding-left);
 padding-right: var(--select-field-padding-right);
 padding-top: 12px;
 position: relative;
 text-align: left !important;
}

.nice-select:hover {
 border-color: #CFD8DC;
 border: 1px solid #CFD8DC;
}

.nice-select:active, .nice-select.open, .nice-select:focus {
 border-color: #CFD8DC;
 border: 1px solid #CFD8DC;
}

.nice-select:after {
 border-bottom: 2px solid var(--select-field-arrow-color);
 border-right: 2px solid var(--select-field-arrow-color);
 content: '';
 margin-top: -4px;
 display: block;
 height: 5px;
 pointer-events: none;
 position: absolute;
 right: 12px;
 top: 50%;
 -webkit-transform-origin: 66% 66%;
 -ms-transform-origin: 66% 66%;
 transform-origin: 66% 66%;
 -webkit-transform: rotate(45deg);
 -ms-transform: rotate(45deg);
 transform: rotate(45deg);
 -webkit-transition: all 0.15s ease-in-out;
 transition: all 0.15s ease-in-out;
 width: 5px;
 z-index: 100 !important;
}

.nice-select.open .list {
 opacity: 1;
 pointer-events: auto;
 -webkit-transform: scale(1) translateY(0);
 -ms-transform: scale(1) translateY(0);
 transform: scale(1) translateY(0);
 z-index: 200;
}

.nice-select.right {
 float: right;
}

.nice-select.right .list {
 left: auto;
 right: 0;
}

.nice-select.small {
 font-size: 14px;
 height: 36px;
 line-height: 34px;
}

.nice-select.small:after {
 height: 4px;
 width: 4px;
}

.nice-select.small .option {
 line-height: 34px;
 min-height: 34px;
}

.nice-select .list {
border: 1px solid #CFD8DC;
width: 100%;
 font-size: 15px;
 background-color: #ffffff;
 color: var(--list-text-color);
 box-shadow: 0 7px 20px 0px rgba(68, 68, 68, 0.11);
 box-sizing: border-box;
 border-radius: 2px;
 opacity: 0;
 overflow: hidden;
 padding: var(--list-padding-top-bottom) 0px;
 pointer-events: none;
 position: absolute;
 top: 100%;
 left: 0;
 overflow-y: scroll;
 overflow-x: hidden;
 max-height: var(--list-max-height);
 z-index: 999 !important;
}

.nice-select .option {
 cursor: pointer;
 font-weight: 400;
 font-size: 15px;
 line-height: var(--list-item-line-height);
 list-style: none;
 min-height: var(--list-item-min-height);
 outline: none;
 padding-left: var(--list-item-padding-left);
 padding-right: var(--list-item-padding-right);
 text-align: left;
 -webkit-transition: all 0.2s;
 transition: all 0.2s;
margin-bottom: 0;
}

.nice-select .option:first-child {
display: none;
}

span.current {
color: var(--list-text-color);
}

.nice-select .option:hover, .nice-select .option.focus, .nice-select .option.selected.focus {
 background-color: var(--list-item-bg-color);
}
</style>

Add these both to the "Before </body> tag" section.

Feel free to publish to your staging domain and see how the default custom style looks so you know what you are working with. You won't be able to see it update in the designer, so you will have to check the staging domain you're using each time you make an update.

Here is the dropdown on safari now:

The custom dropdown styled in Safari

Now it's looking more in-line with the rest of our form elements.

From here, you can update the styling in the custom css until it properly fits the rest of your form elements, giving you a more consistent and professional look no matter what browser your website visitors are using. There might be a little bit of trial and error through this process, but the main styles that you need to focus on are the colours.

Troubleshooting

  • The dropdown has not changed: check that you published, and that the code is in the "Before </body> tag" section of the page or project settings. Custom code never shows in the Designer.
  • The list is hidden behind other elements: raise the z-index of the dropdown, or check that a parent element does not have overflow hidden.
  • The first option disappears: the CSS above hides the first option so it can act as a placeholder. If your first option is a real choice, remove that rule.
  • Webflow form validation: test that a required dropdown still blocks submission when nothing is selected, and that the chosen value is sent in the form submission.
  • Accessibility: tab through the form with a keyboard and check each dropdown can be opened, navigated and selected without a mouse.

If you managed to work through all this custom code without breaking a sweat, you can add other custom code snippets that take your website to the next level. And if you want to learn what to do with the data once people submit your forms, see adding the source or page URL to Webflow forms, and 4 simple ways to improve your pricing page for converting visitors in the first place.

Nikolai Bain Profile Picture

Written by

Nikolai Bain

I'm a Webflow Premium Partner based in Wellington, New Zealand, with years of experience designing and developing websites for clients across the UK, EU, US, AU, and NZ. I specialize in Webflow migrations and SEO, helping businesses move from WordPress, Squarespace, and custom-coded sites to Webflow without losing search rankings. I share what I learn through in-depth guides and templates to help others get more out of Webflow.

More about me
Got  A
Project?
Let's  
Chat.

I work with leading businesses around the world. Maybe you'll be next.

Get in Touch