Maison > interface Web > tutoriel CSS > Comment réparer les sélections brillantes dans Webkit (Safari)

Comment réparer les sélections brillantes dans Webkit (Safari)

Barbara Streisand
Libérer: 2025-01-12 18:09:42
original
364 Les gens l'ont consulté

Problèmes de compatibilité entre navigateurs : style des éléments HTML <select> dans Safari

Maintenir un comportement cohérent des applications sur différents moteurs de navigateur peut être un défi. Récemment, lors du développement de devpad (un projet dans lequel j'ai intentionnellement évité les frameworks d'interface utilisateur et m'étais fortement appuyé sur des éléments HTML de base), j'ai rencontré un problème particulier avec l'élément <select> dans Safari.

Au départ, le développement s'est déroulé sans problème à l'aide d'Arc (un navigateur basé sur Chromium). Cependant, les tests dans Safari ont révélé une différence visuelle inattendue :

How to fix glossy selects in webkit (Safari)

Cette image montre la différence choquante entre l'élément <select> rendu dans Chromium et Safari :

How to fix glossy selects in webkit (Safari)

Le rendu Safari présentait une apparence obsolète et brillante, contrairement à l'aspect épuré de Chromium. Après des recherches approfondies sur Stack Overflow et ChatGPT, j'ai finalement trouvé une solution.

Une suggestion courante de Stack Overflow consiste à utiliser -webkit-appearance: none;. Cependant, cela supprime l'indicateur de flèche déroulante, ce qui a un impact sur l'expérience utilisateur.

Une approche plus prometteuse, mentionnée par la suite, consistait à utiliser une image d'arrière-plan SVG. Cela s'est avéré délicat lors de l'application également d'une couleur de fond.

En utilisant les icônes Lucide.dev, j'ai incorporé une flèche SVG. Cependant, au départ, les changements de couleur dynamiques via des variables CSS échouaient. Une requête @media au sein de l'élément select s'est également révélée inefficace :

<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>
Copier après la connexion

La solution, grâce à ChatGPT, impliquait d'encoder en URL la chaîne SVG :

<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>
Copier après la connexion

Le résultat final : des éléments <select> cohérents et compatibles avec tous les navigateurs avec prise en charge des modes sombre/clair.

How to fix glossy selects in webkit (Safari)

Cette solution devrait permettre aux autres de gagner du temps et des efforts pour relever ce défi de style commun à tous les navigateurs. Pour plus de détails sur le projet devpad, veuillez vous référer à mon dernier article de blog.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal