ikmnjrd.github.io

select要素をCSSでカスタマイズする際に気をつけるべきブラウザごとの差

Posted on 2023-04-19
目次

まずはこちらをご覧ください。毒々しいCSSが施されたselect要素です。 chrome-normal

上の画像のようなちょっと変わったデザインのselect要素を作った時、ChromeやOperaではfocus状態の時は次のようになります。
chrome-focus-default

毒々しくしたいのですがデフォルトの青い枠線が中途半端にかかり、邪魔になっています。 そんな時、borderとかなり似ているoutlineというプロパティを使います。

.poison-select:focus {
  outline: 1px solid #ff0;
  /* Chromeなどでのデフォルトの色味を設定したい場合は「-webkit-focus-ring-color」を設定する */
  /* outline: 1px solid -webkit-focus-ring-color; */
}

chrome-focus-custom

いい感じにすることができました。
safariでも見てみましょう。

safari-focus-without-offset

違和感がありますよね?
大きく2点で違いがあります。

  • safariではselect要素の内側にfocus時の枠線ができる
  • safariではoutline要素にradiusが効かない(※2023年3月27日リリースのSafari V16.4から解消)

主に1点目の「select要素の内側にfocus時の枠線ができる」時の対策にoutline-offsetを明示的に設定(0pxで)してあげます。

.poison-select:focus {
  outline: 1px solid #ff0;
  outline-offset: 0px;
}

すると綺麗になります。
safari-focus-without-offset

Reproduction

参考文献