How to remove the arrow from a select element in Firefox

后端 未结 30 1279
北恋
北恋 2020-11-22 15:58

I\'m trying to style a select element using CSS3. I\'m getting the results I desire in WebKit (Chrome / Safari), but Firefox isn\'t playing nicely (I\'m not ev

相关标签:
30条回答
  • 2020-11-22 16:52

    We've found a simple and decent way to do this. It's cross-browser,degradable, and doesn't break a form post. First set the select box's opacity to 0.

    .select { 
        opacity : 0;
        width: 200px;
        height: 15px;
    }
    
    <select class='select'>
        <option value='foo'>bar</option>    
    </select>
    

    this is so you can still click on it

    Then make div with the same dimensions as the select box. The div should lay under the select box as the background. Use { position: absolute } and z-index to achieve this.

    .div {
        width: 200px;
        height: 15px;
        position: absolute;
        z-index: 0;
    }
    
    <div class='.div'>{the text of the the current selection updated by javascript}</div>
    <select class='select'>
        <option value='foo'>bar</option>    
    </select>
    

    Update the div's innerHTML with javascript. Easypeasy with jQuery:

    $('.select').click(function(event)) { 
        $('.div').html($('.select option:selected').val());
    }
    

    That's it! Just style your div instead of the select box. I haven't tested the above code so you'll probably need tweak it. But hopefully you get the gist.

    I think this solution beats {-webkit-appearance: none;}. What browsers should do at the very most is dictate interaction with form elements, but definitely not how their initially displayed on the page as that breaks site design.

    0 讨论(0)
  • 2020-11-22 16:52

    building on the answer by @JoãoCunha, one css style that is usefull for more then one browser

    select {
        /*for firefox*/
        -moz-appearance: none;
        /*for chrome*/
        -webkit-appearance:none;
        text-indent: 0.01px;
        text-overflow: '';
    }
    /*for IE10*/
    select::-ms-expand {
        display: none;
    }
    
    0 讨论(0)
  • 2020-11-22 16:53

    Or, you can clip the select. Something along the lines of:

    select { width:200px; position:absolute; clip:rect(0, 170px, 50px, 0); }
    

    This should clip 30px of the right side of select box, stripping away the arrow. Now supply a 170px background image and voila, styled select

    0 讨论(0)
  • 2020-11-22 16:55

    Try this way:

    -webkit-appearance: button;
    -moz-appearance: button;
    

    Then, you can use a different image as background and place it:

    background-image: url(images/select-arrow.png);
    background-position: center right;
    background-repeat: no-repeat;
    

    There is another way for moz browsers:

    text-indent:10px;
    

    If you have a defined a width to you select, this property will push the default dropbox button under the select area.

    It works for me! ;)

    0 讨论(0)
  • 2020-11-22 16:55

    While not a complete solution I've found that…

    -moz-appearance: window;
    

    …works to some extent. You can't change the background (-color or -image) but the element can be rendered invisible with color: transparent. Not perfect but it's a start and you don't need to replace the system level element with a js one.

    0 讨论(0)
  • 2020-11-22 16:56

    A useful hack for me is to set the (selects) display to inline-flex. Cuts the arrow right out of my select button. Without all of the added code.

    • For Fx only. -webkit appearance still needed for Chrome, etc...
    0 讨论(0)
提交回复
热议问题