ホームページ > ウェブフロントエンド > CSSチュートリアル > Webkit (Safari) で光沢のある選択を修正する方法

Webkit (Safari) で光沢のある選択を修正する方法

Barbara Streisand
リリース: 2025-01-12 18:09:42
オリジナル
369 人が閲覧しました

ブラウザ間の互換性の問題: Safari での HTML <select> 要素のスタイル設定

異なるブラウザ エンジン間でアプリケーションの一貫した動作を維持することは困難な場合があります。 最近、devpad (意図的に UI フレームワークを避け、ベース HTML 要素に大きく依存したプロジェクト) を開発しているときに、Safari の <select> 要素に関する特有の問題に遭遇しました。

当初、開発は Arc (Chromium ベースのブラウザ) を使用して順調に進みました。 ただし、Safari でテストしたところ、予期しない視覚的な矛盾が明らかになりました。

How to fix glossy selects in webkit (Safari)

この画像は、Chromium と Safari でレンダリングされた <select> 要素の驚くべき違いを示しています。

How to fix glossy selects in webkit (Safari)

Safari のレンダリングは、Chromium のきれいな外観とは異なり、時代遅れで光沢のある外観を示しました。 Stack Overflow と ChatGPT にわたって広範な調査を行った結果、ついに解決策を見つけました。

スタック オーバーフローの一般的な提案は、-webkit-appearance: none; を使用することです。 ただし、これによりドロップダウン矢印インジケーターが削除され、ユーザー エクスペリエンスに影響します。

後で説明する、より有望なアプローチには、SVG 背景画像の使用が含まれます。 背景色も適用する場合、これは難しいことがわかりました。

Lucide.dev アイコンを利用して、SVG 矢印を組み込みました。 ただし、最初は CSS 変数による動的な色の変更は失敗しました。 @media 要素内の select クエリも効果がないことが判明しました:

<code class="language-css">select {
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  background: url('data:image/svg+xml;utf8,<svg fill="none" height="24" stroke="black" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M6 9 12 15 18 9"></path></svg>') no-repeat;
  /* ...rest of the CSS... */
}</code>
ログイン後にコピー

ChatGPT のおかげで、この解決策には SVG 文字列の URL エンコードが含まれていました。

<code class="language-css">select {
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
  background: url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%2224%22%20height=%2224%22%20viewBox=%220%200%2024%2024%22%20fill=%22none%22%20stroke=%22black%22%20stroke-width=%222%22%20stroke-linecap=%22round%22%20stroke-linejoin=%22round%22%3E%3Cpath%20d=%22M6%209%2012%2015%2018%209%22/%3E%3C/svg%3E') no-repeat;
  background-size: 18px;
  background-position: calc(100% - 3px) 50%;
  background-repeat: no-repeat;
  background-color: var(--input-background);
  padding-right: 24px;
}

@media (prefers-color-scheme: dark) {
  select {
    background-image: url('data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%2224%22%20height=%2224%22%20viewBox=%220%200%2024%2024%22%20fill=%22none%22%20stroke=%22white%22%20stroke-width=%222%22%20stroke-linecap=%22round%22%20stroke-linejoin=%22round%22%3E%3Cpath%20d=%22M6%209%2012%2015%2018%209%22/%3E%3C/svg%3E') !important;
  }
}</code>
ログイン後にコピー

最終結果: ダーク/ライト モードをサポートする一貫したブラウザ間互換性のある <select> 要素。

How to fix glossy selects in webkit (Safari)

このソリューションは、この一般的なクロスブラウザーのスタイル設定の課題に取り組む他の人の時間と労力を節約するはずです。 devpad プロジェクトの詳細については、私の最新のブログ投稿を参照してください。

以上がWebkit (Safari) で光沢のある選択を修正する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート