Próbuję stylizować select
element za pomocą CSS3. Otrzymuję pożądane wyniki w WebKit (Chrome / Safari), ale Firefox nie działa dobrze (nawet nie zawracam sobie głowy IE). Używam appearance
właściwości CSS3 , ale z jakiegoś powodu nie mogę usunąć ikony rozwijanej z przeglądarki Firefox.
Oto przykład tego, co robię: 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;
}
Jak widać, nie staram się o nic wymyślnego. Chcę tylko usunąć domyślne style i dodać własną strzałkę w dół. Jak powiedziałem, świetnie w WebKit, nie świetny w Firefoksie. Najwyraźniej -moz-appearance: none
nie usuwa elementu rozwijanego.
Jakieś pomysły? Nie, JavaScript nie wchodzi w grę
-moz-appearance
właściwość CSS3, której używam-moz-appearance: none;
i wygląda na to, że działa w wersji 35.0.1.@-moz-document url-prefix() { select { width: 105%; overflow: hidden; } }
Odpowiedzi:
Okej, wiem, że to pytanie jest stare, ale 2 lata później i mozilla nic nie zrobiła.
Wymyśliłem proste obejście.
To zasadniczo usuwa całe formatowanie pola wyboru w przeglądarce Firefox i zawija element span wokół pola wyboru za pomocą własnego stylu, ale powinno mieć zastosowanie tylko do przeglądarki Firefox.
Powiedz, że to jest Twoje menu wyboru:
Załóżmy, że klasa css „css-select” to:
W Firefoksie wyświetlałoby się to z menu wyboru, a następnie brzydką strzałką wyboru Firefoksa, a następnie ładnie wyglądającą, niestandardową strzałką. Nieidealny.
Teraz, aby to działało w przeglądarce Firefox, dodaj element span z klasą `` css-select-moz '':
Następnie napraw CSS, aby ukryć brudną strzałkę Mozilli za pomocą -moz-look: window i wrzuć niestandardową strzałkę do klasy span 'css-select-moz', ale wyświetl ją tylko w Mozilli, na przykład:
Całkiem fajnie, że natknąłem się na ten błąd tylko 3 godziny temu (jestem nowy w projektowaniu stron internetowych i całkowicie samouk). Jednak ta społeczność pośrednio udzieliła mi tak dużej pomocy, że pomyślałem, że nadszedł czas, aby coś w zamian dać.
Testowałem go tylko w przeglądarce Firefox (Mac) w wersji 18, a następnie 22 (po aktualizacji).
Wszelkie opinie są mile widziane.
źródło
Aktualizacja: naprawiono to w przeglądarce Firefox v35. Zobacz pełną treść szczegółów.
Właśnie wymyśliłem, jak usunąć strzałkę wyboru z przeglądarki Firefox . Sztuką jest wykorzystanie mieszankę
-prefix-appearance
,text-indent
itext-overflow
. Jest to czysty CSS i nie wymaga dodatkowych znaczników.Testowane na Windows 8, Ubuntu i Mac, najnowsze wersje przeglądarki Firefox.
Przykład na żywo: http://jsfiddle.net/joaocunha/RUEbp/1/
Więcej na ten temat: https://gist.github.com/joaocunha/6273016
źródło
padding-right:10px;
do<select>
woli „pchnąłem” teraz niewidzialną strzałkę w lewo. Konkluzja: Firefox UKRYWA strzałkę, Chrome USUWA ją. Odpowiednio zaktualizuję moje pisma, dzięki za to.-moz-appearence: window
nie działa z przezroczystymi tłami (narysuj brzydki bg w miejscu, przynajmniej na Firefox Linuksie)Sztuczka, która działa w moim przypadku, polega na wybraniu szerokości większej niż 100% i zastosowaniu przepełnienia: ukryty
W tej chwili jest to jedyny sposób, aby ukryć strzałkę w dół w FF.
BTW. jeśli chcesz mieć piękne listy rozwijane, użyj http://harvesthq.github.com/chosen/
źródło
Ważna aktualizacja:
Od wersji Firefox V35 właściwość wyglądu działa teraz !!
Z oficjalnych informacji o wydaniu Firefoksa na V35 :
Więc teraz, aby ukryć domyślną strzałkę - jest to tak proste, jak dodanie następujących reguł do naszego elementu select:
PRÓBNY
źródło
Znaleźliśmy na to prosty i przyzwoity sposób. Jest cross-browser, degradowalny i nie psuje postu formularza. Najpierw ustaw pole wyboru
opacity
na0
.dzięki temu nadal możesz go kliknąć
Następnie utwórz element div o takich samych wymiarach jak pole wyboru. Element div powinien znajdować się pod polem wyboru jako tło. Użyj
{ position: absolute }
i,z-index
aby to osiągnąć.Zaktualizuj innerHTML elementu div za pomocą javascript. Easypeasy z jQuery:
Otóż to! Po prostu stylizuj swój element div zamiast pola wyboru. Nie testowałem powyższego kodu, więc prawdopodobnie będziesz potrzebować go ulepszyć. Ale miejmy nadzieję, że rozumiesz sedno.
Myślę, że to rozwiązanie bije
{-webkit-appearance: none;}
. Przeglądarki powinny co najwyżej dyktować interakcję z elementami formularza, ale na pewno nie sposób ich początkowego wyświetlania na stronie, ponieważ to psuje projekt witryny.źródło
Spróbuj w ten sposób:
Następnie możesz użyć innego obrazu jako tła i umieścić go:
Jest inny sposób dla przeglądarek Moz:
Jeśli masz zdefiniowaną szerokość do wybrania, ta właściwość spowoduje naciśnięcie przycisku domyślnej skrzynki rozwijanej pod obszarem wyboru.
Mi to pasuje! ;)
źródło
Chociaż nie jest to kompletne rozwiązanie, stwierdziłem, że…
… Działa do pewnego stopnia. Nie możesz zmienić tła (-kolor lub -obraz), ale element może być niewidoczny za pomocą koloru: przezroczysty. Nie jest to idealne rozwiązanie, ale to początek i nie trzeba wymieniać elementu poziomu systemu na element js.
źródło
window
miało taki efekt, niestety musiałem ustawić obraz tła. Szkoda, że nie jest to zbyt dobre w Firefoksie.media="print"
blok css za pomocąselect {-moz-appearance: window;}
i usunie strzałki i tła wszystkich zaznaczeń na FF (w przypadku innych przeglądarek wypróbuj wygląd lub wygląd zestawu webkit), aby wyglądały jak zwykły tekst lub tytułyMyślę, że znalazłem rozwiązanie zgodne z FF31 !!!
Oto dwie opcje, które są dobrze wyjaśnione pod tym linkiem:
http://www.currelis.com/hiding-select-arrow-firefox-30.html
Użyłem opcji 1: Rodrigo-Ludgero opublikował tę poprawkę na Github, w tym online próbny. Testowałem to demo w przeglądarce Firefox 31.0 i wygląda na to, że działa poprawnie. Przetestowano również w Chrome i IE. Oto kod html:
i css:
http://jsbin.com/pozomu/4/edit
To działa bardzo dobrze dla mnie!
źródło
Niestety dla ciebie to jest „coś nadzwyczajnego”. Zwykle nie jest to miejsce dla autorów stron internetowych, aby przeprojektowywać elementy formularzy. Wiele przeglądarek celowo nie pozwala na ich stylizację, aby użytkownik mógł zobaczyć kontrolki systemu operacyjnego, do których jest przyzwyczajony.
Jedynym sposobem, aby to zrobić konsekwentnie w przeglądarkach i systemach operacyjnych, jest użycie JavaScript i zastąpienie
select
elementów elementami „DHTML”.Poniższy artykuł pokazuje trzy wtyczki oparte na jQuery, które pozwalają ci to zrobić (jest trochę stary, ale nie mogłem znaleźć nic aktualnego)
http://www.queness.com/post/204/25-jquery-plugins-that-enhance-and-beautify-html-form-elements#1
źródło
appearance
właściwości jest zapewnienie programistom kontroli nad wyglądem elementów formularza, ponieważ używanie JavaScript do tego jest okropnym rozwiązaniem. Przeglądarki nie powinny podejmować decyzji o tym, jak cokolwiek wygląda na stronie - jest to decyzja dotycząca UX, a nie decyzja producenta przeglądarki. Niestety, nie jest jeszcze dobrze obsługiwany. Może za rok.źródło
Stylizuję wybrany po prostu to lubi
Działa u mnie w FF, Safari i Chrome we wszystkich testowanych wersjach.
W IE umieściłem:
Możesz także: .yourclass :: - ms-expand {display: none; } .yourid :: - ms-exapan {display: none; }
źródło
Wiem, że to pytanie jest trochę stare, ale ponieważ pojawia się w Google, a to jest „nowe” rozwiązanie:
appearance: normal
Wydaje się, że działa dobrze w Firefoksie dla mnie (teraz wersja 5). ale nie w Operze i IE8 / 9Jako obejście dla Opery i IE9 użyłem
:before
problem w pseudoselektora, aby utworzyć nowe białe pole i umieścić je na górze strzałki.Niestety w IE8 tak nie jest działa. Pudełko jest renderowane poprawnie, ale strzałka i tak odstaje ...: - /
Używanie
select:before
działa dobrze w Operze, ale nie w IE. Jeśli spojrzę na narzędzia programistyczne, widzę, że czyta poprawnie zasady, a następnie je po prostu ignoruje (są przekreślone). Więc używam<span class="selectwrap">
około rzeczywistego<select>
.Być może będziesz musiał to trochę poprawić, ale to działa dla mnie!
Zastrzeżenie: Używam tego, aby uzyskać ładnie wyglądającą drukowaną stronę internetową z formularzami, więc nie muszę tworzyć drugiej strony. Nie jestem 1337 haxx0r, który chce czerwonych pasków przewijania,
<marquee>
tagów i tak dalej :-) Proszę nie stosować nadmiernego stylu do formularzy, chyba że masz bardzo dobry powód.źródło
-moz-appearance: normal
nie wydaje się być poprawną opcją w Fx 9 i-moz-appearance: none
(co jest poprawne) nie usuwa strzałki w dół.<select> hi
.Skorzystaj z
pointer-events
nieruchomości.Pomysł polega na tym, aby nałożyć element na natywną strzałkę rozwijaną w dół (aby utworzyć naszą niestandardową), a następnie zablokować zdarzenia wskaźnika. [zobacz ten post ]
Oto działające FIDDLE używające tej metody.
Również w tej odpowiedzi SO omówiłem bardziej szczegółowo tę i inną metodę.
źródło
To działa (testowane w przeglądarce Firefox 23.0.1):
źródło
radio-container
wartości dla wybranego obiektu. Przeglądaj odwołanie do -moz-wyglądy Mozilli, aby uzyskać odpowiednią wartość (użyłem,menulist-text
która ukrywa strzałkę wyboru w FF 31)opierając się na odpowiedzi @ JoãoCunha, jednym stylu CSS, który jest przydatny dla więcej niż jednej przeglądarki
źródło
W nawiązaniu do odpowiedzi Joao Cunhy , ten problem znajduje się teraz na liście zadań do wykonania Mozilli i jest przeznaczony dla wersji 35.
Dla tych, którzy chcą, oto obejście Todda Parkera, do którego odwołuje się blog Cunha, które działa dzisiaj:
http://jsfiddle.net/xvushd7x/
HTML:
CSS:
źródło
Od Firefoksa 35, "
-moz-appearance:none
" który już zapisałeś w swoim kodzie, ostatecznie usuń przycisk strzałki zgodnie z potrzebami.To był błąd rozwiązany od tej wersji.
źródło
Wiele dyskusji dzieje się tu i tam, ale nie widzę odpowiedniego rozwiązania tego problemu. Ostatecznie skończyło się na napisaniu małego kodu Jquery + CSS do zrobienia tego hacka na IE i Firefox.
Oblicz szerokość elementu (wybierz element) za pomocą Jquery. Dodaj opakowanie wokół zaznaczonego elementu i ukryj przepełnienie dla tego elementu. Upewnij się, że szerokość tego opakowania wynosi ok. 25 pikseli mniej niż w przypadku elementu SELECT. Można to łatwo zrobić za pomocą Jquery. Więc teraz nasza ikona zniknęła ...! i pora na dodanie naszej ikony obrazka do elementu SELECT ... !!! Wystarczy dodać kilka prostych wierszy, aby dodać tło i gotowe .. !! Upewnij się, że używasz przelewu ukrytego dla zewnętrznego opakowania,
Oto przykład kodu, który został wykonany dla Drupala. Jednak może być użyty dla innych również poprzez usunięcie kilku linii kodu, który jest specyficzny dla Drupala.
Rozwiązanie działa na wszystkich przeglądarkach IE, Chrome i Firefox Nie ma potrzeby dodawania hacków o stałej szerokości za pomocą CSS. To wszystko jest obsługiwane dynamicznie za pomocą JQuery.!
Więcej opisane na: - http://northwebstudio.com/blogs/1/jquery/remove-drop-down-arrow-html-select-element-using-jquery-and-css
źródło
spróbuj tego css
To działa
źródło
appearance
Nieruchomość z CSS3 nie zezwala nanone
wartości. Spójrz na referencje W3C . Więc to, co próbujesz zrobić, nie jest prawidłowe (w rzeczywistości Chrome też nie powinien akceptować).Niestety, tak naprawdę nie mamy żadnego rozwiązania dla różnych przeglądarek, aby ukryć tę strzałkę za pomocą czystego CSS. Jak wskazano, będziesz potrzebować JavaScript.
Proponuję rozważyć użycie wtyczki selectBox jQuery . Jest bardzo lekki i ładnie wykonany.
źródło
none
JEST wartością, którą Firefox twierdzi, że obsługuje: developer.mozilla.org/en/CSS/-moz-appearance Podczas gdy w przeszłości stylizowanie elementów formularzy było możliwe tylko za pomocą JavaScript, celem tejappearance
właściwości jest odejście z tego. Dostawcy przeglądarek nie powinni podejmować decyzji dotyczących UX dla programistów. Niestety, po prostu wydaje się, że jest to wciąż zbyt nowe, aby skutecznie używać.-moz
akceptujenone
(nawet jeśli to zadziałało), nie byłoby poprawne jego użycie. Jeszcze bardziej w przypadku przeglądarki takiej jak Firefox, która zawsze szczyciła się dokładnym przestrzeganiem standardów.Możesz zwiększyć szerokość pola i przesunąć strzałkę bliżej lewej strzałki. pozwala to następnie zakryć strzałkę pustym białym elementem div.
Spójrz: http://jsbin.com/aniyu4/86/edit
źródło
Czy zaakceptowałbyś drobne zmiany w HTML?
Coś jak umieszczenie znacznika DIV zawierającego znacznik wyboru.
Spójrz.
źródło
Lub możesz przyciąć zaznaczenie. Coś w rodzaju:
Powinno to przyciąć 30px prawej strony pola wyboru, usuwając strzałkę. Teraz dostarcz obraz tła 170px i voila, stylizowany wybór
źródło
To ogromny hack, ale
-moz-appearance: menulist-text
może załatwić sprawę.źródło
Miałem ten sam problem. Łatwo jest sprawić, by działał na FF i Chrome, ale w IE (8+, który musimy obsługiwać) sprawy się komplikują. Najłatwiejszym rozwiązaniem, jakie udało mi się znaleźć dla niestandardowych wybranych elementów, które działają „wszędzie, gdzie próbowałem”, w tym IE8, jest użycie .customSelect ()
źródło
Przydatnym dla mnie hackem jest ustawienie (wybiera) wyświetlania na
inline-flex
. Wycina strzałkę bezpośrednio z mojego przycisku wyboru. Bez całego dodanego kodu.-webkit appearance
nadal potrzebne w przeglądarce Chrome itp ...źródło
Odpowiedź Jordana Younga jest najlepsza. Ale jeśli nie możesz lub nie chcesz zmienić kodu HTML, możesz rozważyć po prostu usunięcie niestandardowej strzałki w dół wyświetlanej w Chrome, Safari itp. I pozostawienie domyślnej strzałki Firefoksa - ale bez podwójnych strzałek. Nie jest to idealne rozwiązanie, ale dobra szybka poprawka, która nie dodaje żadnego kodu HTML i nie wpływa na Twój niestandardowy wygląd w innych przeglądarkach.
CSS:
źródło
hackity hack ... rozwiązanie, które działa w każdej testowanej przeze mnie przeglądarce (Safari, Firefox, Chrome). Nie masz żadnych IE, więc byłoby miło, gdybyś mógł przetestować i skomentować:
CSS, z obrazem zakodowanym w adresie URL:
http://codepen.io/anon/pen/myPEBy
Używam elementu: after, aby zakryć brzydką strzałę. Ponieważ funkcja Select nie obsługuje: po tym potrzebuję opakowania do pracy. Teraz, jeśli klikniesz strzałkę,
pointer-events: none
lista rozwijana nie zarejestruje jej ... chyba że Twoja przeglądarka obsługuje , co robi każdy oprócz IE10: http://caniuse.com/#feat=pointer-eventsWięc dla mnie jest to idealne - ładne, czyste rozwiązanie, które nie powoduje bólu głowy, przynajmniej w porównaniu ze wszystkimi innymi opcjami, które zawierają javascript.
tl; dr:
Jeśli użytkownicy IE10 (lub starsze) klikną strzałkę, to nie zadziała. Działa wystarczająco dobrze dla mnie ...
źródło
Jeśli nie masz nic przeciwko majstrowaniu przy JS, napisałem małą wtyczkę jQuery, która pomoże ci to zrobić. Dzięki niemu nie musisz martwić się o prefiksy dostawców.
Fiddle tutaj: JS Fiddle
Warunkiem jest to, że musisz stylizować zaznaczenie od zera (oznacza to ustawienie tła i obramowania), ale prawdopodobnie i tak chcesz to zrobić.
Ponieważ funkcja zastępuje oryginalne zaznaczenie elementem div, utracisz wszelkie style wykonane bezpośrednio na selektorze wyboru w CSS. Więc nadaj elementowi select klasę i nadaj jej styl.
Obsługuje większość nowoczesnych przeglądarek, jeśli chcesz kierować reklamy na starsze przeglądarki, możesz wypróbować starszą wersję jQuery, ale być może trzeba będzie zastąpić on () bind () w funkcji (nie testowane)
źródło
Inne odpowiedzi wydawały się nie działać dla mnie, ale znalazłem ten hack. To zadziałało dla mnie (lipiec 2014)
W moim przypadku miałem również pole wejściowe woocommerce, więc użyłem tego
Zaktualizowałem moją odpowiedź, aby pokazać raczej wybór niż dane wejściowe
źródło