【问题标题】:Select arrow style change选择箭头样式更改
【发布时间】:2023-03-29 06:37:01
【问题描述】:

我正在尝试用我自己的图片替换选择的箭头。我将选择包含在具有相同大小的 div 中,我将选择的背景设置为透明,并且在 div 的右上角包含一张图片(与箭头大小相同)作为背景。

它仅适用于 Chrome。

如何让它在 Firefox 和 IE9 中运行:

.styled-select {
  width: 100px;
  height: 17px;
  overflow: hidden;
  overflow: -moz-hidden-unscrollable;
  background: url(images/downarrow_blue.png) no-repeat right white;
  border: 2px double red;
  display: inline-block;
  position: relative;
}

.styled-select select {
  background: transparent;
  -webkit-appearance: none;
  width: 100px;
  font-size: 11px;
  border: 0;
  height: 17px;
  position: absolute;
  left: 0;
  top: 0;
}

body {
  background-color: #333333;
  color: #FFFFFF;
}

.block label {
  color: white;
}
<HTML>

<HEAD>
</HEAD>

<BODY>
  <p/>
  <form action="/prepareUpdateCategoryList.do?forwardto=search">

    <fieldset class="block" id="searchBlock">
      <p>
        <label style="width:80px">Class</label>
        <div class="styled-select">
          <select property="voucherCategoryClass">
    		<option value="0">Select </option>
    		<option value="7382">steam </option>
    	</select>
        </div>

      </p>
    </fieldset>
  </form>
</BODY>

</HTML>

【问题讨论】:

    标签: css select


    【解决方案1】:

    你有没有尝试过这样的事情:

    .styled-select select {
        -moz-appearance:none; /* Firefox */
        -webkit-appearance:none; /* Safari and Chrome */
        appearance:none;
    }
    

    尚未测试,但应该可以。

    编辑:看起来 Firefox 直到版本 35 才支持此功能 (read more here)

    有一个解决方法here,看看那个帖子上的jsfiddle

    【讨论】:

    • Internet Explorer 怎么样?
    • 看看@Peter Drinnan 的 IE 解决方案
    • 我从一个重复的问题中找到了这个答案,该问题显示了如何使用纯 CSS(无 png、jpeg 等)stackoverflow.com/a/28274325/2098017 实际添加“按钮”
    • “解决方法”问题中的 jsfiddle 不再有效。
    • 对于展示灯泡,请使用:appearance: menulist !important;-moz-appearance: menulist !important;-webkit-appearance: menulist !important;-o-appearance: menulist !important;
    【解决方案2】:

    我已经设置了一个select,其自定义箭头类似于 Julio 的答案,但是它没有设置宽度并使用svg 作为背景图像。 (arrow_drop_down来自material-ui图标)

    select {
      -webkit-appearance: none;
      -moz-appearance: none;
      background: transparent;
      background-image: url("data:image/svg+xml;utf8,<svg fill='black' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'><path d='M7 10l5 5 5-5z'/><path d='M0 0h24v24H0z' fill='none'/></svg>");
      background-repeat: no-repeat;
      background-position-x: 100%;
      background-position-y: 5px;
      border: 1px solid #dfdfdf;
      border-radius: 2px;
      margin-right: 2rem;
      padding: 1rem;
      padding-right: 2rem;
    }
    

    如果您还需要它在 IE 中工作,请将 svg 箭头更新为 base64 并添加以下内容:

    select::-ms-expand { display: none; }
    
    background-image: url(data:image/svg+xml;base64,PHN2ZyBmaWxsPSdibGFjaycgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyB3aWR0aD0nMjQnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc+PHBhdGggZD0nTTcgMTBsNSA1IDUtNXonLz48cGF0aCBkPSdNMCAwaDI0djI0SDB6JyBmaWxsPSdub25lJy8+PC9zdmc+);
    

    为了更容易调整箭头的大小和间距,请使用此 svg:

    url("data:image/svg+xml,<svg width='24' height='24' xmlns='http://www.w3.org/2000/svg'><path d='m0,6l12,12l12,-12l-24,0z'/><path fill='none' d='m0,0l24,0l0,24l-24,0l0,-24z'/></svg>");
    

    它在箭头的两侧没有任何间距。

    【讨论】:

    • 您可以使用background-position: top 5px right 4px;更精确地定位箭头
    • 压缩:background: url('data:image/svg+xml;utf-8,&lt;svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"&gt;&lt;path d="M7 10l5 5 5-5z"/&gt;&lt;path d="M0 0h24v24H0z" fill="none"/&gt;&lt;/svg&gt;') 100% 50% no-repeat transparent;
    • 我可以知道你为什么使用background-position-y: 5px;而不是%(例如background-position-y: 50%;)吗?
    • 不要在填充属性中使用十进制颜色,只能使用黑色、红色、蓝色等颜色名称...
    【解决方案3】:

    只使用一个类:

    select {
        width: 268px;
        padding: 5px;
        font-size: 16px;
        line-height: 1;
        border: 0;
        border-radius: 5px;
        height: 34px;
        background: url(http://cdn1.iconfinder.com/data/icons/cc_mono_icon_set/blacks/16x16/br_down.png) no-repeat right #ddd;
        -webkit-appearance: none;
        background-position-x: 244px;
    }
    

    http://jsfiddle.net/qhCsJ/4120/

    【讨论】:

    • 您的回答似乎是最直接的,并且只使用 css。
    • 值得你不必设置字段的宽度,也可以使用 % 作为背景位置:)
    • 火狐不支持background-position-x,但支持background-position
    • 可惜这个答案需要这么多调整:-/但这是一个很好的起点。
    • 如果你不想依赖于设置控件的宽度,但仍想从右侧填充图像,你可以使用 calc:例如background-position-x: calc( 100% - 5px );
    【解决方案4】:

    这是一个优雅的修复,它使用跨度来显示值。

    布局是这样的:

    <div class="selectDiv">
       <span class="selectDefault"></span>
       <select name="txtCountry" class="selectBox">
          <option class="defualt-text">-- Select Country --</option>
          <option value="1">Abkhazia</option>
          <option value="2">Afghanistan</option>
       </select>
    </div>
    

    JsFiddle

    【讨论】:

    • +1 对于这个解决方案,这是我发现在 IE9 和旧版浏览器上正确设置箭头样式的唯一方法。有很多网站简单地说你不能在 IE9 和之前的版本上设置选择框的样式,而是提供后备策略,但这个解决方案证明并非如此。
    • 感谢它非常有用。
    • 值得一提:此解决方案需要 javascript,此答案未标记为
    【解决方案5】:

    这对于那些使用 Bootstrap 的人来说尤其有效,并在最新的浏览器版本中进行了测试:

    select {
      -webkit-appearance: none;
      -moz-appearance: none;
      appearance: none;
      /* Some browsers will not display the caret when using calc, so we put the fallback first */ 
      background: url("http://cdn1.iconfinder.com/data/icons/cc_mono_icon_set/blacks/16x16/br_down.png") white no-repeat 98.5% !important; /* !important used for overriding all other customisations */
      background: url("http://cdn1.iconfinder.com/data/icons/cc_mono_icon_set/blacks/16x16/br_down.png") white no-repeat calc(100% - 10px) !important; /* Better placement regardless of input width */
    }
    /*For IE*/
    select::-ms-expand { display: none; }
    <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.css" rel="stylesheet"/>
    
    <div class="container">
      <div class="row">
        <div class="col-xs-6">
          <select class="form-control">
           <option>Option 1</option>
           <option>Option 2</option>
           <option>Option 3</option>
          </select>
        </div>
      </div>
    </div>

    【讨论】:

      【解决方案6】:

      检查这个 很hacky,就这么简单:

      • -prefix-appearance 设置为 none 以删除样式
      • 使用text-indent 将内容“推”到右边一点
      • 最后,将text-overflow 设置为空字符串。所有超出其宽度的东西都将变成……什么都没有!这包括箭头。

      现在你可以随意设置样式了:)

      .selectParent {
        width: 80px;
        overflow: hidden;
      }
      
      .selectParent select {
        text-indent: 1px;
        text-overflow: '';
        width: 100px;
        -webkit-appearance: none;
        -moz-appearance: none;
        appearance: none;
        padding: 2px 2px 2px 2px;
        border: none;
        background: transparent url("http://cdn1.iconfinder.com/data/icons/cc_mono_icon_set/blacks/16x16/br_down.png") no-repeat 60px center;
      }
      <div class="selectParent">
        <select>
          <option value="1">Option 1</option>
          <option value="2">Option 2</option>
        </select>
      </div>

      View on JSFiddle

      【讨论】:

        【解决方案7】:
        /* FIX OF UGLY SELECT */
        SELECT {
            background: url("data:image/svg+xml,<svg height='10px' width='10px' viewBox='0 0 16 16' fill='%23000000' xmlns='http://www.w3.org/2000/svg'><path d='M7.247 11.14 2.451 5.658C1.885 5.013 2.345 4 3.204 4h9.592a1 1 0 0 1 .753 1.659l-4.796 5.48a1 1 0 0 1-1.506 0z'/></svg>") no-repeat;
            background-position: calc(100% - 0.75rem) center !important;
            -moz-appearance:none !important;
            -webkit-appearance: none !important; 
            appearance: none !important;
            padding-right: 2rem !important;
        }
        

        调整变量以匹配您的表单样式。

        铬:

        火狐:

        歌剧:

        边缘:

        附言通过 Bootstrap 4 进行表单和输入设计

        【讨论】:

          【解决方案8】:
          .select{
            -webkit-appearance: none;
            -moz-appearance: none;
            background-image: url("data:image/svg+xml;utf8,<svg fill='black' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'><path d='M7 10l5 5 5-5z'/><path d='M0 0h24v24H0z' fill='none'/></svg>");
            background-repeat: no-repeat;
            background-position-x: 98%;
            background-position-y: 50%;
          }
          

          【讨论】:

            【解决方案9】:

            使用 CSS 设置标签样式并使用指针事件:

            <label>
            <select>
               <option value="0">Zero</option>
               <option value="1">One</option>
            </select>
            </label>
            

            而相对CSS是

            label:after {
                content:'\25BC';
                display:inline-block;
                color:#000;
                background-color:#fff;
                margin-left:-17px;   /* remove the damn :after space */
                pointer-events:none; /* let the click pass trough */
            }
            

            我在这里只使用了向下箭头,但您可以设置带有背景图像的块。这是一个丑陋的小提琴示例:https://jsfiddle.net/1rofzz89/

            【讨论】:

              【解决方案10】:

              它适用于所有浏览器:

              select {
                  width: 268px;
                  padding: 5px;
                  font-size: 16px;
                  line-height: 1;
                  border: 0;
                  border-radius: 5px;
                  height: 34px;
                  background: url(http://cdn1.iconfinder.com/data/icons/cc_mono_icon_set/blacks/16x16/br_down.png) no-repeat right #ddd;
                  appearance:none;
                  -moz-appearance:none; /* Firefox */
                  -webkit-appearance:none; /* Safari and Chrome */
                  background-position-x: 244px;
              
              }
              

              【讨论】:

              • 你不认为 IE 是浏览器。我不会为此投票给你。
              【解决方案11】:

              我想弄清楚之前没有人提及的事情。

              1. 首先获取您的svg 图像或图标
              2. 在那里你会得到一些像&lt;svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg"&gt; &lt;path d="M4 10.127L12 18.127L20 10.127H4Z" fill="#8E8E93"/&gt; &lt;/svg&gt;这样的xml代码尝试找到它。
              3. 并在此代码之后通过它data:image/svg+xml;utf8,
              4. 将填充颜色 fill="#8E8E93" 替换为 fill="%238E8E93" 如果要添加十六进制颜色,应将 # 更改为 %23

              这里是html代码:

              <fieldset>
                <label for="editName">Country</label>
                <select class="ra-select">
                  <option value="bangladesh" selected>Bangladesh</option>
                  <option value="saudi arabia">Saudi Arabia</option>
                  <option value="us">Uinited State Of America</option>
                  <option value="india">India</option>
                </select>
              </fieldset>
              

              这是css代码:

              .ra-select {
                 width: 30%;
                 padding: 10px;
                 /* Replace Default styling (arrow) */
                 appearance: none;
                 -webkit-appearance: none;
                 -moz-appearance: none;
                 background-image: url('data:image/svg+xml;utf8,<svg width="24" height="25" viewBox="0 0 24 25" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M4 10.127L12 18.127L20 10.127H4Z" fill="%238E8E93"/></svg>');
                 background-repeat: no-repeat;
                 background-position-y: 50%;
                 background-position-x: 98%;
              }
              
              .ra-select:focus,
              .ra-select:hover {
                 outline: none;
                 border: 1px solid #bbb;
              }
              
              .ra-select option {
                 background-color: #fff;
              }
              

              【讨论】:

                【解决方案12】:

                这样做:

                select {
                
                    background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNSIgaGVpZ2h0PSIyNSIgZmlsbD0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2U9IiNiYmIiPjxwYXRoIGQ9Ik02IDlsNiA2IDYtNiIvPjwvc3ZnPg==) !important;
                    background-repeat: no-repeat !important;
                    background-position-x: 100% !important;
                    background-position-y: 50% !important;
                    
                    -webkit-appearance: none !important;
                    -moz-appearance: none !important;
                    -ms-appearance: none !important;
                    -o-appearance: none !important;
                    appearance: none !important;
                }
                select::-ms-expand {
                    display: none;
                }

                【讨论】:

                  【解决方案13】:

                  你可以使用它。其测试代码

                      select {
                      background: url(http://cdn1.iconfinder.com/data/icons/cc_mono_icon_set/blacks/16x16/br_down.png) no-repeat right !important;
                      appearance: none !important;
                      background-size: 25px 25px !important;
                      background-position: 99% 50% !important;
                  }
                  

                  【讨论】:

                    【解决方案14】:

                    我已经提到了这个post,它就像魅力一样,除了它没有隐藏IE浏览器中的箭头。

                    但是添加以下内容会隐藏 IE 中的箭头:

                    &::-ms-expand {
                          display: none;
                        }

                    完整的解决方案(sass)

                    $select-border-color: #ccc;
                    $select-focus-color: green;
                    
                    select {
                    
                        cursor: pointer;
                        /* styling */
                        background-color: white;
                        border: 1px solid $select-border-color;
                        border-radius: 4px;
                        display: inline-block;
                        font: inherit;
                        line-height: 1.5em;
                        padding: 0.5em 3.5em 0.5em 1em;
                    
                        /* reset */
                        margin: 0;
                        -webkit-box-sizing: border-box;
                        -moz-box-sizing: border-box;
                        box-sizing: border-box;
                        -webkit-appearance: none;
                        -moz-appearance: none;
                    
                        background-image: linear-gradient(45deg, transparent 50%, $select-border-color 50%),
                        linear-gradient(135deg, $select-border-color 50%, transparent 50%),
                        linear-gradient(to right, $select-border-color, $select-border-color);
                        background-position: calc(100% - 20px) calc(1em + 2px),
                        calc(100% - 15px) calc(1em + 2px), calc(100% - 2.5em) 0.5em;
                        background-size: 5px 5px, 5px 5px, 1px 1.5em;
                        background-repeat: no-repeat;
                    
                        /* Very imp: hide arrow in IE */
                        &::-ms-expand {
                          display: none;
                        }
                    
                        &:-moz-focusring {
                          color: transparent;
                          text-shadow: none;
                        }
                    
                        &:focus {
                          background-image: linear-gradient(45deg, $select-focus-color 50%, transparent 50%),
                          linear-gradient(135deg, transparent 50%, $select-focus-color 50%), linear-gradient(to right, $select-focus-color, $select-focus-color);
                          background-position: calc(100% - 15px) 1em, calc(100% - 20px) 1em, calc(100% - 2.5em) 0.5em;
                          background-size: 5px 5px, 5px 5px, 1px 1.5em;
                          background-repeat: no-repeat;
                          border-color: $select-focus-color;
                          outline: 0;
                        }
                      }

                    【讨论】:

                      【解决方案15】:

                      简单的箭头和干净的代码

                      select {
                          -webkit-appearance: none;
                          -moz-appearance: none;
                          appearance: none;
                          border: none;
                          background: transparent url(http://cdn1.iconfinder.com/data/icons/cc_mono_icon_set/blacks/16x16/br_down.png) no-repeat 100% center;
                          padding-right: 25px;
                      }
                      

                      【讨论】:

                        【解决方案16】:

                        有几个例子here

                        它基于this answer,但我在列表中添加了一个以使设计更加简约

                        select.moreMinimal {
                        
                            background-color: inherit;
                            display: inline-block;
                            font: inherit;
                            padding: 0 2.2em 0 1em;    
                            margin: 0;      
                            cursor: pointer;
                        
                            -webkit-box-sizing: border-box;
                            -moz-box-sizing: border-box;
                            box-sizing: border-box;
                            -webkit-appearance: none;
                            -moz-appearance: none;
                          }
                        
                        select.moreMinimal {
                            background-image:
                              linear-gradient(45deg, transparent 50%, gray 50%),
                              linear-gradient(135deg, gray 50%, transparent 50%);
                            background-position:
                              calc(100% - 20px), 
                              calc(100% - 15px);
                            background-size:
                              5px 5px,
                              5px 5px;
                            background-repeat: no-repeat;
                        }
                          
                        //TODO: Probably shouldn't be focus, cause when you click it again it's still green
                        select.moreMinimal:focus {
                            background-image:
                                linear-gradient(45deg, green 50%, transparent 50%),
                                linear-gradient(135deg, transparent 50%, green 50%);
                            background-position:
                                calc(100% - 15px),
                                calc(100% - 20px);
                            background-size:
                                5px 5px,
                                5px 5px;
                            background-repeat: no-repeat;
                            border-color: green;
                            outline: 0;
                        }
                        

                        【讨论】:

                          【解决方案17】:

                          你也可以试试这个:

                          Heres a Picture of it!

                          同时运行代码 sn-p!

                          CSS 然后是 HTML:

                                     #select-category {
                                      font-size: 100%;
                                      padding: 10px;
                                      padding-right: 180px;
                                      margin-left: 30px;
                                      border-radius: 1000000px;
                                      border: 1px solid #707070;
                                      outline: none;
                                      -webkit-appearance: none;
                                      -moz-appearance: none;
                                      background: transparent;
                                      background-image: url("data:image/svg+xml;utf8,<svg fill='black' height='34' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'><path d='M7 10l5 5 5-5z'/><path d='M0 0h24v24H0z' fill='none'/></svg>");
                                      background-repeat: no-repeat;
                                      background-position-x: 100%;
                                      background-position-y: 5px;
                                      margin-right: 2rem;
                                  }
                                          <select id="select-category">
                                              <option>Category</option>
                                              <option>Category 2</option>
                                              <option>Category 3</option>
                                              <option>Category 4</option>
                                              <option>Category 5</option>
                                              <option>Category 6</option>
                                              <option>Category 7</option>
                                              <option>Category 8</option>
                                              <option>Category 9</option>
                                              <option>Category 10</option>
                                              <option>Category 11</option>
                                              <option>Category 12</option>
                                          </select>

                          【讨论】:

                            【解决方案18】:

                            假设,selectDrop 是您的 HTML 标记中存在的类。所以,这么多代码足以更改默认箭头图标:

                            .selectDrop{
                                  background: url(../images/icn-down-arrow-light.png) no-repeat right #ddd; /*To change default icon with provided image*/
                                  -webkit-appearance:none; /*For hiding default pointer of drop-down on Chrome*/
                                  -moz-appearance:none; /*For hiding default pointer of drop-down on Mozilla*/
                                  background-position-x: 90%; /*Adjust according to width of dropdown*/
                                }
                            

                            【讨论】:

                              猜你喜欢
                              • 1970-01-01
                              • 1970-01-01
                              • 2020-09-15
                              • 1970-01-01
                              • 1970-01-01
                              • 2018-03-15
                              • 1970-01-01
                              • 2011-03-01
                              • 2020-12-29
                              相关资源
                              最近更新 更多