フォーカスカラー
前ページで採り上げましたが、Chromeのフォーカス枠やフォーム要素のデザインが刷新されました。 身近なところでは、アメブロの「いいね」ボタンが一番目立ちますが「コメント」ボタンも、フォーカスが当たると「黒枠」が表示されます。
パーツのデザインで、フォーカス枠の指定をブラウザのデフォルトから変更している場所では「黒枠」は表示されません。 そのため、ブログページ上ではこれ位の様ですが、他の管理ページなどでは、時々「黒枠」が顔を出します。
このフォーカス枠(フォーカスリング)について、少し調べて見ました。 ここでは、「いいね」ボタンを例にしていますが、他の場所でも適用できる内容と思います。
「フォーカスリング」は特別な描画
以下が問題の「黒枠」です。
「黒枠」を表示するコードを探すと、「いいね」ボタンに関連するCSSを調べても、この「黒」を指定する色コードはどこにも出て来ません。 どうやら、これは隠してあるらしく、以下のコードだけで「フォーカス枠」が指定されている様です。
この指定は「user agent stylesheet」と表示されています。 この指定をCCSでオーバーライドするために、最初に以下の「outline」の一般的な指定をしてみました。
これで「黒枠」ではなくなったのですが、何か違います。 拡大してみると、ボタンの外側に枠線が描画されているのと、角の丸みがありません。
「outline」の描画は「border-radius」の様な角を丸めたデザインには出来ません。しかし「-webkit-focus-ring」の指定は「outline」のプロパティなのに角が丸く、特殊な描画機能が働いています。
こちらで描いた「outline」は負の「outline-offset」指定で、内側に描画できます。
角の丸みが必要なければ、これでOKですね。 枠線の色は好みのカラーコードを指定できます。
「focus-ring」を生かす 「outline-color」
上の指定は「focus-ring」の機能を封じて、別個に「outline」を指定したことになります。 しかし「outline-color」の指定をすれば、「focus-ring」の特殊な描画を維持しながら「線色」だけ変更ができました。
ちゃんと角が丸まっています。 角の丸いフォーカス枠が必要で、簡単にすませたい時は「outline-color」を指定する手が使えそうです。
色々と試しましたが、「focus-ring」の特性を維持する指定は「outline-color」以外になく、他のプロパティを指定すると、みんな普通の「outline」の描画に変ります。
「focus-ring」のコードは意図的に「outline-color」の指定だけ変更できる様にしているのかも知れません。
「:focus」だけの指定は注意が要ります
「いいね」ボタンは「button」要素ですが、新しいフォーカス枠線は「input」や「textarea」等には、少し違う指定になっている様です。 以下はその「user agent stylesheet」の指定を拾ったものです。
これから考えると、他の要素のアレンジにはコードの調整が必要かも知れません。 このページの説明は「:focus {}」のセレクタ表記を使っていますが、これはページ上のすべての要素のフォーカス時に適用され、そのまま実際に指定すると、他の要素に不適当な場合が考えられます。
つまり、新しいフォーカス枠のアレンジコードには、「input[type="text"]:focus」といった、対象要素ごとの厳密なセレクタ指定の考慮が必要と思います。 本気になって「黒枠」対策をすると、けっこう大変かも知れません。