How to Build a Stylish CSS3 Search Box

A search box is probably one of the most common UI elements around, and I think there is no need to explain its purpose anymore. Whether it’s about a website or a web application, to increase user experience for it, you may want to add a stylish search box.

Today, you will learn how to create a nice CSS3 search box using pseudo-elements. Before we begin you can download the Source Files or view the Demo

The HTML

As you can see below, the markup is minimal and easy to understand:

<form class="form-wrapper cf">
        <input type="text" placeholder="Search here..." required>
        <button type="submit">Search</button>
    </form>   

You may have noticed the HTML5′s specific attributes like placeholder and required, here’s a short description:

  • placeholder- Basically, this attribute shows a text in a field until the field is focused upon, then it just hides the text.
  • required- This specifies that the current element is a required part of a form submission.

HTML5 also brought us a new value for the type attribute: type="search". Though, because of cross browser inconsistency, I decided to skip it for now.

Quick Tip

HTML elements like img and input have no content, therefore, a pseudo-element like :before will not render any arrow for our search button.

My solution was to use the button type="submit" element instead of casual input type="submit". This way, we can preserve the submitting form on ENTER key functionality.

The CSS

Below you can find the necessary styles for our demo:

Clear Floats

.cf:before, .cf:after{
    content:"";
    display:table;
}

.cf:after{
    clear:both;
}

.cf{
    zoom:1;
}    

Form Elements

Prefixed properties like -moz-box-shadow weren’t included, I just wanted to keep the following code clean. Though, they are included in the demo example.

/* Form wrapper styling */
.form-wrapper {
    width: 450px;
    padding: 15px;
    margin: 150px auto 50px auto;
    background: #444;
    background: rgba(0,0,0,.2);
    border-radius: 10px;
    box-shadow: 0 1px 1px rgba(0,0,0,.4) inset, 0 1px 0 rgba(255,255,255,.2);
}

/* Form text input */

.form-wrapper input {
    width: 330px;
    height: 20px;
    padding: 10px 5px;
    float: left;    
    font: bold 15px 'lucida sans', 'trebuchet MS', 'Tahoma';
    border: 0;
    background: #eee;
    border-radius: 3px 0 0 3px;      
}

.form-wrapper input:focus {
    outline: 0;
    background: #fff;
    box-shadow: 0 0 2px rgba(0,0,0,.8) inset;
}

.form-wrapper input::-webkit-input-placeholder {
   color: #999;
   font-weight: normal;
   font-style: italic;
}

.form-wrapper input:-moz-placeholder {
    color: #999;
    font-weight: normal;
    font-style: italic;
}

.form-wrapper input:-ms-input-placeholder {
    color: #999;
    font-weight: normal;
    font-style: italic;
}    

/* Form submit button */
.form-wrapper button {
    overflow: visible;
    position: relative;
    float: right;
    border: 0;
    padding: 0;
    cursor: pointer;
    height: 40px;
    width: 110px;
    font: bold 15px/40px 'lucida sans', 'trebuchet MS', 'Tahoma';
    color: #fff;
    text-transform: uppercase;
    background: #d83c3c;
    border-radius: 0 3px 3px 0;      
    text-shadow: 0 -1px 0 rgba(0, 0 ,0, .3);
}   
  
.form-wrapper button:hover{		
    background: #e54040;
}	
  
.form-wrapper button:active,
.form-wrapper button:focus{   
    background: #c42f2f;
	outline: 0;   
}

.form-wrapper button:before { /* left arrow */
    content: '';
    position: absolute;
    border-width: 8px 8px 8px 0;
    border-style: solid solid solid none;
    border-color: transparent #d83c3c transparent;
    top: 12px;
    left: -6px;
}

.form-wrapper button:hover:before{
    border-right-color: #e54040;
}

.form-wrapper button:focus:before,
.form-wrapper button:active:before{
        border-right-color: #c42f2f;
}      

.form-wrapper button::-moz-focus-inner { /* remove extra button spacing for Mozilla Firefox */
    border: 0;
    padding: 0;
}    

That’s all!

I hope you liked this tutorial and I’m looking forward to hear your thoughts about it. Thank you for reading!

Remember you can download the Source Files or view the Demo

You might also like…

How to Build a Sliding One Page Portfolio with jQuery →
Hoverizr – An in depth view of the jQuery plugin →
Rubber Layouts – Combining Static and Fluid Layouts →
How to Build a Fully Functional CSS3-Only Content Slider →
Resize Images in a Post with jQuery, and turn it into a plugin →
Getting Started with WordPress Shortcodes (+Examples) →

Author: (1 Posts)

Catalin Rosu, a.k.a Red, is a professional web designer and developer who loves to be creative and enjoys CSS techniques. He works at Caphyon and writes regular tutorials on his website. Also, you can connect with him on Twitter as @catalinred.

  • http://www.amazingthings.in/ Aakash Doshi

    That was simple! thanks for tuts Catalin !!

    • Red

      Indeed, it’s simple, effective and ready to use for any website.

  • http://preloaders.net/ AJAX loaders

    I didn’t quite understand how you made the little arrow on the submit button. Which part of the code is responsible for this?

    • Red

      You can search the CSS for .form-wrapper button:before. Again, pseudo-elements are responsible for custom shapes like that little arrow.

  • Josh

    Thank you! I’ve added this on my WordPress site http://liljosh.com and it looks great! 

    • Red

      Josh, nice to see you added it on your website. It looks good! ;)

  • http://twitter.com/NIMSRULES Nirmal Shah

    Sweet, sexy and usable. I wasn’t surprised to find Red behind this tutorial :)

    • Red

      Thank you for commenting, I’m glad you like it :)

  • http://www.oldworldcreative.com Evan Skuthorpe

    cool tutorial, thanks.

  • http://intronex.pl/ Projektory multimedialne

    Just what i was looking for and it apeard in my google reader.

  • http://www.dbgtechnologies.com.au/ Rhys Lloyd

    Genius use of borders to create the arrow. Previously I’ve always just rotated a box, but naturally that adds complications with prefixes and is a significant performance hit over the creative use of borders.

    I’ve sent this article to our design team as an example of the beauty which can be achieved through CSS3. Great work!

  • http://pclive.pl/ Mateusz Ryndak

    i looked for it, thx :)

  • Thulani

    This is the best so far

  • http://www.architekogp.com/ Owen Prescott

    I have the search box in place and customised, is there a tutorial on how to actually make it search? At the moment it just clicks to a blank page. 

    • http://www.red-team-design.com/ Red

       Owen, you can use something like Google Custom Search to make it work! ;)

      • http://www.architekogp.com/ Owen Prescott

        Thanks, just what I have been looking for. :)

  • http://twitter.com/getButterfly Ciprian Popescu

    Thanks Cata from a fellow Romanian. The search form fitted perfectly into http://www.quakewiki.net – as I was looking for something to enhance searching. Powered by WordPress and backed up by SearchMeter, I am able to see the keywords.

    • Red

      Thank you Ciprian, nice to see you’re using this! ;)

  • http://twitter.com/mailette Mail’ette

    This is a really nice tut! 

  • http://www.makanmana.net/ leo

    awsome tutorial Catalin. Implemented in my blog although I have to adjust the property and id. To do that I use either tinkerbin or jsfiddle.

  • Bhadz

    thanks for this very nice search box, i will use this on my website, i’l credit it to you. thank you very much.

  • chuck

    This is an excellent self contained form example. Very creative. 

  • Neim

    How do I get the search bar to the position I want it in? I want it in the top left, near my logo, but nothing will work.

  • balakrishnan

    Nice Work Easy to Use….!

  • KK

    It wont work on IE

  • wawi

    wow…very nice tut…