Inilah tiga solusi:
Solusi # 1 - penampilan: tidak ada - dengan solusi Internet Explorer 10 - 11 ( Demo )
-
Untuk menyembunyikan panah default yang diatur appearance: none
pada elemen pilih, lalu tambahkan panah kustom Anda sendiri denganbackground-image
select {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none; /* Remove default arrow */
background-image: url(...); /* Add custom arrow */
}
Dukungan Browser:
appearance: none
memiliki dukungan browser yang sangat bagus ( caniuse ) - kecuali untuk Internet Explorer 11 (dan yang lebih baru) dan Firefox 34 (dan yang lebih baru).
Kami dapat meningkatkan teknik ini dan menambahkan dukungan untuk Internet Explorer 10 dan Internet Explorer 11 dengan menambahkan
select::-ms-expand {
display: none; /* Hide the default arrow in Internet Explorer 10 and Internet Explorer 11 */
}
Jika Internet Explorer 9 menjadi perhatian, kami tidak memiliki cara untuk menghapus panah default (yang berarti bahwa kami sekarang memiliki dua panah), tetapi, kami dapat menggunakan pemilih Internet Explorer 9 yang funky.
Untuk setidaknya membatalkan panah kustom kami - membiarkan panah pilih default tetap utuh.
/* Target Internet Explorer 9 to undo the custom arrow */
@media screen and (min-width:0\0) {
select {
background-image:none\9;
padding: 5px\9;
}
}
Bersama:
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>
Solusi ini mudah dan memiliki dukungan browser yang bagus - biasanya sudah cukup.
Jika dukungan browser untuk Internet Explorer 9 (dan yang lebih baru) dan Firefox 34 (dan yang lebih baru) diperlukan maka teruslah membaca ...
Solusi # 2 Pangkas elemen pilih untuk menyembunyikan panah default ( demo )
-
(Baca lebih lanjut di sini)
Bungkus select
elemen dalam div dengan lebar tetap danoverflow:hidden
.
Kemudian beri select
elemen lebar sekitar 20 piksel lebih besar dari div .
Hasilnya adalah panah drop-down default select
elemen akan disembunyikan (karenaoverflow:hidden
pada wadah), dan Anda dapat menempatkan gambar latar belakang yang Anda inginkan di sisi kanan div.
The Keuntungan dari pendekatan ini adalah bahwa itu adalah cross-browser (Internet Explorer 8 dan kemudian, WebKit , dan Gecko ). Namun, kelemahan dari pendekatan ini adalah bahwa pilihan drop-down menonjol di sisi kanan (oleh 20 piksel yang kami sembunyikan ... karena elemen opsi mengambil lebar elemen pilih).
[Namun, perlu dicatat bahwa jika elemen pilih khusus hanya diperlukan untuk perangkat seluler - maka masalah di atas tidak berlaku - karena cara masing-masing ponsel membuka elemen pilih secara native. Jadi untuk seluler, ini mungkin solusi terbaik.]
.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>
Jika panah khusus diperlukan di Firefox - sebelum Versi 35 - tetapi Anda tidak perlu mendukung versi Internet Explorer yang lama - maka teruslah membaca ...
Solusi # 3 - Gunakan pointer-events
properti ( demo )
-
(Baca lebih lanjut di sini)
Idenya di sini adalah untuk overlay elemen di atas panah drop down asli (untuk membuat custom kami) dan kemudian melarang event pointer di atasnya.
Keuntungan: Ini berfungsi baik di WebKit dan Gecko. Ini terlihat bagus juga (tidak ada option
elemen menonjol ).
Kerugian: Internet Explorer (Internet Explorer 10 ke bawah) tidak mendukungpointer-events
, yang berarti Anda tidak dapat mengklik panah khusus. Juga, kerugian (jelas) lain dengan metode ini adalah bahwa Anda tidak dapat menargetkan gambar panah baru Anda dengan efek hover atau kursor tangan, karena kami baru saja menonaktifkan peristiwa pointer pada mereka!
Namun, dengan metode ini Anda dapat menggunakan Modernizer atau komentar bersyarat untuk membuat Internet Explorer kembali ke panah bawaan bawaan.
NB: Karena Internet Explorer 10 tidak mendukung conditional comments
lagi: Jika Anda ingin menggunakan pendekatan ini, Anda mungkin harus menggunakan Modernizr . Namun, masih dimungkinkan untuk mengecualikan pointer-event CSS dari Internet Explorer 10 dengan retasan CSS yang dijelaskan di sini .
.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]-->