You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Safari中为meter元素设置样式?webkit方案Chrome有效Safari无效

Safari下meter元素Webkit样式不生效的解决方案

嘿,我之前也踩过Safari对meter元素样式支持的坑,刚好能帮到你!你遇到的问题是因为Safari对meter的Webkit伪类实现和Chrome有差异,而且它的默认内置样式优先级很高,咱们调整一下代码就能解决。

先看你原来的代码问题:Safari没有重置meter的默认外观,导致你的自定义样式被覆盖,而且它对进度条填充部分的伪类识别也和Chrome不一样。

修改后的完整代码如下:

.my-box{ 
  border: 1px solid indigo; 
  width: 200px; 
  height: 100px; 
  position: relative; 
  overflow: hidden; 
}
.my-box .meter { 
  width: 200px; 
  height: 20px; 
  position: absolute; 
  bottom: -6px;
  /* 关键:重置Safari默认的meter外观 */
  -webkit-appearance: none;
  appearance: none;
}
.my-box .meter::-webkit-meter-bar { 
  background: lavender; 
  border: none; 
}
/* 同时兼容Chrome和Safari的进度条填充样式 */
.my-box .meter::-webkit-meter-optimum-value,
.my-box .meter::-webkit-meter-bar::after {
  background: rebeccapurple;
}
<div class='my-box'> 
  <meter class='meter' min='0' max='1000' value='700'></meter> 
</div>

关键修改点说明:

  • 重置默认外观:给meter加上-webkit-appearance: none和appearance: none,这会彻底清除Safari自带的meter样式,让你的自定义样式能生效。
  • 兼容填充样式:Safari中除了::-webkit-meter-optimum-value,还需要用::-webkit-meter-bar::after来匹配进度条的填充部分,同时保留前者可以保证Chrome正常工作。

如果之后你需要处理meter的不同状态(比如低于最优值、危险值),可以分别对::-webkit-meter-suboptimum-value和::-webkit-meter-even-less-good-value做同样的处理,记得在Safari中配合::after伪元素哦。

内容的提问来源于stack exchange,提问作者NbonD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 09:42:35