तीर शैली परिवर्तन का चयन करें


125

मैं अपनी खुद की तस्वीर के साथ एक चयन के तीर को बदलने की कोशिश कर रहा हूं। मैं एक ही आकार के साथ एक div में चयन को शामिल कर रहा हूं, मैंने चयन की पृष्ठभूमि पारदर्शी के रूप में सेट की है और मैं पृष्ठभूमि के रूप में div के दाहिने शीर्ष कोने में एक तस्वीर (तीर के समान आकार) के साथ शामिल हूं।

यह केवल क्रोम में काम करता है।

यहां छवि विवरण दर्ज करें

मैं इसे फ़ायरफ़ॉक्स और 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;
}

परीक्षण नहीं किया गया है, लेकिन काम करना चाहिए।

संपादित करें : ऐसा लगता है कि फ़ायरफ़ॉक्स संस्करण 35 तक इस सुविधा का समर्थन नहीं करता (और पढ़ें यहां )

यहाँ एक वर्कअराउंड है , jsfiddleउस पोस्ट पर एक नज़र डालें ।


1
Internet Explorer के बारे में क्या?
फ्रांसिस्को कॉर्लेस मोरेल्स

IE के लिए @Peter Drinnan के समाधान पर एक नज़र डालें
Morpheus

मुझे एक डुप्लिकेट प्रश्न से यह उत्तर मिला, जो दिखाता है कि वास्तव में "सीएसएस" कैसे जोड़ें, साथ ही शुद्ध CSS (कोई pngs, jpegs, आदि) का उपयोग करके stackoverflow.com/a/28274325/2098017
एंथनी एफ

'वर्कअराउंड' सवाल से jsfiddle अब काम नहीं करता है।
ड्रैगोस राइजस्कू

शो बल्ब के लिए, इसका उपयोग करें:appearance: menulist !important;-moz-appearance: menulist !important;-webkit-appearance: menulist !important;-o-appearance: menulist !important;
माघ १

60

मैंने selectजूलियो के जवाब के समान एक कस्टम तीर के साथ स्थापित किया है , हालांकि इसमें एक सेट चौड़ाई नहीं है और svgएक पृष्ठभूमि छवि के रूप में उपयोग करता है । ( arrow_drop_downसामग्री-यूआई आइकन से)

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 एरो को बेस 64 में अपडेट करें और निम्नलिखित जोड़ें:

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

Zipped: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%;) के बजाय का उपयोग क्यों करते हैं ?
सैम

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
आपका उत्तर सबसे सीधा लगता है और केवल सीएसएस का उपयोग करता है।
ऑस्टिन लोवेल

1
आपके लायक यह क्षेत्र की चौड़ाई निर्धारित करने की आवश्यकता नहीं है और पृष्ठभूमि की स्थिति के लिए भी% का उपयोग कर सकते हैं :)
sonaonabike

2
फ़ायरफ़ॉक्स पृष्ठभूमि-
स्थिति-

2
शर्म आती है इस जवाब को इतना मोड़ने की जरूरत है: - / लेकिन यह एक अच्छी शुरुआत है।
15:14 बजे

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 और पिछले पर चुनिंदा बक्से को स्टाइल नहीं कर सकते हैं, और इसके बजाय फालबैक स्ट्रैटेजी पेश करते हैं, लेकिन यह समाधान अन्यथा साबित होता है।
जॉन

धन्यवाद यह बहुत उपयोगी है।
गंभीर अत्याचार

3
यह ध्यान देने योग्य है: इस समाधान के लिए जावास्क्रिप्ट की आवश्यकता होती है , जिसके लिए इस उत्तर को टैग नहीं किया गया है
random_user_name

20

यह विशेष रूप से बूटस्ट्रैप का उपयोग करने वालों के लिए अच्छा काम करेगा, जिसे नवीनतम ब्राउज़र संस्करणों में परीक्षण किया गया है:

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>

और रिश्तेदार सीएसएस है

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*/
    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.