ChromeのCSSカスタムスタイルボタンから青い枠を削除


811

Webページで作業していて、カスタムスタイルの<button>タグが必要です。CSSで、私は言った:border: none。これでサファリでは完全に機能しますが、クロムでは、ボタンの1つをクリックすると、その周りに迷惑な青い境界線が表示されます。私は思っbutton:active { outline: none }たりbutton:focus { outline:none }動作しますが、どちらも行いません。何か案は?

これは、クリックされる前の状態(およびクリックされた後も表示されるようにする方法)です。

そして、これは私が話している国境です:

ここに画像の説明を入力してください

ここに私の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;
}


なぜあなたのデモで機能するのかわかりませ。jsfiddle.net / NgL8H @davidpauljunior
eshellborn 2013

5
私はあなたが動かなかったと言ったフォーカスルールを下に追加しました、しかしそれはそうです: jsfiddle.net/NgL8H/1
davidpauljunior

21
アウトラインを完全に削除するべきではありません-障害のある人-キーボードが速いのでキーボードをよく使う人-ナビゲートする必要があります。アウトラインを好きなように再スタイルしたほうがいいでしょう。
クリスB

3
outline: noneアクセシビリティの損失を補う準備ができていない限り、このように設定しないでください。:このウェブサイトを参照してくださいoutlinenone.com
Flimm

回答:


1536

これは、サイトのアクセシビリティを低下させるため、お勧めできません。詳細については、この投稿を参照してください。

そうは言っても、主張すれば、このCSSは機能するはずです。

button:focus {outline:0;}

それをチェックするか、JSFiddle:http ://jsfiddle.net/u4pXu/

またはこのスニペットでは:

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
これは実際にあるべきではないoutline: none;でしょうか、それとも問題ではありませんか?
henrywright 2014

2
@henrywrightまあ、OPはそれを試してみましたが、彼のために機能しませんでした。
diosney

58
絶対にしないでください。あなたのマイナーな苦情は、これが大規模なアクセシビリティの問題になることとは無関係です
phazei

20
これを完全に隠すのではなく、間違いなくスタイルを変更する必要があります。この場合、button:focus{ outline-color: #A75000 }… などを試してください。インジケーターを非表示にする代わりに、スタイルに合う濃いオレンジに変更します。
cloudworks 2016年

3
OPの所定の状況を許可した@ SeanO'Brienは、5人のユーザーがいるすべての人がいるサイトの可能性があります。しかし、おそらくこれを賛成した1123人の大多数は、これが彼らの与えられた状況のために物事を行う正しい方法であると思いますが、実際にはそれは差別的ではありません。
アレクスローガー

296

待つ!その醜いアウトラインには理由があります!

醜い青い輪郭を削除する前に、アクセシビリティを考慮に入れることをお勧めします。デフォルトでは、その青いアウトラインはフォーカス可能な要素に配置されます。これは、アクセシビリティの問題のあるユーザーが、タブでそのボタンにフォーカスできるようにするためです。一部のユーザーは、マウスを使用するための運動能力がなく、キーボード(または他の入力デバイス)のみを使用してコンピューターと対話する必要があります。青いアウトラインを削除すると、フォーカスされている要素に関する視覚的なインジケーターがなくなります。青い輪郭を削除する場合は、ボタンがフォーカスされていることを示す別の種類の視覚的表示に置き換える必要があります。

可能な解決策:フォーカスされたときにボタンを暗くする

以下の例では、Chromeの青い輪郭は、 button:focus { outline:0 !important; }

以下は、通常表示される基本的なブートストラップボタンです。 通常の状態のブートストラップボタン

フォーカスを受け取ったときのボタンは次のとおりです。 フォーカス状態のブートストラップボタン

ボタンが押されたときのボタン: ここに画像の説明を入力してください

ご覧のとおり、ボタンがフォーカスされているときは、ボタンが少し暗くなっています。個人的には、ボタンのフォーカス状態と通常の状態の間に非常に顕著な違いがあるように、フォーカスボタンをさらに暗くすることをお勧めします。

障害のあるユーザーのためだけではありません

あなたのサイトをよりアクセシブルにすることは、しばしば見落とされがちですが、あなたのウェブサイトでより生産的な体験を生み出すのに役立ちます。キーボードを使用するためにキーボードコマンドを使用してWebサイトをナビゲートする多くの一般ユーザーがいます。


40
問題はChromeにあり、タブで移動するだけでなく、クリックしても発生します(ほとんどのブラウザーで見られる論理的な実装)。だから、実際にGoogleは、ほとんどの開発者は、単に(Chromeで)これをオフになりますよう、アクセシビリティ研究で無駄にもっと時間を短縮さ/グーグル/ Chromeに関連する問題の固定(パスワードの保存、電子メールのCSSサポートを、この)
実行ループの

3
その通り!アウトラインを削除する際に、アカウントにアクセスを取るためには、JavaScriptのビットを必要とする:paciellogroup.com/blog/2012/04/...
MEMS

答えを出すことができるような方法でコメントをスタイル/フォーマットすることさえできません。コメントだけでこのレベルの詳細でフィードバックを提供することは困難です。
A-Dubb

@RunLoopクリック後に青い境界線をどのように削除または変更しますか?CSS経由で実行できますか、それともJavaScriptが必要ですか?
Nick

これらの問題を抱えている人は、単にvimium-ffを使用できます
yukashima huksay

60

すべてを選択し、outline:noneをすべてに適用することで、ページ内のすべてのタグからアウトラインを削除します:)

*:focus {outline:none}

bagofcoleが述べたように、!importantも追加する必要がある場合があるため、スタイルは次のようになります。

*:focus {outline:none !important}

6
これを行わないでください。キーボードでページを移動するユーザーは、現在フォーカスされている要素を見ることができません。アウトラインを非表示にする代わりに、クリックイベントがマウスから発生した場合は要素をぼかします。
joepio 2017

基本的には確かに別のフォーカススタイルがあります...
Arziel

46

この問題の私のインスタンスでは、指定する必要がありました box-shadow: none

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

4
投稿ありがとうございます!私の場合、「ボックスシャドウ」プロパティがポイントでした。
ナイトキング2017年

1
これは私にとって同じ問題でした。それは関連性があるというわけではありませんが、私はUbuntu 17.10のChromeでルーツのセージのテーマを使用していました。
スペンサーヒル

1
これだけが機能したbox-shadow
sura2k

1
!私は追加することが重要に仕事にそれを得るために持っていた、おそらくブートストラップは、このどこかのための具体的な定義を持っている
webMan

1
これは私の仲間のために働きました!、解決策を投稿してくれてありがとう。歓声
theITvideos

44

!importantより良い結果を得るために、宣言を忘れないでください

button:focus {outline:0 !important;}

!importantプロパティを持つルールは、そのルールがCSSドキュメントのどこに出現しても、常に適用されます。


14
「より良い結果のために」?重要なことを説明していただけませんか?
Popnoodles 2014年

5
しかし、それが何をするか説明できますか?「それが存在する理由のために」は、その理由が何であるかをその理由を知らない人々に説明しません。
Popnoodles 2014年

48
!importantはめったに使用されるべきではなく、後続のルールによって何かが上書きされないようにするためだけに使用されます。以前のルールを上書きする場合は、正しいセレクターを使用してエレメントをターゲットにする必要があります。
Popnoodles 2014年

24
!importantの使用が正当化されることはほとんどありません。あなたは常により意味のある方法でCSSセレクターをスコープするべきです、そしてそれがあなたに「より良い結果」を与えるという理由だけで!
Ronen Cypis 2014

5
これを行わないでください。技術的にこれはOPの質問に答えますが、フォーカス位置のすべての表示を無効にすることはoutline:0 !importantUXと開発者の習慣が悪いです。これを行っている場合は、フォーカスの位置を示すために何かを行っていることを確認してください(要素の背景色の変更など)。
cloudworks 2016年

26

削除するoutlineとアクセシビリティにひどい!理想的には、フォーカスリングは、ユーザーがキーボードを使用する場合にのみ表示されます。

:focus-visibleを使用します。これは現在、CSSを使用してキーボードのみのフォーカスをスタイリングするW3Cの提案であり、Firefox(caniuse)でサポートされています。他の主要なブラウザでサポートされるまでは、この堅牢なポリフィルを使用できます。

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

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

さらに情報が必要な場合に備えて、詳細な投稿も作成しました。


1
断っておくが、私の知る限り、それはする必要はありませんoutline状態は、いくつかの他の手段、等を介して明確に可視化される焦点:限り、などborder, background-colorbox-shadowなど
MARÖrlygsson

2
ベストアンサー!あなたの投稿は読む価値があります(そして私は今、あなたのブログの残りの部分を見ていますlooking)focus-visible npmパッケージは、今のところ本当にあります。
FelDev

1
これは間違いなく最良の解決策です。ほんの数行のコードで、キーボードの使用を維持しながら、クリック時の迷惑な青い枠を取り除きました。ありがとう!
ペスタ

1
このデータは正しいですか?このセレクターは、FirefoxではなくChromeでサポートされているようです。developer.mozilla.org/en-US/docs/Web/CSS/...
ケビンSuttle

Firefoxではセレクターはと呼ばれ:-moz-focusringているようですが、ドキュメントの言うところとは異なり、クリックフォーカスとタブフォーカスは区別されません。Chromeでは、現時点で特定のフラグを有効にして有効にする必要があります
phil294

12

これをCSSファイルに追加します。

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

3
ありがとうございました。機能しましたが、MDNは次のように述べています。Webに面している本番サイトでは使用しないでください。すべてのユーザーに対して機能するわけではありません。また、実装間に大きな非互換性があり、動作が将来変更される可能性があります。
Behnam Mohammadi 2017

8

次のいずれかを使用します。

:active {
    outline:none;
}

または、これが機能しない場合:

:active {
   outline:none !important;
}

これは私には有効です(少なくともFFとChrome)。:focus状態をターゲットにするのではなく、単に:active状態をターゲットにします。これにより、ユーザーがリンクをクリックしたときに、ブラウザーの美的に目立たない強調表示が削除されます。しかし、障害を持つユーザーがページを移動したりタブをシフトしたりしても、フォーカス状態は保持されます。両方のパーティーは幸せです。:)


4
縮小版を同じコードで置き換えるだけで拡張する場合は、なぜ私の回答を編集するのですか?それはユーザーにとってそれを明確にするものではありませんでした。あなたはそれか何かの答えのクレジットを得ますか?笑...
2014年

3
このようなStackExchangeサイトのポイントは、それらを読んでいる人が理解するのに役立つ答えを持つことです。そのため、簡潔で縮小されたコードを使用した回答は、読みやすい形式のコードほど役に立ちません。読みやすくすることで回答を改善することは、誰にとってもサイトを改善するための通常の方法です。
bignose 2018年

7

この問題の場合:

ここに画像の説明を入力してください

これを使って:

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

結果:

ここに画像の説明を入力してください


7

Bootstrapを使用していてこの問題が発生している人は、:active:focusと:activeと:focusを使用しているため、次のものが必要です。

element:active:focus {
    outline: 0;
}

うまくいけば、誰かがそれを考え出すのを少しでも助けて、なぜそんな単純なことがうまくいかないのかと少し頭を悩ませました。


6

Bootstrap 4.1およびその他のバージョンを使用している場合、ほとんどのソリューションは機能しません。多くの頭を叩いた後、私はあなたがシャドウなしクラスを適用する必要があることを発見しました:

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


4

Chromeおよびその他のブラウザーの修正

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

3

青い枠の問題があるすべての要素に対してこのコードを試してください

*{
outline: none;
}

または

*{
outline-style: none;
}

3

ここではまだ触れられていないアクセシビリティの問題解決するもう1つの方法は、Javascriptを少し使用することです。クレジットはhackernoonからのこの洞察に満ちたブログ投稿に行きますhttps ://hackernoon.com/removing-that-ugly-focus-ring-and-keeping-it-too-6c8727fefcd2

ここでのアプローチは非常に単純ですが効果的です。人々がタブキーを使用してページをナビゲートし始めたときにクラスを追加します(必要に応じて、もう一度マウスに切り替えたときにクラスを削除します)。このクラスを使用して、フォーカスのアウトラインを表示するかどうかを指定できます。 。

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);


2

入力で同じ効果を削除したい場合は、次のコードとボタンを追加できます。

input:focus {outline:0;}

2

すべてのモダンブラウザがサポートCSSセレクタを開始するまでの:フォーカス可視
する最も簡単な、おそらく最良の方法は、アクセシビリティを保存するには、このトリッキーなフォーカスを削除することですマウスだけのユーザーのために、それを保存するために、キーボードのユーザーのために

1.この小さなポリフィル(約10kb)を使用:https : //github.com/WICG/focus-visible
2.次のコードをcssのどこかに追加します。

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

css4-selector:focus-visibleのブラウザーサポートは現在非常に弱い:https ://caniuse.com/#search=focus-visible



1

これはChromeファミリーの問題であり、永遠に存在しています。

バグが発生しましたhttps://bugs.chromium.org/p/chromium/issues/detail?id=904208

ここに表示できます:ボタンのようなものにボーダーを追加するとすぐにhttps://codepen.io/anon/pen/Jedvwj(たとえば、ロール= "ボタン"がタグに追加されたとすると)Chromeが台無しにマウスでクリックしたときにフォーカス状態を設定します。

この修正を使用することを強くお勧めします:https : //github.com/wicg/focus-visible

次のようにしてください

npm install --save focus-visible

スクリプトをHTMLに追加します。

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

または、webpackなどを使用している場合は、メインエントリファイルにインポートします。

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

次に、これをCSSファイルに入れます:

// 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;
}

次のように設定できます。

button:focus {outline:0;}

しかし、多数のユーザーがいる場合、マウスを使用できないユーザーや、速度を上げるためにキーボードだけを使用したいユーザーには不利です。


1

ブートストラップでも同じ問題がありました。アウトラインとボックスシャドウの両方で解決しました

.btn:focus, .btn.focus {
    outline: none !important;
    box-shadow: 0 0 0 0 rgba(0, 123, 255, 0) !important; // or none
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.