Firefox에서 선택 요소에서 화살표를 제거하는 방법


172

selectCSS3을 사용하여 요소의 스타일을 지정하려고합니다 . WebKit (Chrome / Safari)에서 원하는 결과를 얻었지만 Firefox가 제대로 재생되지 않습니다 (IE도 귀찮게하지 않습니다). CSS3 appearance속성을 사용하고 있지만 어떤 이유로 Firefox에서 드롭 다운 아이콘을 흔들 수 없습니다.

여기 내가하고있는 일의 예가 있습니다 : http://jsbin.com/aniyu4/2/edit

#dropdown {
 -moz-appearance: none;
 -webkit-appearance: none;
 appearance: none;
 background: transparent url('example.png') no-repeat right center;
 padding: 2px 30px 2px 2px;
 border: none;
}

보시다시피, 나는 멋진 것을 시도하지 않습니다. 기본 스타일을 제거하고 드롭 다운 화살표를 추가하고 싶습니다. 내가 말했듯이, WebKit에서는 훌륭하지만 Firefox에서는 훌륭하지 않습니다. 분명히 -moz-appearance: none드롭 다운 항목을 제거하지 않습니다.

어떤 아이디어? 아니요, JavaScript는 옵션이 아닙니다


3
이에 대한 버그 보고서가 있습니다 : bugzilla.mozilla.org/show_bug.cgi?id=649849
sneilan

3
Chosen선택한 스타일을 스타일링하여 정말 멋지게 보이게하는 JavaScript 라이브러리입니다. 문제를 해결하지 못할 수도 있지만 조사해 볼 가치가 있습니다.
stephenmurdoch

:이 블로그 게시물 유용하게 찾을 수 red-team-design.com/making-html-dropdowns-not-suck
루이 마르케스

1
그들이 -moz-appearance사용 -moz-appearance: none;하고 있는 CSS3 속성을 추가 한 것처럼 보이며 35.0.1 버전에서 작동하는 것으로 보입니다.
Tony M

간단한 수정은 선택 요소를 컨테이너보다 넓게 만드는 것입니다. 그리고 mozilla url-prefix를 감싸서 파이어 폭스에서만 옵션을 넓 힙니다. @-moz-document url-prefix() { select { width: 105%; overflow: hidden; } }
Luke Femur

답변:


78

좋아, 나는이 질문이 오래되었다는 것을 알고있다.

간단한 해결 방법을 생각해 냈습니다.

이것은 본질적으로 파이어 폭스에서 선택 상자의 모든 형식을 제거하고 선택 상자 주위의 범위 요소를 사용자 정의 스타일로 래핑하지만 파이어 폭스에만 적용해야합니다.

이것이 선택 메뉴라고 가정하십시오.

<select class='css-select'>
  <option value='1'> First option </option>
  <option value='2'> Second option </option>
</select>

그리고 CSS 클래스 'css-select'가 다음과 같다고 가정하십시오.

.css-select {
   background-image: url('images/select_arrow.gif');
   background-repeat: no-repeat;
   background-position: right center;
   padding-right: 20px;
}

파이어 폭스에서는 선택 메뉴, 추한 파이어 폭스 선택 화살표, 멋진 사용자 정의 화살표가 표시됩니다. 이상적이지 않습니다.

이제 파이어 폭스 에서이 작업을 수행하려면 'css-select-moz'클래스와 함께 span 요소를 추가하십시오.

   <span class='css-select-moz'>
     <select class='css-select'>
       <option value='1'> First option </option>
       <option value='2'> Second option </option>
     </select>
   </span>

그런 다음 CSS를 수정하여 -moz-appearance : window로 mozilla의 더티 화살표를 숨기고 사용자 정의 화살표를 스팬 클래스 'css-select-moz'에 던지지 만 다음과 같이 mozilla에만 표시하십시오.

.css-select {
   -moz-appearance:window;
   background-image: url('images/select_arrow.gif');
   background-repeat: no-repeat;
   background-position: right center;
   padding-right: 20px;
}

@-moz-document url-prefix() {
.css-select-moz{
     background-image: url('images/select_arrow.gif');
     background-repeat: no-repeat;
     background-position: right center;
     padding-right: 20px;
  }
} 

3 시간 전에이 버그를 우연히 발견 한 것만으로도 멋지다 (웹 디자인을 처음 접했고 완전히 독학했다). 그러나이 커뮤니티는 간접적으로 많은 도움을 주었다. 나는 무언가를 돌려 줄 때가되었다고 생각했다.

파이어 폭스 (mac) 버전 18에서만 테스트 한 다음 22 (업데이트 후)로 테스트했습니다.

모든 의견을 환영합니다.


2
그리고 2 년 후, 이것은 내가 원하는 결과를 달성하기 위해 게시 된 가장 좋은 답변입니다. 다른 사람들이 볼 수 있도록 jsbin.com/aniyu4/2440/edit 코드의 JSBin을 여기에 넣고 단 하나의 CSS 업데이트 만 만들었습니다. 오른쪽 여백으로 인해 범위가 FF의 선택보다 넓어졌습니다. 이는 화살표를 클릭해도 드롭 다운이 활성화되지 않았 음을 의미합니다. 이를 조정하기 위해 선택 요소에 음의 오른쪽 여백을 두어 범위의 너비를 뒤로 당겨 선택 너비를 겹칩니다.
RussellUresti

오 당연하지! 정말 고마워요, 러셀 이것이 도움이 된 것을 정말로 기쁘게 생각합니다.
Jordan Young

5
Windows의 FF 23-24에서 나를 위해 작동하지 않았습니다 (댓글에서 jsbin을 시도했습니다). tis 해결 방법 stackoverflow.com/questions/6787667/…
Esteban

4
FF 30에서는 더 이상 작동하지 않습니다. 계속해서 Mozilla 웹 사이트 ( bugzilla.mozilla.org/show_bug.cgi?id=649849) 에 티켓을 제출하십시오 . 더 많은 사람들이 그것에 대해 불평할수록 우리는 그것을 고칠 확률이 높아집니다.
Stan

1
Mac의 FF 31에서만 작동합니다.
Erwin Wessels

165

업데이트 : 이것은 Firefox v35에서 수정되었습니다. 자세한 내용은 전체 요점 을 참조하십시오.


Firefox에서 선택 화살표를 제거하는 방법을 알아 냈습니다 . 트릭의 혼합을 사용하는 것입니다 -prefix-appearance, text-indent하고 text-overflow. 순수 CSS이며 추가 마크 업이 필요하지 않습니다.

select {
    -moz-appearance: none;
    text-indent: 0.01px;
    text-overflow: '';
}

최신 버전의 Firefox 인 Windows 8, Ubuntu 및 Mac에서 테스트되었습니다.

라이브 예 : http://jsfiddle.net/joaocunha/RUEbp/1/

주제에 대한 자세한 내용 : https://gist.github.com/joaocunha/6273016


1
나는 이런 식으로 해키 픽스를 위해 보통 차가운 마음에 특별한 장소를 가지고 있습니다. 오히려 훌륭합니다. 유일한 단점은 FF가 드롭 다운 텍스트 영역의 끝에 (실제 텍스트와 선택 상자의 끝 사이에) 공백을 남겨두고 FF와 다른 브라우저 사이에 간격이 일치하지 않지만 약간의 퀴즈입니다. 좋은 발견.
RussellUresti

좋은 캐치, @RussellUresti. 그러나 전체 아이디어가 수정 된 화살표를 제공하는 것임을 고려할 때 공간은 실제로 유용합니다. 나는 그것으로 조금 연주하고 padding-right:10px;, <select>의지에 추가 하면 이제 보이지 않는 화살표를 왼쪽으로 밀어 넣습니다. 결론 : Firefox는 화살표를 숨기고 Chrome은 제거합니다. 그에 따라 저의 글을 업데이트하겠습니다.
João Cunha

답변으로 약간의 크로스 브라우저 (이전 버전의 IE에서는 테스트되지 않음)를 추가하여 업데이트 할 수 있습니다
Daniël Tulp

2
-moz-appearence: window투명한 배경에서 작동하지 않는 최상의 솔루션 (적어도 파이어 폭스 리눅스에서 추한 bg를 그립니다)
kik

이렇게하면 화살표가 모두 제거되므로 결과로 나오는 <select>는 텍스트 상자처럼 보이고 다소보기 흉합니다. : 당신은 드롭 다운처럼 보이게 할 수있는 배경 이미지 다시 추가 할 수 있도록 codepen.io/anon/pen/nvfCq
thom_nic

59

나를 위해 작동하는 트릭은 선택 너비를 100 % 이상으로 만들고 overflow : hidden을 적용하는 것입니다.

select {
    overflow:hidden;
    width: 120%;
}

이것이 FF에서 드롭 다운 화살표를 숨기는 유일한 방법입니다.

BTW. 아름다운 드롭 다운을 원하면 http://harvesthq.github.com/chosen/


6
이것은 나에게 영향을 미치지 않습니다. FF 6.0.2
찰리 슐 리서

1
IE에도 좋은 솔루션입니다. 내 솔루션에서 포함 div 요소를 overflow : hidden으로 설정 한 다음 선택 너비를 크게했습니다. 잘 작동합니다.
Mike

@Charlie S : 포함하는 div에 overflow : hidden을 넣으십시오. 그것은 taht와 함께 나를 위해 작동
PierrOz

1
드롭 다운을 확장하면 overflow : hidden이 작동하지 않습니다.
Marc

나를 위해 잘 작동합니다. 드롭 다운 목록을 최상위 비트보다 약간 넓게 만들지 만 지불하고자하는 가격입니다.
Jimbali

26

중요 업데이트 :

Firefox V35부터 모양 속성이 작동합니다!

에서 V35에 파이어 폭스의 공식 릴리스 노트 :

콤보 박스 -moz-appearancenone값 과 함께 사용 하면 드롭 다운 버튼 (버그 649849)이 제거됩니다.

이제 기본 화살표를 숨기려면 select 요소에 다음 규칙을 추가하는 것이 쉽습니다.

select {
   -webkit-appearance: none;
   -moz-appearance: none;
   appearance: none;
}

데모

select {
  margin: 50px;
  border: 1px solid #111;
  background: transparent;
  width: 150px;
  padding: 5px;
  font-size: 16px;
  border: 1px solid #ccc;
  height: 34px;
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
}
<select>
  <option>Apples</option>
  <option selected>Pineapples</option>
  <option>Chocklate</option>
  <option>Pancakes</option>
</select>


20

이 작업을 수행하는 간단하고 알맞은 방법을 찾았습니다. 브라우저 간, 분해 가능하며 양식 게시물을 손상시키지 않습니다. 첫째는 선택 상자의 설정 opacity에를 0.

.select { 
    opacity : 0;
    width: 200px;
    height: 15px;
}

<select class='select'>
    <option value='foo'>bar</option>    
</select>

이것은 당신이 여전히 그것을 클릭 할 수 있도록

그런 다음 선택 상자와 동일한 치수로 div를 만드십시오. div는 배경으로 선택 상자 아래에 있어야합니다. 사용 { position: absolute }하고 z-index이것을 달성하십시오.

.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>

자바 스크립트로 div의 innerHTML을 업데이트하십시오. jQuery로 Easypeasy :

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

그게 다야! 선택 상자 대신 div 스타일을 지정하십시오. 위의 코드를 테스트하지 않았으므로 아마도 조정해야 할 것입니다. 그러나 희망적으로 요점을 얻습니다.

이 솔루션이 이길 것이라고 생각합니다 {-webkit-appearance: none;}. 브라우저가 가장해야 할 일은 양식 요소와의 상호 작용을 지시하는 것이지만 사이트 디자인을 깨뜨릴 때 처음에 페이지에 표시되는 방식은 아닙니다.


6
나쁜 해결책은 아니며 파일 업로드 입력 요소의 스타일을 지정하는 패턴과 비슷하지만 몇 가지 단점이 있습니다. 첫째, JS에 의존하는데 이는 이상적이지 않습니다. 둘째, 폼에 재설정 단추가 있으면 해당 기능도 스크립팅해야합니다 (현재 JS는 select 요소에 대한 클릭 만 청취하지만 form.reset 이벤트에는 응답하지 않습니다). select 요소를 div로 바꾸면 효과가 있지만 이상적으로는 양식 요소의 모양을 스타일 지정할 수 있습니다. JS 및 기본 양식 동작과 관련된 접근성 문제도 있습니다.
RussellUresti

14

이 방법으로 시도하십시오 :

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

그런 다음 다른 이미지를 배경으로 사용하여 배치 할 수 있습니다.

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

moz 브라우저에는 다른 방법이 있습니다.

text-indent:10px;

선택한 너비를 정의한 경우이 속성은 선택 영역 아래에 기본 드롭 박스 버튼을 누릅니다.

그것은 나를 위해 작동합니다! ;)


6

완벽한 솔루션은 아니지만 다음을 발견했습니다.

-moz-appearance: window;

… 어느 정도 작동합니다. 배경 (-컬러 또는-이미지)을 변경할 수 없지만 요소를 색상 : 투명으로 보이지 않게 렌더링 할 수 있습니다. 완벽하지는 않지만 시작에 불과하므로 시스템 레벨 요소를 js로 바꿀 필요가 없습니다.


네, window불행히도 배경 이미지를 설정해야한다는 것을 알았 습니다. 불행히도 Firefox에서는 그다지 좋지 않습니다.
RussellUresti

불행히도 요소를 형성하기 위해 전체 재설정을 적용 할 수는 없습니다. 물론 <select> 아래에 요소를 두어 배경을 항상 가짜로 만들 수 있습니다.
스튜어트 배드민턴

1
이다 PERFECT를 인쇄! media="print"CSS 블록을 설정하고 select {-moz-appearance: window;}FF에서 모든 선택의 화살표와 배경을 제거합니다 (다른 브라우저의 경우 모양 또는 웹킷 모양을 시도). 일반 텍스트 나 제목처럼 보이도록
FrancescoMM

4

솔루션이 FF31과 호환되는 것으로 나타났습니다 !!!
다음은이 링크에서 잘 설명 된 두 가지 옵션입니다.
http://www.currelis.com/hiding-select-arrow-firefox-30.html

옵션 1을 사용했습니다. Rodrigo-Ludgero는 온라인을 포함하여이 수정 프로그램을 Github에 게시했습니다. 데모. Firefox 31.0에서이 데모를 테스트했는데 제대로 작동하는 것 같습니다. Chrome 및 IE에서도 테스트되었습니다. HTML 코드는 다음과 같습니다.

<!DOCTYPE html>
<html>
    <head>
    <meta charset="utf-8">
    <title>Custom Select</title>
    <link href="http://netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.min.css" rel="stylesheet" type="text/css" />
    </head>
    <body>
        <div class="custom-select fa-caret-down">
            <select name="" id="">
                <option value="">Custom Select</option>
                <option value="">Custom Select</option>
                <option value="">Custom Select</option>
            </select>
        </div>
    </body>
</html>

그리고 CSS :

.custom-select {
    background-color: #fff;
    border: 1px solid #ccc;
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
    margin: 0 0 2em;
    padding: 0;
    position: relative;
    width: 100%;
    z-index: 1;
}

.custom-select:hover {
    border-color: #999;
}

.custom-select:before {
    color: #333;
    display: block;
    font-family: 'FontAwesome';
    font-size: 1em;
    height: 100%;
    line-height: 2.5em;
    padding: 0 0.625em;
    position: absolute;
    top: 0;
    right: 0;
    text-align: center;
    width: 1em;
    z-index: -1;
}

.custom-select select {
    background-color: transparent;
    border: 0 none;
    box-shadow: none;
    color: #333;
    display: block;
    font-size: 100%;
    line-height: normal;
    margin: 0;
    padding: .5em;
    width: 100%;
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
    -webkit-appearance: none;
    -moz-appearance: none;
    appearance: none;
}

.custom-select select::-ms-expand {
    display: none; /* to ie 10 */
}

.custom-select select:focus {
    outline: none;
}
/* little trick for custom select elements in mozilla firefox  17/06/2014 @rodrigoludgero */
:-moz-any(.custom-select):before {
    background-color: #fff; /* this is necessary for overcome the caret default browser */
    pointer-events: none; 
    z-index: 1; /* this is necessary for overcome the pseudo element */
}

http://jsbin.com/pozomu/4/edit

그것은 나에게 아주 잘 작동합니다!


2
외부 리소스에 대한 링크가 권장되지만 링크 주위에 컨텍스트를 추가하여 동료 사용자가 그 정보와 그 이유를 알 수 있도록하십시오. 대상 사이트에 연결할 수 없거나 영구적으로 오프라인 상태가되는 경우 항상 중요한 링크의 가장 관련성있는 부분을 인용하십시오.
Andrew Stubbs

제안 해 주셔서 감사합니다! 내 잘못에 대해 죄송합니다!
ferocesalatino

질문을 편집 해 주셔서 감사합니다. 그러나 여전히 질문 자체에 대한 답변은 아닙니다 . 질문자가 답변을 읽는 것만으로 문제를 해결할 수 있도록 해당 링크의 일부를 복사하십시오.
Andrew Stubbs

2

불행하게도 당신이 있다 "뭔가 공상". 일반적으로 웹 작성자는 양식 요소를 다시 디자인하지 않습니다. 많은 브라우저는 사용자가 자신이 사용하는 OS 컨트롤을 볼 수 있도록 의도적으로 스타일을 지정할 수 없습니다.

브라우저 및 운영 체제에서 일관되게이 작업을 수행하는 유일한 방법은 JavaScript를 사용하고 select요소를 "DHTML"요소로 바꾸는 것입니다.

다음 기사에서는 그렇게 할 수있는 3 가지 jQuery 기반 플러그인을 보여줍니다 (약간 오래되었지만 현재는 아무것도 찾을 수 없습니다)

http://www.queness.com/post/204/25-jquery-plugins-that-enhance-and-beautify-html-form-elements#1


8
나는 이것이 실험적인 것이기는하지만 멋진 것에는 동의하지 않습니다. appearance속성 의 전체 요점은 개발자가 양식 요소의 모양을 제어 할 수있게하는 것입니다. JavaScript를 사용하는 것은 끔찍한 해결책이기 때문입니다. 브라우저는 페이지에 표시되는 내용에 대해 결정해서는 안됩니다. 브라우저 공급 업체의 결정이 아니라 UX 결정입니다. 불행히도 아직 잘 지원되지 않습니다. 아마 다른 해에.
RussellUresti

페이지를 인쇄 할 때 모든 선택 항목이 화살표가없는 필드처럼 보이도록하려면 "팬시"를 고려하지 않습니다. 그리고 그것은 브라우저 또는 OS 선택이 아닌 내 선택이어야합니다. 나는 몇 달을 선택할 수 있으며 페이지가 인쇄 될 때 인쇄 된 페이지의 화살표를 제거하는 인쇄용 특수 CSS가있어서 페이지가 의미가없는 화살표가없는 제목 "3 월"처럼 보입니다.
FrancescoMM

2
/* Try this in FF30+ Covers up the arrow, turns off the background */ 
/* still lets you style the border around the image and allows selection on the arrow */


@-moz-document url-prefix() {

    .yourClass select {
        text-overflow: '';
        text-indent: -1px;
        -moz-appearance: none;
        background: none;

    }

    /*fix for popup in FF30 */
    .yourClass:after {
        position: absolute;
        margin-left: -27px;
        height: 22px;
        border-top-right-radius: 6px;
        border-bottom-right-radius: 6px;
        content: url('../images/yourArrow.svg');
        pointer-events: none;
        overflow: hidden;
        border-right: 1px solid #yourBorderColour;
        border-top: 1px solid #yourBorderColour;
        border-bottom: 1px solid #yourBorderColour; 
    }
}

의사 요소 사용을 제안하는 +20
Zach Saucier

2

나는 이것을 좋아하는 선택을 스타일링하고있다.

<select style="     -moz-appearance: radio-container;
                -webkit-appearance: none;
                 appearance: none;
">

테스트 한 모든 버전의 FF, Safari 및 Chrome에서 작동합니다.

IE에서 나는 다음을 넣었다.

 select::-ms-expand {
 display: none;
}
/*to remove in all selects*/

또한 다음을 수행 할 수 있습니다. .yourclass ::-ms-expand {display : none; } .yourid ::-ms-exapan {디스플레이 : 없음; }


1

나는이 질문이 조금 오래되었다는 것을 알고 있지만, 그것은 구글에서 나타나기 때문에 "새로운"해결책이다.

appearance: normalFirefox에서 제대로 작동하는 것 같습니다 (버전 5). 오페라와 IE8 / 9에는 없습니다

Opera와 IE9의 해결 방법으로 :beforepseudoselector를 사용하여 새 흰색 상자를 만들고 화살표 위에 놓습니다.

불행히도 IE8에서는 작동 하지 않습니다 . 상자가 올바르게 렌더링되지만 어쨌든 화살표가 튀어 나옵니다 ... :-/

사용 select:before은 Opera에서는 잘 작동하지만 IE에서는 잘 작동하지 않습니다. 개발자 도구를 살펴보면 규칙을 올바르게 읽은 다음 규칙을 무시하는 것만 볼 수 있습니다. 그래서 나는 <span class="selectwrap">실제 주변을 사용합니다 <select>.

select {
  -webkit-appearance: normal;
  -moz-appearance: normal;
  appearance: normal;
}
.selectwrap { position: relative; }
.selectwrap:before {
  content: "";
  height: 0;
  width: 0;
  border: .9em solid red;
  background-color: red;
  position: absolute;
  right: -.1em;
  z-index: 42;
}

이 부분을 약간 조정해야 할 수도 있지만 이것은 저에게 효과적입니다!

면책 조항 : 양식을 사용하여 웹 페이지를 잘 보이게하기 위해 이것을 사용하고 있으므로 두 번째 페이지를 만들 필요가 없습니다. 나는 빨간 스크롤 막대, <marquee>태그 및 기타 를 원하지 않는 1337 haxx0r 가 아닙니다 :-) 이유 가 충분 하지 않으면 양식에 과도한 스타일을 적용 하지 마십시오 .


3
-moz-appearance: normalFx 9에서 유효한 옵션이 아닌 것 같으며 -moz-appearance: none(유효한) 아래쪽 화살표를 제거하지 않습니다.
Robin Winslow

중복 범위 솔루션은 IE 및 FF에서 작동하지만 Chrome에서는 작동하지 않습니다.
vulcan raven은

의사 요소 앞과 뒤에 : 내부 내용을 허용하는 요소에서만 작동합니다. 선택, 입력, 파일 업 로더 등의 경우에는 해당되지 않습니다. div, 링크, 단락 등에 유용합니다. 그 이유는 ELEMENT 자체 앞 / 뒤가 아니라 IT 앞에 컨텐츠를 추가하기 때문입니다. 함유량. 그리고 select 요소는와 같은 것을 지원하지 않습니다 <select> hi.
João Cunha

1

pointer-events속성을 사용하십시오 .

여기서의 아이디어는 기본 드롭 다운 화살표 위에 요소를 오버레이하고 (사용자 정의 요소를 만들기 위해) 포인터 이벤트를 허용하지 않는 것입니다. [ 이 게시물 참조 ]

이 방법을 사용 하는 FIDDLE 이 작동 합니다.

또한 이 SO 답변 에서이 방법과 다른 방법에 대해 자세히 설명했습니다.


1

작동합니다 (Firefox 23.0.1에서 테스트).

select {
    -moz-appearance: radio-container;
}

나를 위해 일했지만 radio-container선택 객체의 가치가 마음에 들지 않았습니다 . 적절한 값을 얻으려면 -moz-appearance mozilla 참조 를 찾아보십시오 ( menulist-textFF 31에서 선택의 화살표를 숨기는 데 사용했습니다 )
sglessard

1

@ JoãoCunha의 답변을 바탕으로 하나 이상의 브라우저에 유용한 하나의 CSS 스타일

select {
    /*for firefox*/
    -moz-appearance: none;
    /*for chrome*/
    -webkit-appearance:none;
    text-indent: 0.01px;
    text-overflow: '';
}
/*for IE10*/
select::-ms-expand {
    display: none;
}

1

에 또한 조아 쿠냐의 대답 이 문제는 지금 모질라의 할일 목록에 및 버전 35을 대상으로한다.

원하는 사람들을 위해 Cunha의 블로그를 참조하여 Todd Parker가 오늘 작동하는 해결 방법이 있습니다.

http://jsfiddle.net/xvushd7x/

HTML :

<label class="wrapper">This label wraps the select
    <div class="button custom-select ff-hack">
        <select>
            <option>Apples</option>
            <option>Bananas</option>
            <option>Grapes</option>
            <option>Oranges</option>
            <option>A very long option name to test wrapping</option>
        </select>
    </div>
</label>

CSS :

/* Label styles: style as needed */
label {
  display:block;
  margin-top:2em;
  font-size: 0.9em;
  color:#777;
}

/* Container used for styling the custom select, the buttom class below adds the bg gradient, corners, etc. */
.custom-select {
  position: relative;
  display:block;
  margin-top:0.5em;
  padding:0;
}

/* These are the "theme" styles for our button applied via separate button class, style as you like */
.button {
  border: 1px solid #bbb;
  border-radius: .3em;
  box-shadow: 0 1px 0 1px rgba(0,0,0,.04);
  background: #f3f3f3; /* Old browsers */
  background: -moz-linear-gradient(top, #ffffff 0%, #e5e5e5 100%); /* FF3.6+ */
  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ffffff), color-stop(100%,#e5e5e5)); /* Chrome,Safari4+ */
  background: -webkit-linear-gradient(top, #ffffff 0%,#e5e5e5 100%); /* Chrome10+,Safari5.1+ */
  background: -o-linear-gradient(top, #ffffff 0%,#e5e5e5 100%); /* Opera 11.10+ */
  background: -ms-linear-gradient(top, #ffffff 0%,#e5e5e5 100%); /* IE10+ */
  background: linear-gradient(to bottom, #ffffff 0%,#e5e5e5 100%); /* W3C */
}

/* This is the native select, we're making everything but the text invisible so we can see the button styles in the wrapper */
.custom-select select {
  width:100%;
  margin:0;
  background:none;
  border: 1px solid transparent;
  outline: none;
  /* Prefixed box-sizing rules necessary for older browsers */
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  /* Remove select styling */
  appearance: none;
  -webkit-appearance: none;
  /* Font size must the 16px or larger to prevent iOS page zoom on focus */
  font-size:16px;
  /* General select styles: change as needed */
  font-family: helvetica, sans-serif;
  font-weight: bold;
  color: #444;
  padding: .6em 1.9em .5em .8em;
  line-height:1.3;
}


/* Custom arrow sits on top of the select - could be an image, SVG, icon font, etc. or the arrow could just baked into the bg image on the select. Note this si a 2x image so it will look bad in browsers that don't support background-size. In production, you'd handle this resolution switch via media query but this is a demo. */

.custom-select::after {
  content: "";
  position: absolute;
  width: 9px;
  height: 8px;
  top: 50%;
  right: 1em;
  margin-top:-4px;
  background-image: url(http://filamentgroup.com/files/select-arrow.png);
  background-repeat: no-repeat;
  background-size: 100%;
  z-index: 2;
  /* These hacks make the select behind the arrow clickable in some browsers */
  pointer-events:none;
}


/* Hover style */
.custom-select:hover {
  border:1px solid #888;
}

/* Focus style */
.custom-select select:focus {
  outline:none;
  box-shadow: 0 0 1px 3px rgba(180,222,250, 1);
  background-color:transparent;
  color: #222;
  border:1px solid #aaa;
}

/* Set options to normal weight */
.custom-select option {
  font-weight:normal;
}

1

-moz-appearance:none이미 코드에 작성한 Firefox 35, " " 이후 로 원하는대로 화살표 버튼을 제거하십시오.

해당 버전 이후로 해결 된 버그 였습니다 .


1

많은 토론이 여기저기서 발생하지만이 문제에 대한 적절한 해결책을 찾지 못했습니다. 마지막으로 IE 및 Firefox 에서이 해킹을 수행하기 위해 작은 Jquery + CSS 코드를 작성하여 끝났습니다.

Jquery를 사용하여 요소 너비 (SELECT 요소)를 계산하십시오. 요소 선택 주위에 랩퍼를 추가하고이 요소에 대해 오버 플로우를 숨기십시오. 이 랩퍼의 너비가 appox인지 확인하십시오. SELECT 요소보다 25px 적습니다. 이것은 Jquery로 쉽게 수행 할 수 있습니다. 이제 아이콘이 사라졌습니다 ..! SELECT 요소에 이미지 아이콘을 추가 할 차례입니다 ... !!! 배경을 추가하기 위해 몇 줄의 간단한 줄을 추가하면 모두 완료됩니다 .. !! 외부 래퍼에 숨겨진 오버플로를 사용해야합니다.

다음은 Drupal을 위해 작성된 샘플 코드입니다. 그러나 Drupal Specific 인 몇 줄의 코드를 제거하여 다른 사람도 사용할 수 있습니다.

/*
 * Jquery Code for Removing Dropdown Arrow.
 * @by: North Web Studio
 */
(function($) {
  Drupal.behaviors.nwsJS = {
    attach: function(context, settings) {
      $('.form-select').once('nws-arrow', function() {
        $wrap_width = $(this).outerWidth();
        $element_width = $wrap_width + 20;
        $(this).css('width', $element_width);
        $(this).wrap('<div class="nws-select"></div>');
        $(this).parent('.nws-select').css('width', $wrap_width);
      });
    }
  };
})(jQuery);
/*
 * CSS Code for Removing Dropdown Arrow.
 * @by: North Web Studio
 */

.nws-select {
  border: 1px solid #ccc;
  overflow: hidden;
  background: url('../images/icon.png') no-repeat 95% 50%;
}
.nws-select .form-select {
  border: none;
  background: transparent;
}

솔루션은 모든 브라우저 IE, Chrome 및 Firefox에서 작동합니다. CSS를 사용하여 고정 너비 핵을 추가 할 필요가 없습니다. JQuery를 사용하여 모두 동적으로 처리됩니다!

자세한 내용은 다음을 참조하십시오 : -http : //northwebstudio.com/blogs/1/jquery/remove-drop-down-arrow-html-select-element-using-jquery-and-css


1

이 CSS를보십시오

select {
    /*for firefox*/
    -moz-appearance: none;
    /*for chrome*/
    -webkit-appearance:none;
}

작동


0

appearanceCSS3 의 속성은 none값을 허용하지 않습니다 . 한 번 봐 가지고 는 W3C 참조 . 따라서 당신이하려는 것은 유효하지 않습니다 (실제로 크롬도 받아들이지 않아야합니다).

불행히도 우리는 순수한 CSS를 사용하여 화살표를 숨길 수있는 크로스 브라우저 솔루션이 없습니다. 지적했듯이 JavaScript가 필요합니다.

selectBox jQuery 플러그인 사용을 고려하는 것이 좋습니다 . 매우 가볍고 훌륭합니다.


1
하지만, none파이어 폭스 청구 지원하는 값은 : developer.mozilla.org/en/CSS/-moz-appearance는 폼 요소 스타일링 있지만, 과거에는, 자바 스크립트 통해서만 accomplishable왔다의 전체 지점 appearance속성 멀리 이동시키는 그것을 통해서. 브라우저 공급 업체는 개발자를 위해 UX를 결정해서는 안됩니다. 불행히도, 이것은 여전히 ​​효과적으로 사용하기에는 아직 너무 새롭습니다.
RussellUresti

1
따라서 @RussellUresti는 공급 업체 접두사에 대한 설명이 -moz받아 들여도 none(작동하더라도)이를 사용하는 것이 올바르지 않습니다. Firefox와 같은 브라우저에 대해서는 더 많은 표준을 준수하여 항상 자랑합니다.
Erick Petrucelli



0

또는 선택 물을자를 수 있습니다. 다음과 같은 내용이 있습니다.

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

그러면 선택 상자 오른쪽의 30px가 잘리고 화살표가 사라집니다. 이제 170px 배경 이미지와 스타일 선택을 제공하십시오


0

큰 해킹이지만 -moz-appearance: menulist-text트릭을 수행 할 수 있습니다.


이것은 나를 위해 선택 화살표를 제거하는 것 않았지만, @dendini가 언급 한 바와 같이, 또한 요소의 다른 모든 스타일을 제거
codestr

0

나는 같은 문제를 겪고 있었다. FF 및 Chrome에서 작동하기는 쉽지만 IE (8 + 이상 지원해야 함)에서는 복잡합니다. IE8을 포함하여 "내가 시도한 모든 곳에서 작동하는 사용자 지정 선택 요소에 대해 찾을 수있는 가장 쉬운 솔루션은 .customSelect ()를 사용하는 것입니다.


0

나에게 유용한 해킹은 (선택) 디스플레이를로 설정하는 것 inline-flex입니다. 선택 버튼에서 바로 화살표를 잘라냅니다. 추가 된 코드가 모두 없습니다.

  • Fx 전용. -webkit appearanceChrome 등에 여전히 필요합니다 ...

2
효과가없는 것 같습니다
Chris Nicola

0

Jordan Young의 답변이 최고입니다. 그러나 HTML을 변경할 수 없거나 변경하고 싶지 않은 경우 Chrome, Safari 등에 제공되는 사용자 정의 아래쪽 화살표를 제거하고 firefox의 기본 화살표를 두는 것만으로도 이중 화살표가 나타나지 않을 수 있습니다. 이상적이지는 않지만 HTML을 추가하지 않고 다른 브라우저에서 사용자 정의 모양을 손상시키지 않는 빠른 수정 프로그램입니다.

<select>
  <option value='1'> First option </option>
  <option value='2'> Second option </option>
</select>

CSS :

select {
   background-image: url('images/select_arrow.gif');
   background-repeat: no-repeat;
   background-position: right center;
   padding-right: 20px;
}

@-moz-document url-prefix() {
  select {
    background-image: none;
  }
}

0

hackity hack ... 테스트 한 모든 브라우저 (Safari, Firefox, Chrome)에서 작동하는 솔루션입니다. 주변에 IE가 없으므로 테스트하고 주석을 달 수 있다면 좋을 것입니다.

<div class="wrapper">
  <select>
    <option>123456789</option>
    <option>234567890</option>
  </select>
</div>

URL 인코딩 이미지가있는 CSS :

.wrapper { position:relative; width:200px; }
.wrapper:after {
  content:"";
  display: block;
  position: absolute;
  top:1px; height:28px;
  right:1px; width:16px;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAcCAYAAACH81QkAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowODgwMTE3NDA3MjA2ODExOEE2RENENTU2MTFGMEQ1RCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpGNDE5NDQ3Nzc5ODIxMUU0OEU0M0JFMzgzMkUxOTk3MiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpGNDE5NDQ3Njc5ODIxMUU0OEU0M0JFMzgzMkUxOTk3MiIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDk4MDExNzQwNzIwNjgxMThBNkRDRDU1NjExRjBENUQiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MDg4MDExNzQwNzIwNjgxMThBNkRDRDU1NjExRjBENUQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4o7anbAAAAjklEQVR42uzUsQ3EIAwFUPty7MBOsAoVC7EVYgyUSFcdzn0iJYquAZGSLxnLzatsWERWGsvGP0QGkc+LxvN9AqGJTKQJMcYQM/+VtbZdiTGKUgr3cxbmlJI0ZiW83vsbgrkjB5JzFq11BdAxdyNICKEi6J25kFKKOOdq70We+JS2ufYTacjyxrKMLtsuwAAznzqGLHX9BwAAAABJRU5ErkJggg==);

  pointer-events: none;
}

select {
  width: 100%;
  padding:3px;
  margin: 0;
  border-radius: 0;
  border:1px solid black;
  outline:none;
  display: inline-block;
  -webkit-appearance:none;
  -moz-appearance:none;
  appearance:none;
  cursor:pointer;
  float:none!important;
  background:white;

  font-size:13px;
  line-height: 1em;
  height: 30px;
  padding:6px 20px 6px 10px;
}

http://codepen.io/anon/pen/myPEBy

추한 화살표를 덮기 위해 : after-element를 사용하고 있습니다. select가 : after를 지원하지 않기 때문에 작업 할 래퍼가 필요합니다. 이제 화살표를 클릭하면 드롭 다운이 등록되지 않습니다 ... 브라우저를 지원하지 않으면 pointer-events: noneIE10-을 제외한 모든 사람이 지원합니다 : http://caniuse.com/#feat=pointer-events

그래서 나를 위해 그것은 완벽합니다-적어도 javascript를 포함하는 다른 모든 옵션과 비교할 때 멋지고 깨끗하고 두통이 적은 솔루션입니다.

tl; dr :

IE10 (또는 그 이하) 사용자가 화살표를 클릭하면 작동하지 않습니다. 나를 위해 충분히 잘 작동합니다 ...


0

JS를 다루는 것이 마음에 들지 않는다면 작은 jQuery 플러그인을 작성했습니다. 그것으로 당신은 공급 업체 접두사에 대해 걱정할 필요가 없습니다.

 $.fn.magicSelectBox = function() {
  var $e = this;

  $e.each(function() {
    var $select = $(this);

    var $magicbox = $('<div></div>').attr('class', $select.attr('class')).attr('style', $select.attr('style')).addClass('magicbox');
    var $innermagicbox = $('<div></div>').css({
      position: 'relative',
      height: '100%'
    });
    var $text = $('<span></span>').css({
      position: 'absolute'
    }).text($select.find("option:selected").text());

    $select.attr('class', null).css({
      width: '100%',
      height: '100%',
      opacity: 0,
      position: 'absolute'
    }).on('change', function() {
      $text.text($select.find("option:selected").text());
    });

    $select.parent().append($magicbox);
    $innermagicbox.append($text, $select);
    $magicbox.append($innermagicbox);
  });

  return $e;
};

바이올린 여기 : JS 바이올린

조건은 선택에서 처음부터 스타일을 지정해야하며 (배경과 테두리 설정을 의미 함) 어쨌든이 작업을 수행하려고합니다.

또한이 기능은 원래 선택을 div로 대체하므로 CSS의 선택 선택기에서 직접 수행 된 스타일은 손실됩니다. 따라서 select 요소에 클래스를 제공하고 클래스를 스타일 지정하십시오.

대부분의 최신 브라우저를 지원합니다. 이전 브라우저를 대상으로하려면 이전 버전의 jQuery를 사용해 볼 수 있지만 함수에서 on ()을 bind ()로 바꿔야 할 수도 있습니다 (테스트되지 않음)


-2

다른 답변은 저에게 효과가없는 것 같지만이 해킹을 찾았습니다. 이것은 나를 위해 일했다 (2014 년 7 월)

select {
-moz-appearance: textfield !important;
    }

제 경우에는 woocommerce 입력 필드도 있었으므로 이것을 사용했습니다.

.woocommerce .quantity input.qty {
-moz-appearance: textfield !important;
 }

입력 대신 선택을 표시하도록 답변을 업데이트했습니다.


input.input-text? 선택 옵션과 어떤 관련이 있으며 질문은 무엇입니까?
dendini
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.