質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Q&A

解決済

2回答

3330閲覧

buttonをクリックした時のoutlineを消したい

ironman

総合スコア20

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

0グッド

2クリップ

投稿2019/03/26 07:15

編集2019/03/27 02:48

疑問点

実現したいこと

  • buttonタグをクリックするときにoutlineが表示されますが、それを消したいです。

しかし、単にoutline:noneとするとキーボードで操作しているユーザがbuttonにアクセスできなくなると知りました。そこで、マウス操作ではoutlineを表示させずに、キーボードではアクセスできるようにする方法を教えていただきたいです。よろしくお願いいたします。

###該当するソースコード

HTML

1<!-- nav --> 2 <div class="nav-list"> 3 <nav> 4 <ul class="nav-ul"> 5<!-- list --> 6 <li class="nav-li"> 7 <div> 8 <button type="button" class="btn-cls" aria-haspopup="true", aria-expanded="false" aria-busy="false"> 9 <div class="li-box"> 10 <div class="li-outer"> 11 ホストをはじめる 12 </div> 13 </div> 14 </button> 15 <div> 16 </li> 17<!-- list --> 18 <li class="nav-li"> 19 <button type="button" class="btn-cls" aria-haspopup="true", aria-expanded="false" aria-busy="false"> 20 <div class="li-box"> 21 <div class="li-outer"> 22 ヘルプ 23 </div> 24 </div> 25 </button> 26 </li> 27 <li class="nav-li"> 28 <button type="button" class="btn-cls" aria-haspopup="true", aria-expanded="false" aria-busy="false"> 29 <div class="li-box"> 30 <div class="li-outer"> 31 登録する 32 </div> 33 </div> 34 </button> 35 </li> 36 <li class="nav-li"> 37 <button type="button" class="btn-cls" aria-haspopup="true", aria-expanded="false" aria-busy="false"> 38 <div class="li-box"> 39 <div class="li-outer"> 40 ログイン 41 </div> 42 </div> 43 </button> 44 </li> 45 </ul> 46 </nav> 47 </div>

CSS

1/* nav */ 2.nav-list { 3 display: table-cell; 4 vertical-align: middle; 5} 6.nav-ul { 7 display: table; 8 padding: 0; 9 margin: 0; 10 height: 64px; 11} 12.nav-li { 13 display: table-cell; 14} 15.btn-cls { 16 display: inline-block; 17 margin: 0; 18 padding: 0 8px; 19 positive: relative; 20 background: transparent; 21 border-width: initial; 22 border-style: none; 23 border-color: initial; 24 border-image: initial; 25 height: 80px; 26 line-height: 80px; 27 white-space: nowrap; 28} 29.li-box { 30 height: 100%; 31 vertical-align: middle; 32 border-bottom: 2px solid transparent; 33} 34.li-box:hover { 35 border-bottom: 2px solid #9F9EAA; 36} 37.li-outer { 38 display: inline-block; 39 vertical-align: middle; 40 line-height: 1; 41 padding: 8px; 42 border-bottom: 2px solid transparent; 43} 44

###問題が発生した環境

  • Bootstrap
  • HTML5
  • CSS

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/03/26 07:20

回答依頼をいただいておいて申し訳ないのですが、 この内容だとどのような要素に対してどうなっていてどう対応しようとしているか分かりません。 実際に試されたコードなど、質問本文に追記いただけますか?
ironman

2019/03/27 02:49

返信が遅れて申し訳ございません。ご指摘ありがとうございます。とりあえずソースコードを追加させていただきました。
guest

回答2

0

ベストアンサー

すでに解決済みとのことですが,

① outline:noneされていても,キーボード操作自体は可能
② :focus擬似クラスで効果を上書きしてはどうか

という2点について補足させてください.

outline:none されていても,キーボード操作自体は可能

outline:noneとするとキーボードで操作しているユーザがbuttonにアクセスできなくなる

という表現は正確ではありません

kei344さんの提示されていたリンク
【outline: noneをやめよう、focus-ringを使おう - yuhei blog】
における

フォーカス位置の手がかりを奪ってしまう

という部分が正確な表現です.

逆に言えば,手がかりを示す代替手段さえあれば,outline:noneをすることに問題はありません.

例えば,マウスや指をボタンの上に乗せたときに表示するアニメーション(いわゆる「ホバーアニメーション」)を,ボタン押下時にも適用する,という方法が挙げられます.

:focus擬似クラスで効果を上書きするのはどうか

:focusはBasic Selectorであり,一般的に利用可能です

Can I use ":focus"
を見ると,
:focus-visibleは,FirefoxとChromeにおいて,かろうじて利用可であり,
:focus-withinは,IEを除いた一般的なブラウザで利用可能となっていますが,
:focusは,最下段の「CSS 2.1 selectors」に含まれており,全てのブラウザで利用可能なので,安心してください.

Basic CSS selectors including: * (universal selector), > (child selector), :first-child, :link, :visited, :active, :hover, :focus, :lang(), + (adjacent sibling selector), [attr], [attr="val"], [attr~="val"], [attr|="bar"], .foo (class selector), #foo (id selector)

擬似クラスを利用した,CSS記述法の例です

css

1.btn{ 2 background: lightgray; 3 transition: background .5s; 4} 5 6.btn:hover, 7.btn:active, 8.btn:focus{ 9 outline: none; 10 background: palegreen; 11} 12.btn::-moz-focus-inner{ /*Firefox用*/ 13 border: none; 14}

liveweave上でのデモ

  • マウスホバー(SP向け兼用)
  • クリック時(SP向け兼用)
  • Tabキーによるフォーカス(PC向け専用)

をまとめて指定しています.

前述の通り,outline: noneはTabキーによるフォーカス位置の遷移そのものは阻害しませんので,当該要素にフォーカスがあたったときのアニメーションを任意のものに変更すれば良いだけです.

「邪魔なものは消す」ではなく
「邪魔なものは従わせる」といったところでしょうか(笑)

TL;DR

  • outline: noneしても良い
  • 代わりに,:focusでアニメーションを統合するのが簡単

投稿2019/04/03 08:01

編集2019/04/03 08:07
liveasnotes

総合スコア1284

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ironman

2019/04/04 03:57

丁寧なご返答ありがとうございます。わかりやすかったです。危うく理解を間違えるところでした(・_・;、本当に助かりました。こちらを参考にさせていただき、自分で試してみます。
guest

0

outline:none」で検索すると対策を書いた記事が見つかりますよ。

【outline: noneをやめよう、focus-ringを使おう - yuhei blog】
https://yuheiy.hatenablog.com/entry/2017/08/18/175321

【:focus-ringの代用としてwhat-inputを試す - yuhei blog】
https://yuheiy.hatenablog.com/entry/2017/08/28/185913

【もうoutlineを消さない。クリック・タップ・キーボードのイベントを判定してくれるJSライブラリ「what-input」 | Tips Note by TAM】
https://www.tam-tam.co.jp/tipsnote/html_css/post16551.html

投稿2019/03/26 07:43

kei344

総合スコア69407

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ironman

2019/03/27 02:35

kei344さんは実際にwhat-inputを使っていらっしゃいますか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問