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

如何检测不支持动画的浏览器禁用动画及修复文本无间距问题

问题1:不支持动画的浏览器自动禁用动画,仅展示纯文本

你可以选择两种方案实现,无需额外引入依赖:

  • 纯CSS方案
    你原有代码中把@keyframes放在@supports查询内的思路是可行的,只需要把检测规则改成判断浏览器是否支持CSS动画属性即可,不支持的浏览器会自动忽略所有动画相关规则,文本会正常渲染:
/* 把原有的@supports块替换为下面的代码 */
@supports (animation-name: test) {
  .char {
    animation: an 1s ease-out 1 both;
  }
  @keyframes an {
    from {
      opacity: 0;
      transform: perspective(500px) translate3d(-35px, -40px, -150px) rotate3d(1, -1, 0, 35deg);
    }
    to {
      opacity: 1;
      transform: perspective(500px) translate3d(0, 0, 0);
    }
  }
}
  • JS检测方案(适合需要在不支持动画的浏览器中减少冗余DOM节点的场景)
    在执行拆分字符加动画的逻辑前,先检测动画支持性,不支持就直接跳过字符拆分逻辑:
// 在unsecure函数开头新增这段检测代码
const isAnimSupported = CSS.supports('animation', '1s');
if (!isAnimSupported) return;

问题2:单词之间无间距修复

这个问题的根源是你给.char设置了display: inline-block,包裹在inline-block元素内的普通空格会被浏览器默认折叠,导致看不到间距,两种修复方案任选即可:

  • 方案1:CSS新增空格保留规则
    给.char类加white-space: pre属性,强制保留元素内的空格:
.char {
  font-size: 40px;
  height: 40px;
  /* 新增下面这行 */
  white-space: pre;
  display: inline-block;
}
  • 方案2:JS生成DOM时替换空格为不换行空格
    修改生成span的逻辑,把普通空格替换为不会被折叠的不换行空格:
// 把myFunc里的循环替换为下面的代码
for (let i = 0; i < text.innerText.length; i++) {
  const char = text.innerText[i] == ' ' ? '&nbsp;' : text.innerText[i];
  newDom += `<span class="char">${char}</span>`;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 22:15:03