Chrome'daki css özel stil düğmesinden mavi kenarlığı kaldırın


811

Bir web sayfasında çalışıyorum ve özel stilli <button>etiketler istiyorum . CSS ile Dolayısıyla, dedim: border: none. Şimdi safaride mükemmel çalışıyor, ancak kromda, düğmelerden birini tıkladığımda, etrafına sinir bozucu bir mavi kenarlık koyuyor. Düşündüm button:active { outline: none }ya button:focus { outline:none }da çalışacaktım, ama ikisi de işe yaramadı. Herhangi bir fikir?

Bu tıklanmadan önce nasıl göründüğü (ve yine de tıklandıktan sonra nasıl görünmesini istiyorum):

Ve bahsettiğim sınır bu:

resim açıklamasını buraya girin

İşte benim CSS:

button.launch {
    background-color: #F9A300;
    border: none;
    height: 40px;
    padding: 5px 15px;
    color: #ffffff;
    font-size: 16px;
    font-weight: 300;
    margin-top: 10px;
    margin-right: 10px;
}

button.launch:hover {
    cursor: pointer;
    background-color: #FABD44;
}

button.change {
    background-color: #F88F00;
    border: none;
    height: 40px;
    padding: 5px 15px;
    color: #ffffff;
    font-size: 16px;
    font-weight: 300;
    margin-top: 10px;
    margin-right: 10px;
}

button.change:hover {
    cursor: pointer;
    background-color: #F89900;
}

button:active {
    outline: none;
    border: none;
}

1

Neden demoda çalıştığından emin değilim .. Burada yapıyor: jsfiddle.net/NgL8H @davidpauljunior
eshellborn

5
Odaklanma kuralını işe yaramadığını söylediğiniz altına ekledim, ancak öyle görünüyor: jsfiddle.net/NgL8H/1
davidpauljunior

21
Anahattı - engelli olanları - ve benim gibi klavyeyi sık kullandıkları için hızlı kullanmamalısınız - gezinmek için ona ihtiyaç duymalısınız. Anahatları istediğiniz bir şeye göre yeniden şekillendirmek çok daha iyi olur.
Chris B

3
outline: noneErişilebilirlik kaybını değiştirmeye hazır değilseniz lütfen böyle ayarlamayın . Bu web sitesini ziyaret edin: outlinenone.com
Flimm

Yanıtlar:


1536

Bunu yapmak , sitenizin erişilebilirliğini azalttığı için önerilmez ; daha fazla bilgi için bu gönderiye bakın .

Bununla birlikte, ısrar ederseniz, bu CSS'nin çalışması gerekir:

button:focus {outline:0;}

Bir göz atın veya JSFiddle: http://jsfiddle.net/u4pXu/

Veya bu snippet'te:

button.launch {
background-color: #F9A300;
border: none;
height: 40px;
padding: 5px 15px;
color: #ffffff;
font-size: 16px;
font-weight: 300;
margin-top: 10px;
margin-right: 10px;
}

button.launch:hover {
cursor: pointer;
background-color: #FABD44;
}

button.launch {
background-color: #F9A300;
border: none;
height: 40px;
padding: 5px 15px;
color: #ffffff;
font-size: 16px;
font-weight: 300;
margin-top: 10px;
margin-right: 10px;
}

button.launch:hover {
cursor: pointer;
background-color: #FABD44;
}

button.change {
background-color: #F88F00;
border: none;
height: 40px;
padding: 5px 15px;
color: #ffffff;
font-size: 16px;
font-weight: 300;
margin-top: 10px;
margin-right: 10px;
}

button.change:hover {
cursor: pointer;
background-color: #F89900;
}

button:active {
outline: none;
border: none;
}

button:focus {outline:0;}
<button class="launch">Launch with these ads</button> 
<button class="change">Change</button>


49
Bu gerçekten olmamalı mı outline: none;, önemli değil mi?
henrywright

2
@henrywright OP bunu denedi ve onun için çalışmadı.
diosney

58
Lütfen bunu asla yapma. Küçük şikayetiniz bu hale gelen büyük erişilebilirlik sorunuyla ilgisiz
phazei

20
Bunu tamamen gizlemek yerine kesinlikle yeniden şekillendirmelisiniz. Bu durumda, button:focus{ outline-color: #A75000 }göstergeyi gizlemek yerine, stile uyan koyu bir turuncuya değiştirdiğiniz gibi bir şey deneyin .
Cloudworks

3
@ SeanO'Brien, OP'nin verdiği durumun, tümü gövdeli 5 kullanıcısı olan bir site için olabileceğini kabul etti. Ama muhtemelen bunu iptal eden 1123 kişinin çoğunluğu, bu durumun kendi durumları için bir şeyler yapmanın doğru yolu olduğunu düşünüyor, ancak aslında ayrımcı olduğu için değil.
alexrogers

296

Bekle! Bu çirkin taslağın bir nedeni var!

Bu çirkin mavi çerçeveyi kaldırmadan önce, erişilebilirliği dikkate almak isteyebilirsiniz . Varsayılan olarak, bu mavi çerçeve odaklanabilir öğelere yerleştirilir. Bu, erişilebilirlik sorunları olan kullanıcıların sekmeye basarak bu düğmeyi odaklayabilmelerini sağlar. Bazı kullanıcılar fare kullanma becerisine sahip değildir ve bilgisayar etkileşimi için yalnızca klavyeyi (veya başka bir giriş aygıtını) kullanmalıdır. Mavi anahattı kaldırdığınızda, hangi öğenin odaklandığına dair görsel bir gösterge artık yoktur. Mavi anahat kaldırmak için gidiyoruz varsa, gereken düğme odaklı olduğunu görsel endikasyon başka tür ile değiştirin.

Olası Çözüm: Odaklandığında Düğmeleri Koyulaştır

Aşağıdaki örnekler için Chrome'un mavi çerçevesi ilk önce button:focus { outline:0 !important; }

Temel Bootstrap düğmeleriniz normal şekilde göründükleri gibidir: Normal Durumda Bootstrap Düğmeleri

İşte odak aldıkları düğmeler: Odaklanmış Durumda Bootstrap Düğmeleri

Düğmelere basıldığında düğmeler: resim açıklamasını buraya girin

Gördüğünüz gibi, odaklanıldığında düğmeler biraz daha koyu. Şahsen, odaklanmış durum ile düğmenin normal durumu arasında çok belirgin bir fark olması için odaklanmış düğmelerin daha da karanlık olmasını tavsiye ederim.

Sadece engelli kullanıcılar için değil

Sitenizi daha erişilebilir hale getirmek, genellikle gözden kaçan ancak web sitenizde daha verimli bir deneyim oluşturmanıza yardımcı olabilecek bir şeydir. Ellerini klavyede tutmak için web sitelerinde gezinmek için klavye komutlarını kullanan birçok normal kullanıcı vardır.


40
Sorun Chrome'da, sekme (çoğu tarayıcıda bulunan mantıksal uygulama) yerine tıklamada bile gerçekleşiyor. Bu yüzden aslında Google, çoğu geliştirici bunu (Chrome'da) kapatacağından erişilebilirliği düşürüyor Google / Chrome ile ilgili sorunları araştırmak / düzeltmek için daha fazla zaman
harcanıyor

3
Haklısın! Anahat kaldırılırken erişilebilirliği hesaba katmak için biraz JavaScript'e ihtiyacınız var: paciellogroup.com/blog/2012/04/…
mems

bir yorumu yanıtlayabileceğiniz şekilde biçimlendiremez / biçimlendiremezsiniz, tho. yalnızca bir yorum yoluyla bu ayrıntı düzeyinde geri bildirim sağlamak zor.
A-Dubb

@RunLoop Tıklamadan sonra mavi kenarlığı nasıl kaldırır veya değiştirirsiniz? CSS ile yapılabilir mi veya Javascript gerekli mi?
Nick

bu sorunları olan insanlar sadece vimium-ff kullanabilirler
yukashima huksay

60

Sadece tümünü seçip anahat uygulayarak sayfadaki tüm etiketlerden anahattı kaldırırım: her şeye yok :)

*:focus {outline:none}

Bagofcole'un da belirttiği gibi,! Önemli de eklemeniz gerekebilir, böylece stil şöyle görünecektir:

*:focus {outline:none !important}

6
Lütfen bunu yapma. Sayfanızda klavyeyle gezinen kullanıcılar o sırada odaklanılan öğeyi göremez. Anahattı gizlemek yerine, click olayı bir fareden kaynaklanıyorsa öğeyi bulanıklaştırın.
joepio

Temelde kesin bir başka odak tarzı var ...
Arziel

46

Bu problemin örneğinde belirtmek zorunda kaldım box-shadow: none

button:focus {
  outline:none;
  box-shadow: none;
}

4
Gönderiniz için teşekkürler! Benim durumumda nokta "box-shadow" özelliği idi.
1717'de

1
Bu benim için de aynıydı. Alakalı değilim ama Ubuntu 17.10'da Chrome'da Roots 'Sage Theme kullanıyordum.
Spencer Hill

1
Sadece bu işe yaradıbox-shadow
sura2k

1
Eklemek zorunda kaldım! İşe almak için önemli, muhtemelen bootstrap bunun için özel bir tanım var
webMan

1
Bu benim için çalıştı dostum !, çözüm gönderdiğin için teşekkürler. şerefe
theITvideos

44

Daha !importantiyi bir sonuç için beyanı unutmayın

button:focus {outline:0 !important;}

! Önemli özelliğe sahip bir kural, CSS belgesinde nerede olursa olsun her zaman uygulanır.


14
"daha iyi bir sonuç için"? Ne önemli olduğunu açıklar mısınız?
Popnoodles

5
Ama ne yaptığını açıklayabilir misiniz? "Var olduğu için" nedeninin ne olduğunu bilmeyen insanlara açıklamıyor.
Popnoodles

48
! Önemli nadiren kullanılmalıdır ve yalnızca bir şeyin daha sonraki kurallarla üzerine yazılmamasını sağlamak için kullanılmalıdır. Önceki kuralların üzerine yazarken öğelerinizi doğru seçiciyle hedeflemelisiniz.
Popnoodles

24
! İmportant'in kullanımı nadiren gerekçelendirilir. Css seçicilerinizi her zaman daha anlamlı bir şekilde kapsamalı ve sadece "daha iyi bir sonuç" verdiği için!!
Ronen Cypis

5
Lütfen bunu yapma. Teknik olarak bu OP'nin sorusuna cevap verirken, odak konumunun her göstergesini nukinglemek outline:0 !importantkötü UX ve kötü geliştirme uygulamasıdır. Bunu yapıyorsanız, lütfen odak konumunu belirtmek için başka bir şey yaptığınızdan emin olun (öğenin arka plan rengini değiştirmek gibi).
Cloudworks

26

Çıkarmak outlineerişilebilirlik açısından korkunç! İdeal olarak, odaklama halkası yalnızca kullanıcı klavyeyi kullanmayı planladığında görünür .

Kullanın : netleme görünür . Şu anda CSS kullanarak yalnızca klavye odaklamasını şekillendirmek için bir W3C önerisidir ve Firefox'ta ( caniuse ) desteklenmektedir . Diğer büyük tarayıcılar destekleyene kadar, bu sağlam çoklu dolguyu kullanabilirsiniz .

/* Remove outline for non-keyboard :focus */
*:focus:not(.focus-visible) {
  outline: none;
}

/* Optional: Customize .focus-visible */
.focus-visible {
  outline-color: lightgreen;
}

Daha fazla bilgiye ihtiyacınız olması durumunda daha ayrıntılı bir yazı da yazdım .


1
Bak, AFAIK olması gerekmez outlinedevlet diğer bazı yollarla gibi aracılığıyla açıkça görünür yapılır odak: sürece, örneğin border, background-color, box-shadowvb
Már Örlygsson

2
En iyi cevap! Gönderiniz okunmaya değer (ve şimdi blogunuzun geri kalanına bakıyorum 😅) Odak görünür npm paketi şu an olduğu yerde.
FelDev

1
Bu kesinlikle en iyi çözümdür. Sadece birkaç satır kodla, klavye kullanımında tutarken rahatsız edici mavi kenarlıktan kurtuldum. Teşekkürler!
pesta

1
Bu veriler doğru mu? Bu seçici Firefox'ta değil Chrome'da desteklenmiş görünüyor. developer.mozilla.org/tr-TR/docs/Web/CSS/…
Kevin Suttle

Firefox'ta seçicinin çağrıldığı anlaşılıyor :-moz-focusring, ancak dokümanların söylediklerinin aksine, tıklama ve sekme odağı arasında ayrım yapmıyor. Chrome'da, şu andan itibaren çalışması için belirli bayrakları etkinleştirmeniz gerekiyor
phil294

12

Bunu CSS dosyanıza ekleyin.

*{
  -webkit-tap-highlight-color: rgba(0, 0, 0, 0) !important;
}

3
teşekkür ederim. çalıştı ancak MDN diyor ki: Bu özellik standart değildir ve standartlar üzerinde değildir. Web'e bakan üretim sitelerinde kullanmayın: her kullanıcı için çalışmaz. Uygulamalar arasında büyük uyumsuzluklar olabilir ve gelecekte davranışlar değişebilir.
Behnam Mohammadi

8

Şunlardan birini kullanın:

:active {
    outline:none;
}

veya bu işe yaramazsa:

:active {
   outline:none !important;
}

Bu benim için işe yarıyor (en azından FF ve Chrome). Durumu hedeflemek yerine, :focusdurumu hedefleyin ve :activekullanıcı bir bağlantıyı tıkladığında tarayıcınızdaki estetik açıdan rahatsız edici vurgulamayı kaldıracaktır. Ancak, engelli sekmeleri veya kaydırma sekmeleri olan bir kullanıcı bir sayfa boyunca odak durumlarını koruyacaktır. Her iki taraf da mutlu. :)


4
Küçültülmüş sürümümü yalnızca aynı kodla değiştirip genişletirseniz neden cevabımı düzenleyesiniz? Bu kullanıcılar için daha iyi açıklığa kavuşmadı. Bunun ya da onun için bir cevap kredisi alıyor musunuz? LOL ...
chuk

3
bunun gibi StackExchange sitelerinin amacı, onları okuyan herkesin anlamalarına yardımcı olan cevaplara sahip olmaktır. Bu amaçla, kısa, küçültülmüş kodlu bir cevap, okunabilir biçimde biçimlendirilmiş kod kadar yararlı değildir. Yanıtları daha okunabilir hale getirmek, siteyi herkes için iyileştirmenin normal bir yoludur.
bignose

7

bu sorun için:

resim açıklamasını buraya girin

bunu kullan:

   *{
         -webkit-tap-highlight-color: rgba(0,0,0,0);
         -webkit-tap-highlight-color: transparent; /* For some Androids */
    }

sonuç:

resim açıklamasını buraya girin


7

Bootstrap kullanan ve bu sorunu yaşayan herkes için: active: focus yanı sıra sadece: active ve: focus özelliklerini kullanırlar.

element:active:focus {
    outline: 0;
}

İnşallah birini bulmak için biraz zaman kurtardı, neden böyle basit bir şey neden çalışmadığını merak biraz kafamı vurdu.


5

Bootstrap 4.1 ve muhtemelen diğer sürümleri kullanıyorsanız çözümlerin çoğu çalışmaz. Çok kafa vurduktan sonra, gölge-yok sınıfını uygulamanız gerektiğini keşfettim :

<button class="btn shadow-none">Bootstrap (4.1) button without shadow</button>

4

Benim için işe yarayan buydu:

button:focus {
    box-shadow:none;
}

4

Chrome ve diğer tarayıcılar için düzeltme

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

3

mavi kenarlık sorunu olan tüm öğeler için bu kodu deneyin

*{
outline: none;
}

veya

*{
outline-style: none;
}

3

Burada bahsedilmeyen erişilebilirlik sorununu çözmenin başka bir yolu da biraz Javascript kullanmaktır . Krediler hackernoon'dan bu anlayışlı blog yayınına gider: https://hackernoon.com/removing-that-ugly-focus-ring-and-keeping-it-too-6c8727fefcd2

Buradaki yaklaşım gerçekten basit ama etkilidir: Kullanıcılar sayfada gezinmek için sekme tuşunu kullanmaya başladığında bir sınıf eklemek (ve fareye tekrar döndüğünüzde isteğe bağlı olarak kaldırmak). .

function handleFirstTab(e) {
    if (e.keyCode === 9) { // the "I am a keyboard user" key
        document.body.classList.add('user-is-tabbing');
        window.removeEventListener('keydown', handleFirstTab);
    }
}

window.addEventListener('keydown', handleFirstTab);

3

Aynı sorunla karşılaştım, bu yüzden basit CSS-

.custom-button {
    outline: none
}

2

Girişte aynı efekti silmek istiyorsanız, düğmenin yanı sıra aşağıdaki kodu da ekleyebilirsiniz.

input:focus {outline:0;}

2

Tüm modern tarayıcılar css-selector'u desteklemeye başlayana kadar : odak-görünür , erişilebilirliği kaydetmenin
en basit ve muhtemelen en iyi yolu bu zor odağı sadece fare kullanıcıları için kaldırmak ve klavye kullanıcıları için kaydetmek :

1. bu küçük çoklu dolguyu kullanın (yaklaşık 10kb): https://github.com/WICG/focus-visible 2.
css'inizde bir yere sonraki kodu ekleyin:

.js-focus-visible :focus:not(.focus-visible) {
  outline: none;
}

Css4-selector tarayıcı desteği: focus-visible şu anda çok zayıf:
https://caniuse.com/#search=focus-visible



1

Bu Chrome ailesinde bir sorundur ve sonsuza dek oradadır.

Bir hata oluştu https://bugs.chromium.org/p/chromium/issues/detail?id=904208

Burada gösterilebilir: https://codepen.io/anon/pen/Jedvwj düğme benzeri herhangi bir şeye bir kenarlık eklediğinizde (örneğin bir etikete role = "button" eklendi) Chrome karmaşası ve farenizle tıkladığınızda odak durumunu ayarlar.

Bu düzeltmeyi kullanmanızı kesinlikle tavsiye ederim: https://github.com/wicg/focus-visible .

Sadece aşağıdakileri yapın

npm install --save focus-visible

Komut dosyasını html'nize ekleyin:

<script src="/node_modules/focus-visible/dist/focus-visible.min.js"></script>

veya webpack veya benzeri bir şey kullanıyorsanız ana giriş dosyanıza içe aktarın:

import 'focus-visible/dist/focus-visible.min';

sonra bunu css dosyanıza koyun:

// hide the focus indicator if element receives focus via mouse, but show on keyboard focus (on tab).
.js-focus-visible :focus:not(.focus-visible) {
  outline: none;
}

// Define a strong focus indicator for keyboard focus.
// If you skip this then the browser's default focus indicator will display instead
// ideally use outline property for those users using windows high contrast mode
.js-focus-visible .focus-visible {
  outline: magenta auto 5px;
}

Sen edebilirsiniz sadece ayarlayın:

button:focus {outline:0;}

ancak çok sayıda kullanıcınız varsa, fareleri kullanamayanları veya klavyelerini sadece hız için kullanmak isteyenler dezavantajlısınız.


1

Bootstrap ile aynı sorunu yaşadım. Hem anahat hem de kutu gölgesi ile çözdüm

.btn:focus, .btn.focus {
    outline: none !important;
    box-shadow: 0 0 0 0 rgba(0, 123, 255, 0) !important; // or none
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.