首页 > web前端 > 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 的广泛研究,我终于找到了解决方案。

一个常见的 Stack Overflow 建议是使用 -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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板