Usuń świecenie Safari / Chrome textinput / textarea


337

Zastanawiam się, czy można usunąć domyślną niebieską i żółtą poświatę po kliknięciu pola wprowadzania / obszaru tekstowego za pomocą CSS?


6
@ Steve, kolejnym powodem do wyłączenia tego jest to, że jeśli chcesz, aby efekt blasku działał we wszystkich przeglądarkach, używając: focus zamiast źle obsługiwanego stylu konturu.
Langdon,

90
To naprawdę denerwujące, gdy ludzie rozpoczynają filozoficzną rozmowę na temat tego, czy coś jest „słuszne”, gdy pytanie ma charakter techniczny.
tim

2
Tworzę internetowy arkusz kalkulacyjny, Steve, więc byłby odpowiedni do mojego użytku. To zależy, ale jeśli jest to tylko prosta forma, powinieneś zostawić kontur bez zmian.
william44isme

4
Myślę, że można całkowicie wyłączyć i zrobić niestandardowy: efekt skupienia za pomocą css ...
ithil 30.10.2013

Wiedza o tym, jak coś wyłączyć, nie oznacza, że ​​jest to nieodwracalne. Każdy, kto pracuje dla dowolnego klienta, wie, że może chcieć zobaczyć coś renderowanego w jedną stronę, a następnie przełączyć go z powrotem na oryginalny / domyślny sposób. Wykładanie ich na temat dostępności nie zmieni tego pragnienia ani nie uszczęśliwi nikogo.
JakeGould,

Odpowiedzi:


623
textarea, select, input, button { outline: none; }

Chociaż argumentowano, że zachowanie blasku / konturu jest w rzeczywistości korzystne dla dostępności, ponieważ może pomóc użytkownikom zobaczyć, który element jest aktualnie skupiony.

Możesz także użyć pseudoelementu „: focus”, aby kierować dane wejściowe tylko wtedy, gdy użytkownik je zaznaczy.

Demo: https://jsfiddle.net/JohnnyWalkerDesign/xm3zu0cf/


2
Idealnie, bardzo dziękuje. Zastanawiam się również, czy mogę również usunąć opcję zmiany rozmiaru pola tekstowego (w prawym dolnym rogu pola tekstowego)?
Alec Smart

3
+1 za ostrożność; należy starać się unikać wszystkiego, co robi łamie oczekiwania użytkownika, jak ich platformy preform; możesz faktycznie zaszkodzić ich produktywności i utrudnić korzystanie z witryny.
Rob

6
Usuń moją opcję zmiany rozmiaru pola tekstowego chrome / safari na własne ryzyko! Uważam to za bardzo przydatne, niezbędne nawet na niektórych stronach.
JeeBee

5
w celu pozbycia się uchwytu zmiany rozmiaru: resize: none;
Daniel

22
box-shadow: brak;
styks 24.09.2013

92

Ten efekt może wystąpić także na elementach niepochodzących z wejścia. Znalazłem następujące prace jako bardziej ogólne rozwiązanie

:focus {
  outline-color: transparent;
  outline-style: none;
}

Aktualizacja: może nie być konieczne użycie :focusselektora. Jeśli masz element, powiedzmy <div id="mydiv">stuff</div>, i otrzymujesz zewnętrzny blask na tym elemencie div, po prostu zastosuj jak normalnie:

#mydiv {
  outline-color: transparent;
  outline-style: none;
}

Działa to na przykład w przypadku <button>elementów, które nie korzystają szczególnie z jaśniejącego ogniskowania, ponieważ i tak najczęściej je klikasz.
kasimir

1
Akceptowana odpowiedź nie działała dla mnie w Chrome na OSX. To rozwiązanie spełniło swoje zadanie.
Bart

Korzystając z tej techniki, możesz utrzymać ostrość, ale ponownie zdefiniuj wartość konturu, aby uzyskać jednolity wybrany kolor itp., Aby pasował do stylu witryny, jeśli jej całkowite usunięcie nie jest całkowicie zadowalające.
Neil Monroe,

1
Nie działało dla mnie na najnowszej wersji chrome45.0.2454.101 m
J86

Ta odpowiedź od @ Carl-W nie powinna zostać przeoczona! - Przydało się to przy użyciu jQuery do połączenia z kotwicą, która była div. Przeładowywałem iframe w divie, a potem ręcznie szedłem do kotwicy bez przeładowywania. Przewinąłby stronę w dół do kotwicy, ale cały div miał niebieski zewnętrzny blask. Dodałem ten CSS do elementu div i działało! - UWAGA: Nie użyłem :focusselektora, po prostu umieściłem outline-colori outline-stylena css mojej div.
Wade,

13

W przypadku zmiany rozmiaru obszaru tekstowego w przeglądarkach internetowych:

Ustawienie maksymalnej wysokości i maksymalnej szerokości w obszarze tekstowym nie usunie wizualnego uchwytu zmiany rozmiaru. Próbować:

resize: none;

(i tak zgadzam się z „staraj się unikać robienia czegokolwiek, co łamie oczekiwania użytkownika”, ale czasem ma to sens, np. w kontekście aplikacji internetowej)

Aby dostosować wygląd elementów formularza od zera:

-webkit-appearance: none;

3
Możliwe jest również, aby umożliwić zmianę rozmiaru tylko w jednym kierunku, który może ustalić jego interakcji z niektórymi układami bez wyłączenia go całkowicie: możliwe wartości dla zmiany rozmiaru są none, both, horizontal, vertical, i inherit.
Boann

Podoba mi się oferowane tutaj rozwiązanie z „-webkit-wygląd: brak;” - usuwa CAŁĄ stylizację z elementów wejściowych, dzięki czemu można je stylizować według potrzeb. Dzięki!
hanazair

Nie wiem, dlaczego to ma tyle głosów poparcia, to wcale nie jest odpowiedź na pytanie.
paddotk

7

Carl W :

Ten efekt może wystąpić także na elementach niepochodzących z wejścia. Znalazłem następujące prace jako bardziej ogólne rozwiązanie

:focus {
  outline-color: transparent;
  outline-style: none;
}

Wytłumaczę to:

  • :focusoznacza, że ​​stylizuje elementy, które są w centrum uwagi. Więc projektujemy elementy w centrum uwagi.
  • outline-color: transparent; oznacza, że ​​niebieski blask jest przezroczysty.
  • outline-style: none; robi to samo.

5

Doświadczyłem tego podczas divzdarzenia kliknięcia i po 20 wyszukiwaniach znalazłem ten fragment, który uratował mi dzień.

-webkit-tap-highlight-color: rgba(0,0,0,0);

Wyłącza to domyślne podświetlanie przycisków w przeglądarkach mobilnych webkit


4

Jest to rozwiązanie dla osób dbających o dostępność .

Proszę nie używać outline:none;do wyłączania konturu fokusa. Jeśli to zrobisz, zabijasz dostęp do sieci. Jest dostępny sposób na to.

Sprawdź ten artykuł , który napisałem, aby wyjaśnić, jak usunąć granicę w przystępny sposób.

W skrócie chodzi o to, aby pokazać obramowanie konturu tylko wtedy, gdy wykryjemy użytkownika klawiatury. Gdy użytkownik zacznie używać myszy, wyłączamy kontur. W rezultacie otrzymujesz to, co najlepsze.


2

Jeśli chcesz usunąć blask z przycisków w Bootstrap (co niekoniecznie jest moim zdaniem złe UX), potrzebujesz następującego kodu:

.btn:focus, .btn:active:focus, .btn.active:focus{
  outline-color: transparent;
  outline-style: none;
}

Dzięki. .btn:active:focusbyło konieczne, aby usunąć poświatę, jednocześnie przytrzymując przycisk.
homerjam,

2

To rozwiązanie działało dla mnie.

input:focus {
    outline: none !important;
    box-shadow: none !important;
}

1

czasami zdarza się, że przyciski również następnie użyj poniżej, aby usunąć linię zewnętrzną

input:hover
input:active, 
input:focus, 
textarea:active,
textarea:hover,
textarea:focus, 
button:focus,
button:active,
button:hover
{
    outline:0px !important;
}

0
<select class="custom-select">
        <option>option1</option>
        <option>option2</option>
        <option>option3</option>
        <option>option4</option>
</select>

<style>
.custom-select {
        display: inline-block;
        border: 2px solid #bbb;
        padding: 4px 3px 3px 5px;
        margin: 0;
        font: inherit;
        outline:none; /* remove focus ring from Webkit */
        line-height: 1.2;
        background: #f8f8f8;

        -webkit-appearance:none; /* remove the strong OSX influence from Webkit */

        -webkit-border-radius: 6px;
        -moz-border-radius: 6px;
        border-radius: 6px;
    }
    /* for Webkit's CSS-only solution */
    @media screen and (-webkit-min-device-pixel-ratio:0) { 
        .custom-select {
            padding-right:30px;    
        }
    }

    /* Since we removed the default focus styles, we have to add our own */
    .custom-select:focus {
        -webkit-box-shadow: 0 0 3px 1px #c00;
        -moz-box-shadow: 0 0 3px 1px #c00;
        box-shadow: 0 0 3px 1px #c00;
    }

    /* Select arrow styling */
    .custom-select:after {
        content: "▼";
        position: absolute;
        top: 0;
        right: 0;
        bottom: 0;
        font-size: 60%;
        line-height: 30px;
        padding: 0 7px;
        background: #bbb;
        color: white;

        pointer-events:none;

        -webkit-border-radius: 0 6px 6px 0;
        -moz-border-radius: 0 6px 6px 0;
        border-radius: 0 6px 6px 0;
    }
</style>

0

Uznałem, że pomocne jest usunięcie obrysu przycisku wejściowego typu „drzwi przesuwne”, ponieważ kontur nie obejmuje prawej „pokrywy” obrazu drzwi przesuwnych, przez co stan skupienia wygląda trochę niepewnie.

input.slidingdoorbutton:focus { outline: none;}

0

Musiałem tylko usunąć ten efekt z moich pól wprowadzania tekstu i nie mogłem sprawić, by inne techniki działały całkiem dobrze, ale to właśnie dla mnie działa;

input[type="text"], input[type="text"]:focus{
            outline: 0;
            border:none;
            box-shadow:none;

    }

Testowane w przeglądarce Firefox i Chrome.


0

Pewnie! Niebieską ramkę można usunąć również ze wszystkich elementów HTML za pomocą *

*{
    outline-color: transparent;
    outline-style: none;
  }

I

 *{
     outline: none;   
   }
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.