29
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Chakra UI:ボタンなどデフォルトのブルーのアウトライン(フォーカスポイント)を消したい

Last updated at Posted at 2021-08-22

使用環境

・MacOS BigSur(11.5.2) ・VScode(1.59.1) ・Node.js (16.1.1) "@chakra-ui/icons": "^1.0.15", "@chakra-ui/react": "^1.6.6"

はじめに

最近、Next.js(React)を使ったプロジェクトでChakra UIを使用しています。
Chakra UIでは、クリック時にButtonコンポーネントやInputコンポーネントなど対象のコンポーネントで、デフォルトでブルーのアウトライン(フォーカスポイント)が入ってしまいます。こんなふうに。

スクリーンショット 2021-08-22 15.28.56.png

デザインの使用色やUIのバランスなどの観点から、ちょっと気持ち悪いなと感じたので、消す方法がないかリサーチをしました。
しかし、このことについて触れている記事は少なくとも自分が調べた限りはなかったので今回の記事を書きました。(もしありましたら教えていただけると幸いです🙇‍♂️)

結論/解決策

サクッと解決策からお伝えすると、2つ方法があります。

以下のstyle props
_focus={{ boxShadow: "none"}} もしくは _focus={{ _focus: "none"}}

①アウトラインを消したいコンポーネントのタグ内に記述すること

②Customize Themeとしてコンポーネント名でbaseStyleをグローバル適用する

①実装例)

<IconButton
	_focus={{ boxShadow: "none"}} //これを記述する
	aria-label="DarkMode Switch"
	icon={colorMode === 'light' ? <MoonIcon /> : <SunIcon />}
	onClick={toggleColorMode}
/>

②実装例)

export const bodyTheme = extendTheme({
	components: {
		Button: { baseStyle: { _focus: { boxShadow: 'none' } } } //これを記述し、Globalで適用
	}
})

個人的にはいちいちコンポーネントにこれを記載するよりもGlobal適用してしまえば済む②の方法がお勧めです。
※しかし②の方法はButtonコンポーネントには効きますが、IconButtonやInputやSelectは同じ方法では効きませんでした。。(①の方法は大丈夫です。)どなたかわかる方がいたら教えて欲しいです🙇‍♂️

最後に

調べていた際に、このChakra UIのGitHubレポジトリIssue#708に行きついて興味深い発見があったので紹介しておきます。

Chakra UIのDeveloper(@with-heartさん)の人いわく、そもそもこれは、キーボードだけで操作するユーザーのため(今どの場所にフォーカスしているか分かりやすくするため)に、デフォルトで導入しているそうです。

ただ、Blue outline borders around all clickable components ugly(笑)などというIssue名に上がっているように、気持ち悪いと思っている人は多いみたいです。

去年からみんなで色々試行錯誤してなんとか(Developerの方が頑なに拒否する中)、遠回りにデフォルトのこの設定を外す方法を模索していたみたいです。

ちなみに、focus-visible をライブラリパッケージとして導入する方法もあるみたいなので気になる方はみてみてください。
Accessibility on-demand with Chakra-ui and focus-visible

自分は公式ドキュメントのStyle Propsの記事の下〜の隅っこの方をたまたま見ていてこのやり方をみつけましたが(v1へのアップデートと同時に公式Docアップデートされた?)、ちょうど7日前に同じ解決策見つけてる人がいたのでこれで間違いないと思います。
スクリーンショット 2021-08-23 6.06.13.png

ただ、Developerさんの言うように、**"アウトラインを取り除くことはマウスユーザーなどユーザー体験を損ねる"**ということは念頭においておかないといけません。
なんでもかんでも気持ち悪いからって自分好みで消してしまうのは良くないことを学びました。
使い所を検討して導入していくことをお勧めします。

Developerさんがシェアしていた記事
Quick Tip: Never remove CSS

参考資料

29
11
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?