テキスト入力要素の境界線の強調表示を削除する方法


610

HTML要素が「フォーカス」されている(現在選択されている/タブで移動されている)場合、多くのブラウザー(少なくともSafariとChrome)はその周りに青い境界線を配置します。

私が取り組んでいるレイアウトの場合、これは注意をそらすものであり、正しく見えません。

<input type="text" name="user" class="middle" id="user" tabindex="1" />

Firefoxはこれを実行していないようです。少なくとも、次の方法で制御できます。

border: x;

誰かがIEのパフォーマンスを教えてくれるとしたら、私は興味があります。

Safariにこのわずかなフレアを除去させるといいでしょう。

回答:


1100

あなたの場合、試してみてください:

input.middle:focus {
    outline-width: 0;
}

または一般的に、すべての基本的なフォーム要素に影響を与えるには:

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

コメントで、Noah Whitmoreは、これをさらにcontenteditable設定して、属性が設定された要素をサポートすることを提案しましたtrue(事実上、それらを入力要素のタイプにしています)。以下もそれらをターゲットにする必要があります(CSS3対応ブラウザー)。

[contenteditable="true"]:focus {
    outline: none;
}

私はそれをお勧めしませんが、完全を期すために、これですべてのフォーカスアウトラインをいつでも無効にすることができます。

*:focus {
    outline: none;
}

フォーカスの概要はアクセシビリティとユーザビリティの機能であることを覚えておいてください。現在フォーカスされている要素にユーザーを導きます。


10
コーリー、ありがとう、ありがとう。また、CSSをtextareaに割り当てて、すべての入力フィールドをカバーする必要があります。input:focus, textarea:focus {outline: none;}
BaronGrivet 2011年

7
selectもお忘れなくselect:focus {outline:none;}
Geek Num 88

2
他にも、<button>jQuery UIやTwitter Bootstrapで使用されるタグもありますのでbutton: focus、完全を期すためにリストに追加します。
Chris Parton

1
私の経験では、これはフォーカスなしで発生する可能性があります。その場合、私はそれを適用しなければなりませんでしたbutton, button:focus { outline:none; }
Mike Lyons

1
@Cᴏʀʏa11yとユーザビリティに関するメモを質問の一番上に移動してもよろしいですか?IMOは、a11y機能を削除することは悪い習慣であるため、回答を大幅に改善します。
Josef Engelfrost 2017


31

これは古いスレッドですが、参考のために、入力要素のアウトラインを無効にすることはアクセシビリティを妨げるので推奨されないことに注意することが重要です。

アウトラインプロパティが存在する理由は、キーボードフォーカスの明確な表示をユーザーに提供するためです。この主題の詳細と追加情報については、http://outlinenone.com/を参照してください


1
Boaz、FYI input.middle {outline:none}でも、要素(input.middleを含む)をトラバースできます。タブキーを押すと、入力タグにもフォーカスが移動します。唯一のことは、それにフォーカス(アウトラインフォーカス)を表示できないことです。したがって、それを使用してもそれほど害はありません..:)
Anish Nair 2013年

11
@AnishNair- Only thing is that you won't be able to see the focus(outline focus) on itそれがまさに私のポイントです。アウトラインを削除すると、実際のイベントではなく、フォーカスイベントの視覚的表示が無効になります。視覚的表示を削除するということは、その表示に依存している障害を持つ人々にとって、それを難し​​くすることを意味します。
ボアズ-モニカを2013年

2
時々、何かを達成するために妥協する必要があります:)
Anish Nair

6
@AnishNair True。しかし、多くの場合、このスレッドを読む人々outline:none;は、影響を考慮せずに簡単な方法(つまり)を好むでしょう。何かが簡単で時間を節約できるからといって、それがベストプラクティスであることを意味するわけではありません:)
ボアズ-

5
私は議論に遅れましたが、入力のフォーカスされた状態をスタイルすることができます(境界線の色や幅の変更など)。それを行う際にアクセシビリティを念頭に置いている限り(優れたコントラストなど)、デフォルトのアウトラインと同じようにアクセシビリティがあります。
メグ

18

これはよくある問題です。

ブラウザがレンダリングするデフォルトのアウトラインは醜いです。

例えばこれを見てください:


最も推奨される最も一般的な「修正」は、outline:none誤って使用するとアクセシビリティが損なわれることです。


とにかく、アウトラインの用途は何ですか?

あります非常にドライカットのウェブサイトだけでなく、すべてを説明して私が見つけたの。

これは、TABキー(または同等のキー)を使用してWebドキュメントをナビゲートするときに「フォーカス」があるリンクに視覚的なフィードバックを提供します。これは、マウスを使用できないか、視覚に障害がある人に特に役立ちます。アウトラインを削除すると、これらの人々はサイトにアクセスできなくなります。

では、上記と同じ例を試してみましょうTAB。キーを使用して移動します。

入力をクリックしなくてもフォーカスがどこにあるかを確認する方法に注意してください。

今、outline:none私たちの信頼を試してみましょう<input>

したがって、もう一度、TABテキストをクリックした後にキーを使用して移動し、何が起こるかを確認します。

焦点がどこにあるのかを理解するのがいかに難しいかをご覧ください。唯一の兆候はカーソルの点滅です。上記の私の例は非常に単純化されています。実際の状況では、ページに要素が1つしかないわけではありません。これに沿ってさらに何か。

アウトラインを保持している場合は、同じテンプレートと比較してください。

したがって、以下を確立しました

  1. アウトラインが醜い
  2. それらを削除すると、生活がより困難になります。

だから答えは何ですか?

醜いアウトラインを削除し、フォーカスを示す独自の視覚的な手がかりを追加します。

これが私が意味することの非常に単純な例です。

アウトラインを削除し、:focus:activeに下枠を追加ます。また、:focusおよび:active(個人設定)で透明に設定することにより、上部、左側、右側のデフォルトの境界を削除します

したがって、前述の「実際の」例で上記のアプローチを試します。

マテリアライズのように完全に削除するのではなく、「アウトライン」を変更するという考えに基づいて構築された外部ライブラリを使用することで、これをさらに拡張できます。

あなたは醜くなく、ほとんど努力なしで機能するものになる可能性があります


18

これは、線が境界線でも輪郭線でもない、影であることに気づくまで、しばらく混乱していました。それを削除するには、これを使用する必要がありました:

input:focus, input.form-control:focus {

    outline:none !important;
    outline-width: 0 !important;
    box-shadow: none;
    -moz-box-shadow: none;
    -webkit-box-shadow: none;
}

6

CSSを使用して無効にできます!これは、青い枠線を無効にするために使用するコードです。

*:focus {
outline: none;
}

これは青い境界線を削除します!

これは実際の例です:JSfiddle.net

それが役に立てば幸い!


4

すべてのフォーカススタイルを削除することは、アクセシビリティとキーボードユーザーにとって一般的に悪いことです。しかし、アウトラインは見苦しく、すべてのインタラクティブな要素ごとにカスタムのフォーカススタイルを提供するのは大変なことです。

したがって、私が見つけた最良の妥協点は、ユーザーがキーボードを使用して移動していることを検出した場合にのみアウトラインスタイルを表示することです。基本的に、ユーザーがTabキーを押すとアウトラインが表示され、ユーザーがマウスを使用する場合は非表示になります。

一部の要素のカスタムフォーカススタイルを作成することを妨げるものではありませんが、少なくとも適切なデフォルトを提供します。

これが私のやり方です:

// detect keyboard users

const keyboardUserCssClass = "keyboardUser";

function setIsKeyboardUser(isKeyboard) {
  const { body } = document;
  if (isKeyboard) {
   body.classList.contains(keyboardUserCssClass) || body.classList.add(keyboardUserCssClass);
  } else {
   body.classList.remove(keyboardUserCssClass);
  }
}

// This is a quick hack to activate focus styles only when the user is
// navigating with TAB key. This is the best compromise we've found to
// keep nice design without sacrifying accessibility.
document.addEventListener("keydown", e => {
  if (e.key === "Tab") {
   setIsKeyboardUser(true);
  }
});
document.addEventListener("click", e => {
  // Pressing ENTER on buttons triggers a click event with coordinates to 0
  setIsKeyboardUser(!e.screenX && !e.screenY);
});

document.addEventListener("mousedown", e => {
  setIsKeyboardUser(false);
});
body:not(.keyboardUser) *:focus {
  outline: none;
}
<p>By default, you'll see no outline. But press TAB key and you'll see focussed element</p>
<button>This is a button</button>
<a href="#">This is anchor link</a>
<input type="checkbox" />
<textarea>textarea</textarea>
<select/>


これは徹底的なアプローチです。clickリスナーがいい感じです。
キースDC

4

私はすべての答えを試しましたが、それが見つかるまで、私はモバイルで作業することはできませんでした-webkit-tap-highlight-color

だから、私のために働いたのは...

* { -webkit-tap-highlight-color: transparent; }

1
それが私が探していた解決策です。これは、liのような要素を使用したタッチスクリーンエクスペリエンスである場合に特に便利です
Anand G

4

私と一緒に働いた唯一の解決策

input[type="text"]:focus{
     box-shadow: 0 0 0 rgb(255, 255, 255);
}

 input[type="checkbox"]:focus{
      box-shadow: 0 0 0 rgb(255, 255, 255);
 }


2

Firefoxでは、どのソリューションも機能しませんでした。

次のソリューションは、Firefoxのフォーカスのボーダースタイルを変更し、他のブラウザーのアウトラインをnoneに設定します。

フォーカスの境界線を3pxの青い輝きからテキスト領域の境界線に一致する境界線スタイルに効果的にしました。ここにいくつかのボーダースタイルがあります:

破線のボーダー(ボーダー2px赤の破線): 破線のボーダー。 境界線2px赤色の破線

国境がない!(ボーダー0px):
国境がない。 border:0px

テキストエリアの境界線(境界線1px灰色): Textareaボーダー。 境界線1px灰色

これがコードです:

input:focus, textarea:focus {
    outline: none; /** For Safari, etc **/
    border:1px solid gray; /** For Firefox **/
}

#textarea  {
  position:absolute;
  top:10px;
  left:10px;
  right:10px;
  width:calc(100% - 20px);
  height:160px;
  display:inline-block;
  margin-top:-0.2em;
}
<textarea id="textarea">yo</textarea>



1

次のコマンドを使用して、テキスト/入力ボックスの周りのオレンジ色または青色の境界線(アウトライン)を削除できます

input {
    background-color: transparent;
    border: 0px solid;
    height: 20px;
    width: 160px;
    color: #CCC;
    outline:none !important;
}

0

以下のCSSプロパティを使用して、要素にフォーカスがあるときにアウトラインを削除します。

input:focus {
    outline: 0;
}

このCSSプロパティは、フォーカスのあるすべての入力フィールドのアウトラインを削除するか、疑似クラスを使用して、以下のCSSプロパティを使用して要素のアウトラインを削除します。

.className input:focus {
    outline: 0;
} 

このプロパティは、選択した要素のアウトラインを削除します。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.