यहाँ तीन समाधान दिए गए हैं:
समाधान # 1 - उपस्थिति: कोई नहीं - इंटरनेट एक्सप्लोरर 10 के साथ - 11 वर्कअराउंड ( डेमो )
-
appearance: none
चयनित तत्व पर सेट किए गए डिफ़ॉल्ट तीर को छिपाने के लिए , फिर अपने स्वयं के कस्टम तीर को साथ जोड़ेंbackground-image
select {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none; /* Remove default arrow */
background-image: url(...); /* Add custom arrow */
}
ब्राउज़र समर्थन:
appearance: none
इंटरनेट एक्सप्लोरर 11 (और बाद में) और फ़ायरफ़ॉक्स 34 (और बाद में) को छोड़कर - बहुत अच्छा ब्राउज़र समर्थन ( कैनीयूज़ ) है।
हम इस तकनीक में सुधार कर सकते हैं और जोड़कर इंटरनेट एक्सप्लोरर 10 और इंटरनेट एक्सप्लोरर 11 के लिए समर्थन जोड़ सकते हैं
select::-ms-expand {
display: none; /* Hide the default arrow in Internet Explorer 10 and Internet Explorer 11 */
}
यदि Internet Explorer 9 एक चिंता का विषय है, तो हमारे पास डिफ़ॉल्ट तीर को हटाने का कोई तरीका नहीं है (जिसका अर्थ है कि अब हमारे पास दो तीर होंगे), लेकिन, हम एक फ़ंकी इंटरनेट एक्सप्लोरर 9 चयनकर्ता का उपयोग कर सकते हैं।
हमारे कस्टम तीर को कम से कम करने के लिए - डिफ़ॉल्ट चयन तीर को बरकरार रखना।
/* Target Internet Explorer 9 to undo the custom arrow */
@media screen and (min-width:0\0) {
select {
background-image:none\9;
padding: 5px\9;
}
}
सभी एक साथ:
select {
margin: 50px;
width: 150px;
padding: 5px 35px 5px 5px;
font-size: 16px;
border: 1px solid #CCC;
height: 34px;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
background: url(http://www.stackoverflow.com/favicon.ico) 96% / 15% no-repeat #EEE;
}
/* CAUTION: Internet Explorer hackery ahead */
select::-ms-expand {
display: none; /* Remove default arrow in Internet Explorer 10 and 11 */
}
/* Target Internet Explorer 9 to undo the custom arrow */
@media screen and (min-width:0\0) {
select {
background: none\9;
padding: 5px\9;
}
}
<select>
<option>Apples</option>
<option selected>Pineapples</option>
<option>Chocklate</option>
<option>Pancakes</option>
</select>
यह समाधान आसान है और इसमें अच्छा ब्राउज़र समर्थन है - यह आमतौर पर पर्याप्त होना चाहिए।
यदि इंटरनेट एक्सप्लोरर 9 (और बाद में) और फ़ायरफ़ॉक्स 34 (और बाद में) के लिए ब्राउज़र समर्थन आवश्यक है, तो पढ़ते रहें ...
समाधान # 2 डिफ़ॉल्ट तीर ( डेमो ) को छिपाने के लिए चुनिंदा तत्व को अलग करें
-
(यहां और पढ़ें)
select
एक निश्चित चौड़ाई के साथ एक div में तत्व लपेटें और overflow:hidden
।
फिर select
तत्व को div से अधिक लगभग 20 पिक्सेल की चौड़ाई दें ।
इसका परिणाम यह है कि select
तत्व का डिफ़ॉल्ट ड्रॉप-डाउन तीर छिपा होगा ( overflow:hidden
कंटेनर पर होने के कारण ), और आप किसी भी पृष्ठभूमि छवि को डिव के दाईं ओर रख सकते हैं।
लाभ इस दृष्टिकोण का है कि यह क्रॉस-ब्राउज़र (इंटरनेट एक्सप्लोरर 8 और बाद में, है वेबकिट , और छिपकली )। हालांकि, इस दृष्टिकोण का नुकसान यह है कि विकल्प ड्रॉप-डाउन जूट को राइट-हैंड-साइड (20 पिक्सेल जो हमने छुपाया था ...) के कारण बाहर निकलता है क्योंकि विकल्प तत्व चुनिंदा तत्व की चौड़ाई लेते हैं।
[हालांकि, यह ध्यान दिया जाना चाहिए, कि यदि कस्टम चयन तत्व केवल मोबाइल उपकरणों के लिए आवश्यक है - तो उपरोक्त समस्या लागू नहीं होती है - जिस तरह से प्रत्येक फोन मूल रूप से चयनित तत्व को खोलता है। तो मोबाइल के लिए, यह सबसे अच्छा समाधान हो सकता है।]
.styled select {
background: transparent;
width: 150px;
font-size: 16px;
border: 1px solid #CCC;
height: 34px;
}
.styled {
margin: 50px;
width: 120px;
height: 34px;
border: 1px solid #111;
border-radius: 3px;
overflow: hidden;
background: url(http://www.stackoverflow.com/favicon.ico) 96% / 20% no-repeat #EEE;
}
<div class="styled">
<select>
<option>Pineapples</option>
<option selected>Apples</option>
<option>Chocklate</option>
<option>Pancakes</option>
</select>
</div>
यदि फ़ायरफ़ॉक्स पर कस्टम तीर आवश्यक है - संस्करण 35 से पहले - लेकिन आपको इंटरनेट एक्सप्लोरर के पुराने संस्करणों का समर्थन करने की आवश्यकता नहीं है - तो पढ़ते रहें ...
समाधान # 3 - pointer-events
संपत्ति का उपयोग करें ( डेमो )
-
(यहां और पढ़ें)
यहाँ विचार देशी ड्रॉप डाउन एरो (हमारे कस्टम को बनाने के लिए) पर एक तत्व को ओवरले करना है और फिर उस पर पॉइंटर घटनाओं को हटाना है।
फायदा: यह वेबकीट और गेको में अच्छा काम करता है। यह अच्छा भी लग रहा है (कोई जूटिंग option
तत्व नहीं)।
नुकसान: इंटरनेट एक्सप्लोरर (इंटरनेट एक्सप्लोरर 10 और नीचे) का समर्थन नहीं करता है pointer-events
, जिसका अर्थ है कि आप कस्टम तीर पर क्लिक नहीं कर सकते। इसके अलावा, इस विधि के साथ एक और (स्पष्ट) नुकसान यह है कि आप अपनी नई तीर छवि को एक हॉवर प्रभाव या हैंड कर्सर के साथ लक्षित नहीं कर सकते हैं, क्योंकि हमारे पास उन पर केवल पॉइंटर इवेंट अक्षम हैं!
हालाँकि, इस विधि से आप Internet Explorer को तीर में निर्मित मानक पर वापस लाने के लिए मॉर्डनाइज़र या सशर्त टिप्पणियों का उपयोग कर सकते हैं।
नायब: इंटरनेट एक्सप्लोरर 10 का conditional comments
अब कोई समर्थन नहीं करता है : यदि आप इस दृष्टिकोण का उपयोग करना चाहते हैं, तो आपको शायद माडर्निज़र का उपयोग करना चाहिए । हालांकि, इंटरनेट एक्सप्लोरर 10 से पॉइंटर-इवेंट सीएसएस को बाहर करना अभी भी संभव है, यहां वर्णित सीएसएस हैक के साथ ।
.notIE {
position: relative;
display: inline-block;
}
select {
display: inline-block;
height: 30px;
width: 150px;
outline: none;
color: #74646E;
border: 1px solid #C8BFC4;
border-radius: 4px;
box-shadow: inset 1px 1px 2px #DDD8DC;
background: #FFF;
}
/* Select arrow styling */
.notIE .fancyArrow {
width: 23px;
height: 28px;
position: absolute;
display: inline-block;
top: 1px;
right: 3px;
background: url(http://www.stackoverflow.com/favicon.ico) right / 90% no-repeat #FFF;
pointer-events: none;
}
/*target Internet Explorer 9 and Internet Explorer 10:*/
@media screen and (min-width: 0\0) {
.notIE .fancyArrow {
display: none;
}
}
<!--[if !IE]> -->
<div class="notIE">
<!-- <![endif]-->
<span class="fancyArrow"></span>
<select>
<option>Apples</option>
<option selected>Pineapples</option>
<option>Chocklate</option>
<option>Pancakes</option>
</select>
<!--[if !IE]> -->
</div>
<!-- <![endif]-->