如何修复 webkit (Safari) 中的光泽选择

确保您的应用在所有浏览器引擎上都能完美运行并非易事。最近,我在devpad项目中遇到了safari浏览器的一个棘手问题。该项目我刻意避免使用任何ui框架或库,尽可能依赖基本的html元素。问题就出在一个看似普通的html元素——元素,它在safari中表现异常。

如何修复 webkit (Safari) 中的光泽选择

对比一下,在基于Chromium的浏览器Arc中,相同的元素显示正常:

如何修复 webkit (Safari) 中的光泽选择

为什么Safari中的元素会呈现这种过时的、类似于2008年早期iOS的样式?其他浏览器显示正常,这究竟是怎么回事?一番搜索和尝试后,我终于找到了解决方案,但过程颇为曲折。

Stack Overflow上一个最佳答案建议使用以下CSS代码:

select {    -webkit-appearance: none;}

登录后复制

但这会移除下拉箭头图标,影响用户体验,并非理想方案。

另一个答案提示使用SVG作为背景图片,但如果元素本身已经设置了背景颜色,则操作起来较为复杂。

我使用了Lucide.dev图标库,复制SVG代码并尝试应用,需要修改的是SVG的描边颜色。然而,我发现更改配色方案无法改变SVG颜色,而且CSS变量不能直接用于background-image属性。于是我尝试使用@media语句:

select {  -webkit-appearance: none;  -moz-appearance: none;  appearance: none;  background: url('data:image/svg+xml;utf8,') 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;utf8,') no-repeat !important;  }}

登录后复制

我以为这样就能解决问题,但切换到深色模式后,箭头仍然是黑色。检查元素显示样式已应用,但出现“无效属性值”错误,尽管字符串本身没有问题(颜色错误除外)。唯一的区别是stroke=”white”代替了stroke=”black”。

如何修复 webkit (Safari) 中的光泽选择

这时,ChatGPT派上了用场。它巧妙地解决了这个问题:对SVG字符串进行URL编码。最终的(可运行的)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;  }}

登录后复制

希望这篇文章能帮助遇到同样问题的开发者,节省大家的时间。

最终效果:完美的跨浏览器元素,支持深色/浅色模式:

如何修复 webkit (Safari) 中的光泽选择

如果您对DevPad项目感兴趣,请查看我的最新博客文章

以上就是如何修复 webkit (Safari) 中的光泽选择的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2845301.html

(0)
上一篇 2025年3月10日 12:34:31
下一篇 2025年2月22日 23:53:16

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 响应式应用程序:Windows 上 Web 开发人员的终极工具

    Windows Web 开发利器:响应式应用程序 在动态的 Web 开发领域,构建在各种设备上都能完美呈现的响应式网站至关重要。响应式应用程序 (Responsively App) 是一款功能强大的开源工具,旨在简化 Web 开发人员和设计…

    2025年3月10日
    200
  • 解锁居中 Div 内的秘密宝石

    初入Web开发领域,您或许已感受到CSS的挑战性。CSS(层叠样式表)是网页样式设计的基石,但若缺乏用户体验原则或配色方案的知识,则易感困惑。幸运的是,众多工具和资源能简化这一过程。经过无数次的深夜设计磨练,我发现了一些宝贵的技巧,愿与大家…

    2025年3月10日
    200
  • 你可能不知道的有用 CSS 选择器

    CSS选择器是网页样式设计的基石,它们赋予开发者精确控制页面元素样式的能力。虽然许多开发者熟悉常用的选择器,但一些鲜为人知的选择器却能显著提升效率和代码优雅性。 CSS选择器详解 CSS选择器是用于在HTML文档中选取特定元素的模式,它们根…

    2025年3月10日
    200
  • 掌握 CSS Flexbox:实用技巧指南

    Flexbox,即弹性盒布局模型,是 CSS3 中一项强大的布局工具,能创建灵活高效的网页布局,是提升网页设计技能的关键。本指南将深入浅出地讲解 Flexbox 的使用方法及实用技巧,助您成为 Web 开发高手。 理解弹性盒布局 Flexb…

    2025年3月10日
    200
  • 使用 React 的 useBreakpoints Hook 征服断点

    在构建现代 web 应用程序时,拥有在所有屏幕尺寸上都能顺利运行的响应式设计不仅是一件好事,而且是必须的。实现这一目标的一个好方法是以不同的方式处理移动和桌面视图。这就是 usebreakpoints 挂钩的用武之地!它是开发人员跨设备创建…

    2025年3月10日
    200
  • 轻松网页设计必须了解的 Tailwind CSS 类

    Tailwind CSS 入门:10 个必备类 tailwind css 是一款实用优先的 css 框架,允许开发者直接在 html 中构建自定义设计。对于 tailwind 新手来说,其庞大的类库可能会让人无所适从。 本文总结了 10 个…

    2025年3月10日
    200
  • 使用 useBreakpoints 简化 React 中的响应式设计

    构建现代化Web应用时,响应式设计至关重要,它确保应用在所有屏幕尺寸上都能流畅运行。 一个高效的实现方法是区分处理移动端和桌面端视图,而usebreakpoints钩子正是为此而生的便捷工具,帮助开发者轻松创建跨设备友好的用户体验。 use…

    2025年3月10日
    200
  • 如何在 Elementor 中添加动画渐变文本?

    让您的网站标题更具吸引力!本文将指导您如何使用elementor和自定义css创建令人惊艳的动画渐变文本效果。这种时尚现代的设计技巧,能轻松提升网站的视觉冲击力。 注意:此方法需要Elementor及支持自定义CSS的插件(例如Master…

    2025年3月10日
    200
  • JavaScript-文档对象模型(DOM)

    dom(文档对象模型)是web文档的编程接口,它将html或xml文档的结构表示为对象树。借助dom,开发者可以使用javascript与网页交互并操作网页内容。html dom允许javascript更改html元素的内容、属性和样式。 …

    2025年3月10日
    200
  • HTML,CSS和JavaScript基础知识的最终初学者指南

    web 开发入门:html、css 和 javascript 的协同作用 对于 Web 开发新手来说,掌握 HTML、CSS 和 JavaScript 是构建美观实用网站的关键第一步。这三者构成了 Web 的基石,赋能开发者从简单网页到复杂…

    2025年3月10日 编程技术
    200

发表回复

登录后才能评论