CSSの疑似クラス「:focus-within」が素晴らしい理由
Post on:2020年11月17日
CSSの疑似クラス「:focus-within」を使用して、フォームの入力時にハイライト表示させるテクニックを紹介します。
:focus-withinは適用した要素の子孫要素にフォーカスに当たった時に起動するセレクタで、効果的に使用すると非常に便利です。
Why CSS :focus-within is amazing
by Chris Bongers
下記は各ポイントを意訳したものです。
※当ブログでの翻訳記事は、元サイト様にライセンスを得て翻訳しています。
はじめに
ここでお話するのは、フォーカスされた要素にスタイルする:focusセレクタのことではありません。:focus-withinは、その中の子孫要素(どれでも)にフォーカスが当たった時に起動するセレクタです。
:focus-withinを使用して、フォームにフォーカスを当てるとどうなるでしょう?
:focus-withinを適用
formタグに:focus-withinを使用すると、フォームの中のすべての要素にフォーカスが当たると起動します。
このデモの実装で:focus-withinを解説します。
HTMLの構造
HTMLはシンプルで、formタグ内に2つのinput要素があるフォームです。
1 2 3 4 5 6 7 |
<form> <label for="username">Username</label> <input type="text" name="username"> <label for="password">Password</label> <input type="password" name="username"> </form> |
デモに必要なのはこれだけです。
CSSの疑似クラス「:focus-within」
:focus-withinは、:beforeや:afterと同じ疑似セレクタです。
まず、フォームに基本的なスタイルを与えます。
1 2 3 4 5 6 7 8 9 10 |
body { display: flex; min-height: 100vh; justify-content: center; align-items: center; } form { border: 1px dashed #333; padding: 25px; } |
これでフォームがページの中央に配置され、エフェクトに使用するボーダーが表示されます。
参考: テキストや画像を上下左右の中央寄せに配置、最近主流になっている実装方法
フォームの入力時にユーザーの注意を引き付けるため、ユーザーが入力欄にフォーカスした時にフォームを少し目立つカラーに変更します。
1 2 3 4 5 6 7 8 |
form { border: 1px dashed #333; padding: 25px; transition: background 0.3s ease; } form:focus-within { background: #f4d35e; } |
form:focus-withinを使用すると、formの子孫要素(ここでは入力欄の2つ)にフォーカスがあたるとフォームの背景がイエローに変わります。
実際の動作は、Codepenでご覧ください。
See the Pen
Why CSS :focus-within is amazing by Chris Bongers (@rebelchris)
on CodePen.
:focus-withinの効果をより素晴らしいものにする
box-shadowのテクニックを使用して、モーダルエフェクトを加えることで、より素晴らしいものにすることができます。
1 2 3 4 5 6 7 8 9 10 |
form { border: 1px dashed #333; padding: 25px; transition: all 0.3s ease; box-shadow: 0 0 0 100vmax rgba(0, 0, 0, 0); } form:focus-within { background: #f4d35e; box-shadow: 0 0 0 100vmax rgba(0, 0, 0, 0.7); } |
ビューポートの最大位置(幅または高さ)の100%であるbox-shadowを作成します。初期状態では、不透明度を0にしています。
:focus-withinの方のbox-shadowの不透明度は0.7の70%です。
これで、ライトボックスのようなエフェクトが完成です✨
See the Pen
Why CSS :focus-within is amazing ~ Modal Effect by Chris Bongers (@rebelchris)
on CodePen.
:focus-withinのサポートブラウザ
IEはすでにお亡くなりになっていると考えると、:focus-withinのサポート状況はかなり良いと言えます。主要なすべてのブラウザでサポートされています。
ここまで読んでいただき、ありがとうございます。
もし気に入ったならば、私のFacebookまたはTwitterをフォローしてください。
sponsors