Heim > Web-Frontend > CSS-Tutorial > So beheben Sie glänzende Auswahlen im Webkit (Safari)

So beheben Sie glänzende Auswahlen im Webkit (Safari)

Barbara Streisand
Freigeben: 2025-01-12 18:09:42
Original
364 Leute haben es durchsucht

Probleme mit der browserübergreifenden Kompatibilität: HTML-Elemente <select> in Safari gestalten

Die Aufrechterhaltung eines konsistenten Anwendungsverhaltens über verschiedene Browser-Engines hinweg kann eine Herausforderung sein. Vor Kurzem stieß ich bei der Entwicklung von devpad – einem Projekt, bei dem ich absichtlich auf UI-Frameworks verzichtete und mich stark auf Basis-HTML-Elemente verließ – auf ein eigenartiges Problem mit dem <select>-Element in Safari.

Anfangs verlief die Entwicklung mit Arc (einem Chromium-basierten Browser) reibungslos. Tests in Safari ergaben jedoch eine unerwartete visuelle Diskrepanz:

How to fix glossy selects in webkit (Safari)

Dieses Bild zeigt den eklatanten Unterschied zwischen dem gerenderten <select>-Element in Chromium und Safari:

How to fix glossy selects in webkit (Safari)

Das Safari-Rendering zeigte im Gegensatz zum sauberen Aussehen in Chromium ein veraltetes, glänzendes Erscheinungsbild. Nach umfangreichen Recherchen zu Stack Overflow und ChatGPT habe ich endlich eine Lösung gefunden.

Ein häufiger Vorschlag für einen Stapelüberlauf ist die Verwendung von -webkit-appearance: none;. Dadurch wird jedoch die Dropdown-Pfeilanzeige entfernt, was sich auf die Benutzererfahrung auswirkt.

Ein vielversprechenderer Ansatz, der später erwähnt wird, beinhaltete die Verwendung eines SVG-Hintergrundbilds. Dies erwies sich als schwierig, wenn auch eine Hintergrundfarbe angewendet wurde.

Ich habe die Lucide.dev-Symbole genutzt und einen SVG-Pfeil integriert. Dynamische Farbänderungen über CSS-Variablen scheiterten jedoch zunächst. Eine @media-Abfrage innerhalb des select-Elements erwies sich ebenfalls als wirkungslos:

<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>
Nach dem Login kopieren

Die Lösung umfasste dank ChatGPT die URL-Codierung der SVG-Zeichenfolge:

<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>
Nach dem Login kopieren

Das Endergebnis: konsistente, browserübergreifend kompatible <select> Elemente mit Unterstützung für den Dunkel-/Hellmodus.

How to fix glossy selects in webkit (Safari)

Diese Lösung sollte anderen Zeit und Mühe bei der Bewältigung dieser häufigen browserübergreifenden Styling-Herausforderung ersparen. Weitere Details zum Devpad-Projekt finden Sie in meinem neuesten Blog-Beitrag.

Das obige ist der detaillierte Inhalt vonSo beheben Sie glänzende Auswahlen im Webkit (Safari). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage