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

如何在CSS中检测浏览器对@view-transition navigation: auto的支持?

如何在CSS中检测浏览器对@view-transition navigation: auto的支持?

我完全懂你的困扰——Chrome 126确实正式引入了跨文档视图过渡特性,通过@view-transition { navigation: auto; }就能开启,但你尝试用@supports (navigation: auto)检测时却没触发,这其实是因为**navigation是@view-transition专属CSS规则下的属性,不能脱离上下文单独放在@supports里检测**。

浏览器的@supports需要识别完整且合法的CSS语法结构,单独写(navigation: auto)不符合语法要求——这个属性只能存在于@view-transition的块级规则中,所以Chrome 126自然不会把这个@supports条件判定为真。

现有CSS替代方案(局限性说明)

你提到的通过视图过渡伪元素检测的方式:

@supports selector(::view-transition-old(root)) and selector(::view-transition-new(root)) {
  /* 浏览器支持视图过渡基础特性 */
}

确实能判断浏览器是否支持视图过渡,但正如你所说,它没法精准区分是否支持跨文档的navigation: auto——毕竟普通单页视图过渡在更早的Chrome版本就已经支持了。

暂时的折中方案(结合CSS+JS)

如果想要更接近精准检测的效果,目前可以结合CSS和JavaScript:

  1. 先用上面的伪元素@supports确保浏览器支持视图过渡基础特性;
  2. 再用JavaScript通过CSSOM来判断浏览器是否识别navigation: auto属性:
const supportsCrossDocVT = () => {
  try {
    const sheet = new CSSStyleSheet();
    sheet.replaceSync('@view-transition { navigation: auto; }');
    const rule = sheet.cssRules[0];
    return rule && rule.navigation === 'auto';
  } catch(e) {
    return false;
  }
};

if (supportsCrossDocVT()) {
  document.documentElement.classList.add('cross-doc-vt-supported');
}

之后你就可以在CSS中通过.cross-doc-vt-supported类来编写针对跨文档视图过渡的样式了。

需要注意的是,这种JS方法依赖当前浏览器的CSSOM实现,未来如果@supports支持检测嵌套at-rule属性的写法(比如@supports (@view-transition { navigation: auto; })),那就能回到纯CSS的检测方式了。

备注:内容来源于stack exchange,提问作者Oliver Schwarz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 09:49:31