How to style <select>s using DropKick

When it comes to styling webpages, nothing’s as tricky as forms. And when it comes to styling forms — almost — nothing’s as tricky as the <select> input.

We can style a <select> with CSS, but there are big limitations on how much we can achieve with CSS alone. Often, the only viable option is styling via JavaScript, and as a form of progressive enhancement it’s not something we need to shy away from.

In this article we’ll be using DropKick to create out dropdown. What dropkick does is transform the <select> list into a fully customizable HTML dropdown and when one option is selected the corresponding select value will be updates as part of your form. OK, let’s get started then…

 

Setting up our <select>

The first thing we need to do is set up a <select>, we’ll create one for the business days in the week:

<select id='mySelect'>
    <option value='mon'>Monday</option>
    <option value='tue'>Tuesday</option>
    <option value='wed'>Wednesday</option>
    <option value='thu'>Thursday</option>
    <option value='fri'>Friday</option>
</select>

 

Calling DropKick

Once we’ve set up our <select> we need to load three files into our document: the JavaScript DropKick file, the CSS, and of course jQuery. We should load the CSS in the head and JavaScripts at the foot of the page. With that done, all we need to do to activate the plugin and create our fully customizable dropdowns is to call DropKick, like so:

$('#mySelect').dropkick();

By doing so we transform our HTML into this:

<div class="dk_container dk_theme_default" id="dk_container_undefined">
	<a class="dk_toggle">
		<span class="dk_label">Thursday</span>
	</a>
	<div class="dk_options">
		<ul class="dk_options_inner">
			<li class="">
				<a data-dk-dropdown-value="mon">Monday</a>
			</li>
			<li class="">
				<a data-dk-dropdown-value="tue">Tuesday</a>
			</li>
			<li class="">
				<a data-dk-dropdown-value="wed">Wednesday</a>
			</li>
			<li class="dk_option_current">
				<a data-dk-dropdown-value="thu">Thursday</a>
			</li>
			<li class="">
				<a data-dk-dropdown-value="fri">Friday</a>
			</li>
		</ul>
	</div>
</div>

As you can see, DropKick has transformed our <select> into something we can be confident of styling with CSS. Furthermore, our values have been inserted in the new HTML5 data attributes (with the name data-dk-dropdown-value).

We can now style our dropdown with CSS, or use one the DropKick’s themes if we prefer; at the time of writing there are three themes available, the default, dark gloss and light gloss. But most people will want to use their own styles that match their project’s needs.

 

Extending DropKick

Extending DropKick is a simple process. For example, if we wanted to detect when a change is made to the dropdown, we can add the change event handler, like so:

$('select').dropkick({
    change: function (value) {
        console.log('Option selected: ' + value);
    }
});

 

Final thoughts

I’m sure there are a thousand ways to style a select menu without the use of jQuery, but the ones that use just CSS are fighting a losing battle against the browser’s defaults. The simplicity of this plugin and the tremendous flexibility it offers and the progressive enhancement approach that it takes means DropKick is an excellent solution.

Have you used DropKick in a project? Do you have a preferred method of styling <select>s? Let us know in the comments.

  • Moi Torrijos

    Great tip!

    • Sara Vieira

      Glad you liked it

  • Sara Vieira

    This plugin when it comes to handling validation works in such a way that no value is passed if the user doesn’t select anything and it just toggles a class to decide what is active so I think you wont have a problem :)

  • Peer Bremer

    Does not work at all for me. Internet Explorer 10 complains about a syntax error and select boxes cannot be selected at all.

    • Sara Vieira

      What code did you use ? I tried in IE10 using Windows7 x64 and it worked perfectly.

      • Peer Bremer

        Using Windows 8 Pro, will have a look with Firefox or with my Mac.

      • Peer Bremer

        same with firefox, nothing happens, when I click on try me or try me too.

  • Paulo Henrique Serrano

    Nice, I should try that someday.

  • parvez

    nice inforation.
    http://phpflow.com

  • http://grawl.ru/ Grawl

    Formstone project by Ben Plum is much better. Is has a pack of one-style plugins for selects, options, checkboxes, and much more. Check it yourself! http://www.benplum.com/formstone/