Force File Upload Input Button To Right Side In WebKit

Firefox and IE have the "choose file" button to the right of the filepath, while Webkit puts it on the left. This makes WebKit put it on the right as well.

<input type="file">
   -webkit-appearance: none;
   text-align: left;
   -webkit-rtl-ordering:  left;
   -webkit-appearance: none;
   float: right;
   margin: 0 0 0 10px;
   border: 1px solid #aaaaaa;
   border-radius: 4px;
   background-image: -webkit-gradient(linear, left bottom, left top, from(#d2d0d0), to(#f0f0f0));
   background-image: -moz-linear-gradient(90deg, #d2d0d0 0%, #f0f0f0 100%);

Reference URL


  1. Sunny Singh
    Permalink to comment#

    Any reason you have -moz-linear-gradient where the selector is WebKit specific? In this case, input[type="file"]::-webkit-file-upload-button.

  2. Kim Casault
    Permalink to comment#

    I just heard your SitePoint podcast this morning and then, voila, here you are helping me get Webkit to conform. Awesome and thank you.

  3. Daniel
    Permalink to comment#

    My site is just starting.
    I´ve been working at Accenture, great company, but little time for html development. Just starting as a hobby. My friend, is it possible to make a living doing websites like this? or is this only your hobby?

    other question, I love this comment design, how are this created! I need one like this comment section =)

    Great work!
    Daniel from Monterrey

  4. Who?
    Permalink to comment#

    What’s the point?

  5. Lohith
    Permalink to comment#


    The solution provided in the post exactly works in the chrome. Thanks for the great work. But its not supporting to Mozilla.

    any solution regarding this?

Leave a Comment

Posting Code

We highly encourage you to post problematic HTML/CSS/JavaScript over on CodePen and include the link in your post. It's much easier to see, understand, and help with when you do that.

Markdown is supported, so you can write inline code like `<div>this</div>` or multiline blocks of code in triple backtick fences like this:

  function example() {
    element.innerHTML = "<div>code</div>";

We have a pretty good* newsletter.