2010-09-22 12 views
75

Czy można usunąć przerywaną linię otaczającą wybrany element w zaznaczonym elemencie?Usunąć kontur z pola wyboru w FF

alt text

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

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

Aktualizacja
Zanim pójdziesz do przodu i usunąć kontur, proszę przeczytać.
http://www.outlinenone.com/

+0

trzy miesiące temu szukałem to samo, ale z przyciskiem radiowym. Ponad pięć lub sześć różnych rozwiązań, które znalazłem, nic nie działało. Podejrzewam, że nie możesz tego zrobić. Mam nadzieję, że się mylę. –

+0

Obawiam się, że to jest również fakt, ale wciąż mam nadzieję, że zostanie udowodniony błąd: D – Martin

+0

Czy w Mozilli żyją ludzie, którzy uważają, że ta głupia linia przerywana wygląda dobrze? Dlaczego jest to nawet coś, co musimy usunąć? – billynoah

Odpowiedz

62

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

Firefox używa koloru tekstu do określenia koloru przerywanej granicy. Powiedzmy, że ...

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

Firefox spowoduje, że przerywana ramka stanie się przezroczysta. Ale oczywiście twój tekst również będzie przezroczysty! Musimy więc jakoś wyświetlić tekst. text-shadow przychodzi na ratunek:

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

Kładziemy cień tekstu bez offsetu i bez rozmycia, dzięki czemu zastępuje tekst. Oczywiście starsza przeglądarka nie rozumiem nic z tego, więc musimy zapewnić zabezpieczenie dla koloru:

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

To kiedy IE9 wchodzi w grę: obsługuje rgba ale nie text-shadow, więc dostaniesz pozornie puste pole wyboru. Pobierz wersję modernizr z text-shadow wykrywania i zrobić ...

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

Enjoy.

+0

Dzięki kolego, spróbuję wkrótce :) – Martin

+0

Jedyne rozwiązanie, które faktycznie działa (przy użyciu FF 20). Gratulacje!To powinno –

+1

dbać o każdego FF i tylko FF: '@ -moz-document url-prefix() { \t :: - moz-focus-wewnętrzna {border: none} \t wybrać: -moz-focusring \t { \t \t kolor: przezroczysty; \t \t tekstowy cień: 0px 0px 0px # 000; \t} } ' –

10

Ogólnie rzecz biorąc, formanty kontrolne są niemożliwe do stylu do tego stopnia dokładności. Nie ma przeglądarki, o której wiem, że obsługuje rozsądny zakres właściwości we wszystkich kontrolkach. To jest powód, dlaczego nie jesteś gazillion JavaScript bibliotek „fałszywe” formantów formularza z obrazów i innych elementów HTML i naśladować ich pierwotnej funkcji z kodu:

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

...

+0

Thx, Chyba muszę "zrobić własną" listę wyboru, aby to osiągnąć. Szkoda, że ​​formanty formularzy nie są bardziej jednolite w różnych przeglądarkach. – Martin

+1

@Martin: to nic w porównaniu z brakiem elastyczności kontroli przesyłania plików, która w większości przeglądarek nie może być * wcale * stylowana *. ;) –

3

Wypróbuj jedną z te:

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

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

Reference

+5

Thx za wysiłek, ale niestety to nie zadziałało. Może działa na elemencie 'a', ale nie działało na elemencie' select'. – Martin

5

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

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

137

Cóż, Duopixel’s answer jest prosty. Jeśli pójdziemy o krok dalej, możemy uczynić to kuloodpornym.

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

Gotowe, ważne tylko w Firefoksie, a brzydki, kropkowany kontur wokół wybranej opcji zniknął.

+11

Co to za magia !? ;) –

+2

Pracował jak urok. –

+2

To naprawdę DZIAŁA! –

0

Nadchodzi roztworowi

:focus {outline:none;} 
::-moz-focus-inner {border:0;} 
+1

Testowany. Nie działa. Firefox rozpoznaje tę właściwość, ale wydaje się, że nic nie robi. Próbowałem ustawić go na "10px solid red" i nie mogę znaleźć miejsca, w którym się pojawia. – mpen

5

ten będzie skierowany wszystkich wersjach Firefoksa

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

Może chcesz usunąć! Ważne, jeśli planujesz mieć zarys pojawiają się na innych stronach w całej witryna korzystająca z tego samego arkusza stylów.

13

Oto współpraca rozwiązań do naprawy problemów związanych z stylizacją za pomocą pól wyboru Firefoksa. Użyj tego selektora CSS jako części zwykłego resetowania CSS.

Klasa usuwa obrys na pytanie, ale także usuwa obraz w tle (zwykle używam niestandardowej strzałki rozwijanej, a strzałki rozwijanej systemu Firefox nie można obecnie usunąć). W przypadku korzystania z obrazu tła do niczego innego niż rozwijanej obrazu, po prostu usunąć wiersz 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; 
    } 
} 
+0

Czy mimo to nadal można zdefiniować kolor tekstu opcji za pomocą tej metody? – user1063287

-1
input[type='range']::-moz-focus-outer { 
    border: 0; 
    outline: none !important; 
    } 

pracy 100%

0

Tutaj to działa!

$ ("select"). Kliknij (function() {

// usuwa punkt ciężkości z zaznaczonym elementem natychmiast

// i tak będzie zarys

$ (this) .blur();

}); 

Choć nie mają swoich niedociągnięć w innych przeglądarkach, będziemy chcieli, aby sprawdzić typ przeglądarki użytkownik jest wykorzystanie i jeśli (test jest Firefox) {//implement t on kod}

+0

Wyjaśnij, co zawiera fragment kodu, a także podaj fragment kodu. – sayan

0

Usuń kontur/przerywaną ramkę z Firefoksa Wszystkie zaznaczone znaczniki.

umieścić ten wiersz kodu w arkuszu stylów:

*:focus{outline:none !important;}