Usuń kontur z pola wyboru w FF

97

Czy można usunąć przerywaną linię otaczającą wybrany element w wybranym elemencie?

tekst alternatywny

Próbowałem dodać outlinewłaściwość w CSS, ale to nie działało, przynajmniej nie w FF.

<style>
   select { outline:none; }
</style>

Aktualizacja
Zanim przejdziesz dalej i usuniesz konspekt, przeczytaj to.
http://www.outlinenone.com/

Jaskółka oknówka
źródło
trzy miesiące temu szukałem tego samego, ale za pomocą przycisku opcji. Ponad pięć lub sześć różnych rozwiązań, które znalazłem, nic nie działało. Więc podejrzewam, że nie możesz tego zrobić. Mam nadzieję, że się mylę.
Arseni Mourzenko
Obawiam się, że to też jest fakt, ale nadal mam nadzieję, że okaże się to błędne: D
Martin,
Czy rzeczywiście w Mozilli pracują ludzie, którym wydaje się, że ta głupia przerywana linia wygląda dobrze? Dlaczego to jest coś, co musimy usunąć?
billynoah

Odpowiedzi:

74

Znalazłem rozwiązanie, ale jest matką wszystkich hacków, mam nadzieję, że posłuży jako punkt wyjścia dla innych, solidniejszych rozwiązań. Wadą (moim zdaniem zbyt dużym) jest to, że każda przeglądarka, która nie obsługuje, text-shadowale obsługuje rgba(IE 9), nie wyrenderuje tekstu, chyba że użyjesz biblioteki takiej jak Modernizr (nie przetestowana, tylko teoria).

Firefox używa koloru tekstu do określenia koloru przerywanej ramki. Więc powiedz, jeśli to zrobisz ...

select {
  color: rgba(0,0,0,0);
}

Firefox wyrenderuje przerywaną ramkę jako przezroczystą. Ale oczywiście twój tekst też będzie przezroczysty! Musimy więc jakoś wyświetlić tekst. text-shadowprzychodzi na ratunek:

select {
  color: rgba(0,0,0,0);
  text-shadow: 0 0 0 #000;
}

Umieściliśmy cień tekstu bez przesunięcia i bez rozmycia, aby zastąpić tekst. Oczywiście starsza przeglądarka nic z tego nie rozumie, więc musimy zapewnić rezerwę dla koloru:

select {
  color: #000;
  color: rgba(0,0,0,0);
  text-shadow: 0 0 0 #000;
}

Wtedy do gry wkracza IE9: obsługuje on, rgbaale nie obsługuje cień tekstu, więc otrzymasz pozornie puste pole wyboru. Pobierz swoją wersję Modernizr z text-shadowwykrywaniem i zrób ...

.no-textshadow select {
  color: #000;
}

Cieszyć się.

metoda działania
źródło
Dzięki kolego, spróbuję wkrótce :)
Martin
Jedyne rozwiązanie, które faktycznie działa (przy użyciu FF 20). Gratulacje!
Gilberto Torrezan
4
To powinno zadbać o każdego FF i tylko FF:@-moz-document url-prefix() { ::-moz-focus-inner {border: none} select:-moz-focusring { color: transparent; text-shadow: 0px 0px 0px #000; } }
Timo Kähkönen
Czy wpłynie to na CSS w Chrome i innych przeglądarkach?
Dadhich Sourav
166

Cóż, odpowiedź Duopixel jest po prostu doskonała. Jeśli pójdziemy o krok dalej, możemy uczynić go kuloodpornym.

select:-moz-focusring {
    color: transparent;
    text-shadow: 0 0 0 #000;
}

Proszę bardzo, działa tylko w przeglądarce Firefox i brzydki kropkowany kontur wokół wybranej opcji zniknął.

Fleshgrinder
źródło
1
Co ciekawe, to rozwiązanie nie jest do końca kuloodporne, jak odpowiedź Duopixel. Jeśli użyjesz efektu przejścia z zaznaczonym polem (np. -Moz-przejście), kropkowane pole pojawi się na czas trwania przejścia, a następnie zniknie. Tak więc, jeśli określisz „-moz-przejście: wszystko 0,5 s łatwość;”, zobaczysz ComboBox na pół sekundy z tym rozwiązaniem, podczas gdy w ogóle nie zobaczysz go z odpowiedzią Duopixel. Możesz obejść ten problem, ustawiając dla całego zaznaczonego elementu atrybut przezroczystego koloru, ale wtedy nie zobaczysz żadnego tekstu, gdy pole nie jest aktywne.
Jon
1
Edycja: powyżej powinno być napisane: „... przez pół sekundy zobaczysz kropkowane pole z tym rozwiązaniem ...”. Nie mogę już edytować komentarza. W każdym razie „kolor: rgba (0,0,0,0);” właściwość jest tym, co naprawia przejście i musi znajdować się w elemencie select; „-moz-focusring” nie wystarczy. Co ciekawe, z jakiegoś powodu nie mam żadnych problemów zarówno w IE9, jak iw Chrome z rozwiązaniem Duopixel, więc rzeczy, o których mówił na koniec z Modernizrem, były dla mnie zupełnie niepotrzebne.
Jon
Oczywiście pojawi się, jeśli określisz przejście. Używanie allwewnątrz przejść jest jak strzelanie z pistoletu Gatlinga w locie.
Fleshgrinder
1
To lub rozwiązanie Duopixel nie działa w FF 33.0.3 w Mac Mavericks. Zamiast przerywanego konturu jest niebieski, rozmyty kontur.
Timo Kähkönen
1
powoduje to zerwanie stylów przeglądarki na wyłączonych opcjach - po ustawieniu zaznaczenia stają się czarne zamiast wyszarzonego tekstu, którym powinny być.
billynoah
19

Oto współpraca rozwiązań pozwalających rozwiązać problemy ze stylem w polach wyboru przeglądarki Firefox. Użyj tego selektora CSS jako części swojego zwykłego resetowania CSS.

Klasa usuwa kontur zgodnie z pytaniem, ale także usuwa obraz tła (ponieważ zwykle używam niestandardowej strzałki rozwijanej i strzałki rozwijanej systemu Firefoxes nie można obecnie usunąć). Jeśli używasz obrazu tła dla czegoś innego niż obraz rozwijany, po prostu usuń liniębackground-image: none !important;

@-moz-document url-prefix() {
    select, select:-moz-focusring, select::-moz-focus-inner {
       color: transparent !important;
       text-shadow: 0 0 0 #000 !important;
       background-image: none !important;
       border:0;
    }
}
Wayne Dunkley
źródło
Czy w ogóle istnieje możliwość zdefiniowania koloru tekstu opcji za pomocą tej metody?
user1063287
W rzeczywistości możesz usunąć strzałki Firefox używane w tle SELECT, ustawiając właściwość specyficzną dla dostawcy -moz-appearancena none.
Emanuele Del Grande,
W innych odpowiedziach brakuje ważnego select::-moz-focus-innerselektora, co czyni je mniej skutecznymi. Dlatego ten dostaje mój ⬆.
Dave Land
select:-moz-focusringwraz z color: transparenti text-shadow: 0 0 0 #000usunięto irytujące obramowanie ostrości w przeglądarce Firefox v63
Jason Moore
Uwaga: url-prefix (). fxsitecompat.dev/en-CA/docs/2018/… Czytając linki, nie wiem, czy zamierzają to wycofać, czy nie. Ale uważaj.
user3342816
9

Będzie to dotyczyło wszystkich wersji przeglądarki Firefox

@-moz-document url-prefix() { 
    select {
       color: transparent !important;
       text-shadow: 0 0 0 #000 !important;
    }
}

Możesz chcieć usunąć! Ważne, jeśli planujesz, aby konspekt pojawiał się na innych stronach w Twojej witrynie, które używają tego samego arkusza stylów.

Kyzer
źródło
1
To powinna być wybrana odpowiedź
brandonscript
9

Ogólnie rzecz biorąc, formantów formularzy nie można stylizować z taką dokładnością. Nie ma przeglądarki, o której mi wiadomo, która obsługuje rozsądny zakres właściwości we wszystkich kontrolkach. To jest powód, dla którego istnieje miliard bibliotek JavaScript, które „fałszywie” tworzą kontrolki z obrazami i innymi elementami HTML i emulują ich oryginalną funkcjonalność za pomocą kodu:

http://ryanfait.com/resources/custom-checkboxes-and-radio-buttons/

...

Álvaro González
źródło
Dzięki, wydaje mi się, że muszę "stworzyć własną" listę wyboru, aby to osiągnąć. Szkoda, że ​​kontrolki formularza nie są bardziej jednolite w przeglądarkach.
Martin
1
@Martin: to nic w porównaniu z brakiem elastyczności kontrolki przesyłania plików, której w większości przeglądarek w ogóle nie można nadać stylu . ;)
Arseni Mourzenko
3

<select onchange="this.blur();">

Jeśli tego użyjesz, ramka pozostanie, dopóki nie wybierzesz pozycji z listy.

malitta
źródło
2
Niestety, to rozwiązanie nie jest zgodne z wytycznymi dotyczącymi dostępności i użyteczności. Oprócz interfejsów TTS dla niewidomych użytkowników, nie pozwala na nawigację za pomocą klawiatury. Skupione elementy powinny wyglądać inaczej niż inne, problem z obecnym pytaniem polega na tym, że Firefox nie pozwala ci zdecydować, jak.
Emanuele Del Grande,
1

Wypróbuj jedno z poniższych:

a:active {
 outline: none;
 -moz-outline: none;
}

a {
-moz-user-focus: none;
}

Odniesienie

Kocia ryba
źródło
6
Dzięki za wysiłek, ale niestety nie pomogło. Może działa na aelemencie, ale nie działa na selectelemencie.
Martin
1

Oto rozwiązanie

:focus {outline:none;}
::-moz-focus-inner {border:0;}
Faizan
źródło
1
Przetestowany. Nie działa. Firefox rozpoznaje tę właściwość, ale wydaje się, że nic nie robi. Próbowałem go ustawić 10px solid redi nie mogę znaleźć miejsca, w którym się pojawia.
mpen
To faktycznie zadziałało dla mnie, podczas gdy wszystkie inne wyżej ocenione odpowiedzi nie.
Tashows
0

Usuń kontur / kropkowaną ramkę z Firefox All Selectable Tags.

Umieść ten wiersz kodu w swoim arkuszu stylów:

*:focus{outline:none !important;}   
Hasnain Mehmood
źródło
0

Dodaj border-style: none do wyboru w CSS.

select {
border-style: none; }
Khwaja Abdul Ahad
źródło
-2
    input[type='range']::-moz-focus-outer {
    border: 0;
    outline: none !important;
    }

działa w 100%

user2577904
źródło
-4

Spowoduje to usunięcie fokusu z selectelementu i konspektu :

$("select").click(function(){
    $(this).blur();
});

Chociaż nie jest to pozbawione wad w innych przeglądarkach. Będziesz chciał sprawdzić przeglądarkę, której używa użytkownik:

if (FIREFOX) {
    //implement the code
}
Moses Dike Okore
źródło
Wyjaśnij, co robi Twój fragment kodu, oprócz podania fragmentu kodu.
sayan