All rendering mechanisms automatically generate a button when it is created. Historically, this button has been completely incompatible. Recently, however, Trident and WebKit have added hooks through pseudo-elements.
Trident
As in IE10, the file entry button can be written using the pseudo-element ::-ms-browse . Basically, any CSS rules that you apply to a regular button can apply to a pseudo-element. For instance:
<input type="file"> ::-ms-browse { background: black; color: red; padding: 1em; }
In IE10 on Windows 8, the following is displayed:

Webkit
WebKit provides a hook for the file entry button with the pseudo-element ::-webkit-file-upload-button . Again, almost any CSS rule can be applied, so the Trident example will also work here:
<input type="file"> ::-webkit-file-upload-button { background: black; color: red; padding: 1em; }
On Chrome 26 on OS X, the following is displayed:

source share