如何修复 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语句:

青泥AI 青泥AI

青泥学术AI写作辅助平台

青泥AI 302 查看详情 青泥AI

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) 中的光泽选择的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Linux系统如何加固Nginx_Linux加固Nginx服务器的详细步骤
上一篇 2025年12月2日 19:58:06
腾讯电脑管家安装超级蚊霸教程
下一篇 2025年12月2日 19:58:08

相关推荐

  • 小白学python要多久 新手学习周期预估

    学习python需要几个月的时间,具体取决于学习者的基础和投入的时间。1. 入门阶段:几周内掌握基本语法和简单脚本编写。2. 中级阶段:几个月内深入学习函数、类和常用库,编写复杂程序。3. 高级阶段:几个月到一年学习高级概念和复杂工具,具体时间因目标和兴趣而异。 对于一个小白来说,学习Python需…

    2025年12月14日
    000
  • Python中怎样使用GitHub Actions?

    在python项目中使用github actions可以通过以下步骤有效管理和自动化:1. 创建工作流程文件,定义在代码提交或拉取请求时触发的任务,如构建、测试和部署。2. 定制工作流程以适应特定需求,如为django项目添加测试步骤。3. 使用缓存加速构建过程,减少依赖安装时间。4. 利用矩阵策略…

    2025年12月14日
    000
  • 怎样用Python创建进度条?

    使用python创建进度条最常见的方法是使用tqdm库。1)安装tqdm:pip install tqdm。2)在for循环中使用:from tqdm import tqdm; for i in tqdm(range(100)): pass。3)自定义进度条样式:tqdm(range(100), d…

    2025年12月14日
    000
  • Python中怎样使用super()函数?

    super()在python中用于调用父类方法,特别在多重继承中非常有用。1) 在子类中使用super()调用父类初始化方法,确保对象状态一致性。2) super()遵循方法解析顺序(mro),适用于复杂继承关系。3) 使用时需注意调用顺序,确保所有类正确使用super()。4) python 3简…

    2025年12月14日
    100
  • Python中如何实现Kruskal算法?

    在python中实现kruskal算法需要使用并查集(union-find)数据结构来检测环路。具体步骤包括:1)对边按权重排序;2)使用并查集判断是否形成环路,若不形成则加入最小生成树。该算法适用于无向图,复杂度为o(m log m),但不适合有向图。 在Python中实现Kruskal算法可以说…

    2025年12月14日
    000
  • 有哪些知名的Python社区和论坛?

    最知名的python社区和论坛包括:1. stack overflow,2. reddit的r/learnpython和r/python,3. python.org的讨论列表,4. github。这些平台提供丰富的资源和交流机会,帮助用户解决问题、学习和贡献代码,是python爱好者成长和交流的重要…

    2025年12月14日
    000
  • python中*是什么意思 python星号运算符用途

    在python中,星号运算符(*)的用途包括:1)数值乘法,2)处理任意数量的函数参数,3)列表和字符串的重复操作,4)字典解包,5)类型注解中的可变参数。星号运算符是python编程中一个强大而灵活的工具,但需谨慎使用以避免潜在问题。 在Python中,星号运算符(*)有着多种用途,这使得它成为P…

    2025年12月14日
    000
  • python中pd是什么意思 pandas库在python中的常用缩写pd

    pd是pandas库的常用缩写。pandas是一个强大的数据分析工具,广泛应用于数据处理和分析任务中。pd使得数据操作变得简单高效,常用于读取、处理和分析数据。 在Python编程中,pd通常是指pandas库的常用缩写。pandas是一个强大的数据分析工具,广泛应用于数据处理和分析任务中。让我们深…

    2025年12月14日
    000
  • Python中如何复制文件?

    在python中复制文件可以使用shutil模块。1) 使用shutil.copy复制单个文件。2) 使用shutil.copytree复制整个目录。3) 使用shutil.copy2复制文件并保留元数据。4) 使用shutil.copyfileobj处理大文件的复制,避免内存问题。 在Python…

    2025年12月14日
    100
  • Python中如何压缩文件?

    在python中压缩文件主要使用zipfile和tarfile模块。1. 使用zipfile模块可以压缩单个文件或整个目录,示例代码为:with zipfile.zipfile(‘example.zip’, ‘w’) as zipf: zipf.wri…

    2025年12月14日
    000
  • Python中如何实现Rabin-Karp算法?

    在python中实现rabin-karp算法可以通过以下步骤:1. 选择素数作为哈希基数,并计算模式字符串和文本字符串的初始哈希值;2. 使用滑动窗口技术比较哈希值,并在哈希值匹配时进行字符级别的比较;3. 优化哈希计算以提高性能。这个实现展示了如何将字符串转换为哈希值并进行匹配,同时需要注意哈希碰…

    2025年12月14日
    000
  • Python中如何使用__getattr__和__setattr__?

    在Python中,__getattr__和__setattr__是两个非常强大的魔法方法,它们允许你以一种非常灵活的方式来控制属性访问和设置。让我们深入探讨一下如何使用它们,以及在实际编程中它们能带来什么样的便利和挑战。 当你想在Python中实现一些高级的属性管理时,__getattr__和__s…

    2025年12月14日
    000
  • python中break是什么意思 python循环中断语句

    break语句用于中断当前循环并跳出循环体。在处理大数据时,找到所需数据后使用break可以提高性能和代码可读性。使用时需注意:1. break只能跳出最内层循环;2. 过度使用可能降低代码可读性;3. 在大循环中频繁使用可能影响性能。 在Python中,break语句的作用是中断当前所在的循环,跳…

    2025年12月14日
    000
  • 如何调试Python代码?有哪些调试工具和技巧?

    python代码调试可以通过多种方法进行,包括使用print语句、pdb调试器、ide的图形化调试器、logging模块和断言语句。1. 使用print语句查看变量值和执行路径。2. 使用pdb设置断点并逐步执行代码。3. 利用ide如pycharm或vs code进行图形化调试。4. 通过logg…

    2025年12月14日
    100
  • Python中怎样执行SQL查询?

    在python中执行sql查询可以通过sqlite3、mysql-connector-python、psycopg2等库实现。1) 连接到数据库,使用sqlite3.connect()。2) 创建表和插入数据,使用cursor.execute()。3) 执行查询并处理结果,使用cursor.fetc…

    2025年12月14日
    000
  • Python中如何读取XML文件?

    在 python 中读取 xml 文件主要使用 xml.etree.elementtree 模块。1. 使用 et.parse() 读取文件并获取根元素。2. 遍历 xml 树并提取信息,如书名和作者。3. 处理命名空间时,使用命名空间字典。4. 处理大文件时,使用 iterparse() 方法节省…

    2025年12月14日
    000
  • 怎样用Python实现哈希表?

    在python中实现哈希表可以使用内置的dict类型,也可以通过自定义类实现。1.定义hashtable类,使用列表存储键值对。2.实现基本操作:插入、获取和删除。3.使用链地址法处理哈希冲突。4.优化建议包括自定义哈希函数、动态调整大小、考虑开放寻址法、性能测试、线程安全和内存管理。 用Pytho…

    2025年12月14日
    000
  • python中bool是什么类型 python布尔值bool的转换规则

    python中的bool是int的子类,true和false分别对应1和0。布尔值转换规则如下:1) 非零数值、非空对象、非空字符串等视为true;2) 0、none、空字符串、空列表、空字典等视为false。 Python中的bool是什么类型?Python的布尔值bool实际上是int的子类,T…

    2025年12月14日
    000
  • 怎样用Python爬取网页数据?

    python是爬取网页数据的首选工具。使用requests和beautifulsoup库可以轻松发送http请求和解析html内容。1)发送http请求:使用requests库获取网页内容。2)解析html:使用beautifulsoup库提取数据。3)应对反爬虫机制:伪装请求头或使用代理ip。4)…

    2025年12月14日
    000
  • python干什么的 举例 python实际应用案例

    python 在数据科学、网络开发、自动化、机器学习和人工智能等领域广泛应用。1) 数据科学和机器学习:python 提供了如 pandas、numpy、scipy、scikit-learn 和 tensorflow 等强大库,适用于数据处理和模型构建。2) 网络开发:django 和 flask …

    2025年12月14日
    000

发表回复

登录后才能评论
关注微信