I was experimenting on custom styling the <select>
elements of a form I was building. One of the things I tried implementing was truncating the text with an ellipsis in case it extended beyond the <select>
's width. It didn't look consistent through browsers, but I've accidentally discovered something really nice.
Firefox <select>
with appearance
attribute set to none
(Ubuntu):
Chrome <select>
with appearance
attribute set to none
(Ubuntu):
As this 2011 bug report states, there is an issue regarding Firefox's -moz-appearance
and <select>
elements: it was supposed to ditch the <select>
's arrow (like Chrome's implementation) but it simply doesn't. People were raging about the subject all over the internetz.
Until now.
Here is the clever workaround to make it work:
- Set
-moz-appearance
tonone
. This will "reset" the styling of the element; - Set
text-indent
to0.01px
. This will "push" the text a tiny bit[1] to the right; - Set
text-overflow
to''
(an empty string). This will change anything that extends beyond the element's width to... nothing - and this includes the infamous arrow!
Voilà! A wild select appears!
http://codepen.io/joaocunha/pen/qLgCG
(Firefox only, duh)
- Firefox doesn't remove the arrow, it hides it. You will have some white space on the right[2] (same width of the now-hidden arrow);
- Chrome removes the arrow by default with
-webkit-appearance:none;
instead of hiding. No white space on the right; - Chrome doesn't support the
text-overflow:''
. No evenly-cut text; - Your best bet is to set some
padding-right
in order to provide right space for your styled version of the arrow. Just keep in mind that Firefox will take the ghost arrow width into account; - Turns out that Windows doesn't require the
-moz-appearance: none;
declaration at all. Tested on 8; - Firefox for Android needs the whole
width
of the arrow astext-indent
. It means you need to set it to at least5px
, but take care since Firefox seems to double thetext-indent
value on<select>
elements.
Tested on Ubuntu, Windows 8 and Mac, all with recent versions (20.x.x at least).
Follow me on twitter: @joaocunha
[1] Thanks to Binyamin for improving it from 1px to 0.01px.
[2] Thanks to RussellUresti for noticing the white space.