2016-09-06 2 views
0

デフォルトのボタンはクリック時にアウトラインスタイルを表示しませんが、カスタムボタンはクリック時にアウトラインスタイルを表示するのはなぜですか?デフォルトのボタンはクリック時にアウトラインスタイルを表示しません

クリック時にカスタムボタンからアウトラインスタイルを削除するにはどうすればよいですか?ユーザーがキーボードを使用して移動するときにアウトラインスタイルを維持します(デフォルトボタンと同じ動作)。

.btn { 
 
    display: inline-block; 
 
    padding: 12px; 
 
    background: cyan; 
 
    border: none; 
 
}
<div> 
 
    <button type="button">Why no outline styles on click?</button> 
 
</div> 
 
<div style="margin-top: 24px"> 
 
    <button class="btn">Why outline styles on click?</button> 
 
</div>

UPDATE:アクセシビリティの理由でなし:私はアウトラインを使用することはできません。参照してください:http://www.outlinenone.com/

+0

これはJSで 'blur 'を使って修正できます。私は、ユーザーエージェントがブラウザイベントに応答していることを推測しており、カスタムスタイルの要素(少なくとも特定のプロパティの場合)ではなく、デフォルトのスタイル付き要素のフォーカスを削除しています。 – hungerstar

答えて

2

アクセシビリティが懸念される場合は、なぜアウトラインを削除したいのですか?アウトラインを削除するには、アクセシビリティのためには完全にOKですが、別のスタイルを追加してください:background-colorcolorまたはborderなどです。

+0

これの例:SOのスニペットでは、 "run code snippet"と "copy snippet to answer"ボタンと "hide hide"リンクは ':focus'に':hover'スタイルを与えます。そのスタイルの変更が十分にわかっているかどうかを知るためにWCAGについて十分に知りません(そして、 "expand snippet"リンクはタブで選択できませんが)とにかくそれは一つのイラストです – henry

0

あなたはしばらくは、一部のブラウザには、次のデフォルトを設定

:focus { 
    outline: -webkit-focus-ring-color auto 5px; 
} 

とする必要:focus {outline: none;}

.btn { 
 
    display: inline-block; 
 
    padding: 12px; 
 
    background: cyan; 
 
    border: none; 
 
} 
 
.btn:focus { 
 
    outline: none; 
 
}
<div> 
 
    <button type="button">Why no outline styles on click?</button> 
 
</div> 
 
<div style="margin-top: 24px"> 
 
    <button class="btn">Why outline styles on click?</button> 
 
</div>

+0

アクセシビリティ上の理由でアウトラインなしを使用しないでください – takeradi

0

を使用して焦点を当て、ボタンのoutline属性を設定することができます乗り越える:

.btn:focus { 
    outline: none; 
} 
+0

cant使用概要:アクセシビリティ上の理由なし – takeradi

+0

あなたのCSSにアクセスできませんか? – Okomikeruko

+0

@Okomikerukoアウトラインを削除するのは、アクセシビリティ上の理由から悪い習慣です。一部のユーザーはマウスを使用できず、キーボードのみを使用できます。アウトラインを使用すると、どの要素にフォーカスがあるかを知ることができ、アクションを実行できます。アウトラインがなければ、これらのユーザーは、タブをクリックして_Enter_を押したときに何が起こるかを推測しています。 – hungerstar

0

あなたは含めることにより、アウトラインを削除することができます。

.btn{ 
    outline: none; 
} 

あなたが知っている必要がありますもう一つは、次のとおりです。 あなたがEXを使用した場合。 .btn:activeアクティブは、ボタンをクリックするような行動を意味します。

あなたがしなければならないことは、デフォルトでアウトラインを含めて、それをアクションやフォーカスで削除するだけです。

+0

cant use outline:アクセシビリティ上の理由なし。 – takeradi

0

私はあなたが接近によって何を意味するのかわかりませんが、あなたは、あなたが

button:focus {outline:0;} 

fiddle here

を使用する必要がアウトラインを削除するワン場合、私は差別化する方法があるとは思いません、focusボタンをキーボード入力またはマウスクリックすると、いずれもボタンのfocusイベントが発生します。

+0

フォーカスはカスタムボタンに留まりますが、デフォルトのスタイル付きボタンには残りません。 OPはそれを修正したい。カスタムボタンにタブ移動すると、ソリューションによってフォーカスが削除されます。 – hungerstar

+0

"Webアクセシビリティとは、障害を持つ人々がWebを使用できるということです。具体的には、障害者はWebを認識し、理解し、ナビゲートし、対話し、Webに貢献することができます。高齢者のために能力が変化する高齢者を含むその他の人々詳細はhttps://www.w3.org/WAI/intro/accessibility.php一般的に重要な問題であり、より多くの開発者の一部になるためには、大規模な機関がウェブアクセシビリティポリシーを追加するにつれて生きていくことになります。 – henry

1

クリックしたときに表示されるfocusと、キーを押すときに表示されるfocusを区別するには、javascriptを使用する必要があります。

への回答にそこに良いオプションの束をチェックアウト - あなたは、あなたがこのページにJSを追加することができるしていると仮定するとあなたのために働くものを見つけるでしょう。

+0

しかし、ウェブからのアクセシビリティはキーボードでナビゲートされます。このページにアクセスできるようにするには、 ':focus'を*何らかの方法で表示する必要があります(@ wim-mertenの答えを参照)。ウェブアクセシビリティポリシーの下で作業している場合は注意してください: ':focus'を表示しないとポリシー違反になる可能性があります – henry

2

Taken and edここでは、前の質問からited:

Why pseudo element :focus on button when using TAB but not click?

あなたはこれがクリックされていない、ユーザーはタブ付きました輪郭のみが表示されますJS

var submit = document.getElementById("submit"); 
 

 
var tabbing = false; 
 

 
window.onkeyup = function (e) { 
 
    if (e.keyCode == 9) { 
 
     tabbing = true; 
 
    } 
 
} 
 

 
submit.onfocus = function (e) { 
 
    if (tabbing) { 
 
     this.classList.add("tabbed"); 
 
    } 
 
}; 
 

 
submit.onblur = function() { 
 
    this.classList.remove("tabbed"); 
 
    tabbing = false; 
 
};
#submit.tabbed:focus { 
 
    outline: 2px solid green; 
 
} 
 

 
#submit{ 
 
    display: inline-block; 
 
    padding: 12px; 
 
    background: cyan; 
 
    border: none; 
 
    } 
 

 
#submit:focus{ 
 
    outline: none; 
 
    }
<label>Name:</label> 
 
<input type="text" /> 
 
<br> 
 
<label>Pass:</label> 
 
<input type="password" /> 
 
<br> 
 
<label>Save Password:</label> 
 
<input type="checkbox" /> 
 
<br> 
 
<br> 
 
<button id="submit">Submit</button>

経由でこれを行うことができますボタン。

関連する問題