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

Chrome/Edge在progress::-moz-progress-bar{}后停止渲染所有CSS,求解决办法

解决CSS嵌套中::-moz-progress-bar导致Chrome/Edge后续样式失效的问题

问题原因

Chrome、Edge这类WebKit/Blink内核浏览器无法识别Firefox专属的::-moz-progress-bar伪元素选择器,在CSS嵌套语法中,引擎遇到无法解析的选择器时,会将该选择器之后的整个嵌套块内容判定为无效,直接跳过渲染,导致后续的input样式及其他规则全部失效。而Firefox能正常识别所有前缀选择器,所以不受影响。

修复方案

方案1:将Firefox专属规则移出嵌套块

把针对Firefox的进度条样式单独提取到全局作用域,不放在form的嵌套规则内。这样WebKit/Blink浏览器只会忽略这一条无效规则,不会波及后续的嵌套样式。

body {
  font-family: sans-serif;
  font-size: 16px;
}

/* 单独提取Firefox专属规则 */
form progress::-moz-progress-bar { 
  background-color: orange; 
}

form {
    progress::-webkit-progress-value { background-color: orange; }

    input {
      border: 1px solid gray;
      min-height: 35px;
    }

    ... more css rules ...
} /* form */

方案2:用@supports做特性检测包裹Firefox规则

通过@supports检测Firefox专属的CSS特性,仅在Firefox中加载该规则。WebKit/Blink浏览器会直接忽略整个@supports块,不会影响后续嵌套规则的解析。

body {
  font-family: sans-serif;
  font-size: 16px;
}

form {
    progress::-webkit-progress-value { background-color: orange; }
    
    /* 仅Firefox会识别并加载此块内的规则 */
    @supports (-moz-appearance: none) {
        progress::-moz-progress-bar { background-color: orange; }
    }

    input {
      border: 1px solid gray;
      min-height: 35px;
    }

    ... more css rules ...
} /* form */

方案3:配合CSS变量优化代码(可选)

将进度条颜色定义为全局变量,减少重复代码,同时结合上述方案使用,方便后续统一修改样式:

:root {
  --progress-fill-color: orange;
}

body {
  font-family: sans-serif;
  font-size: 16px;
}

form {
    progress::-webkit-progress-value { background-color: var(--progress-fill-color); }
    
    @supports (-moz-appearance: none) {
        progress::-moz-progress-bar { background-color: var(--progress-fill-color); }
    }

    input {
      border: 1px solid gray;
      min-height: 35px;
    }

    ... more css rules ...
} /* form */

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 05:22:36