화살표 스타일 변경 선택


125

선택의 화살표를 내 사진으로 바꾸려고합니다. 같은 크기의 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>

답변:


123

다음과 같은 것을 시도해 보셨습니까?

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

테스트하지 않았지만 작동해야합니다.

편집 : Firefox는 버전 35 까지이 기능을 지원하지 않는 것 같습니다 ( 여기에서 자세히 읽으십시오 )

여기에 해결 방법이 있습니다jsfiddle . 해당 게시물을 살펴보십시오 .


1
Internet Explorer는 어떻습니까?
Francisco Corrales Morales

IE를위한 @Peter Drinnan의 솔루션을 살펴보십시오
Morpheus

순수한 CSS (png, jpeg 등 없음)를 사용하여 실제로 "버튼"을 추가하는 방법을 보여주는 중복 질문에서이 답변을 찾았습니다. stackoverflow.com/a/28274325/2098017
Anthony F.

'해결 방법'질문의 jsfiddle이 더 이상 작동하지 않습니다.
Dragos Rizescu 2016 년

쇼 전구의 경우 다음을 사용하십시오.appearance: menulist !important;-moz-appearance: menulist !important;-webkit-appearance: menulist !important;-o-appearance: menulist !important;
mghhgm

60

나는를 설정 한 select그러나 그것은 일련의 폭이없는, 훌리오의 대답과 비슷한 화살표 사용자 정의로와를 사용하여 svg배경 이미지로. ( arrow_drop_down머티리얼 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>");

화살표 측면에 간격이 없습니다.


1
화살표를 더 정확하게 배치 할 수 있습니다background-position: top 5px right 4px;
Koen

압축 :background: url('data:image/svg+xml;utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"><path d="M7 10l5 5 5-5z"/><path d="M0 0h24v24H0z" fill="none"/></svg>') 100% 50% no-repeat transparent;
K-Gun

background-position-y: 5px;% 대신 사용 하는 이유를 알 수 background-position-y: 50%;있습니까 (예 :) ?
Sam

45

하나의 클래스로 작업 :

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/


1
귀하의 답변은 가장 간단하고 CSS 만 사용합니다.
Austin Lovell

1
그것의 가치는 당신은 필드의 폭을 설정하지 않고 :) 또한 배경 위치를 %를 사용할 수 있습니다 무엇을 위해
shaneonabike

2
파이어 폭스는 배경 위치-X를 지원하지 않지만, 배경 위치 지원
kriskodzi

2
이 대답은 너무 많은 조정이 필요합니다 :-/ 그러나 좋은 출발 선입니다.
walther 2015 년

1
컨트롤의 너비 설정에 의존하지 않고 오른쪽에서 이미지를 다시 background-position-x: calc( 100% - 5px );
채우

29

다음은 범위를 사용하여 값을 표시하는 우아한 수정입니다.

레이아웃은 다음과 같습니다.

<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


5
이 솔루션의 경우 +1, IE9 및 이전 브라우저에서 화살표 스타일을 올바르게 지정하는 유일한 방법입니다. IE9 및 이전 버전에서는 선택 상자의 스타일을 지정할 수없고 대신 대체 전략을 제공하는 사이트가 많이 있지만이 솔루션은 그렇지 않습니다.
Jon

감사합니다.
심한 고문

3
언급 할 가치가 있습니다. 이 솔루션에는 javascript가 필요하며이 답변 에는 태그가 없습니다 .
random_user_name jul.

21

이것은 최신 브라우저 버전에서 테스트 된 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>


9

이것을 확인하십시오 그것은 해키하고 간단합니다.

  • 설정 -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>

JSFiddle에서보기


6

모든 브라우저에서 작동합니다.

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;

}

9
IE를 브라우저라고 생각하지 않습니다. 나는 그것에 대해 당신에게 반대 투표하지 않을 것입니다.
user1566694

5

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/


1

나는이 게시물 을 참조 했는데, 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;
    }
  }


-1

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*/
    }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.