chrome 中奇怪的颜色过渡行为

2024-03-30

我目前正在开发一个多主题应用程序以及 css 的过渡color- 属性未按预期工作。在 Chrome 中,它不是立即将过渡应用于每个元素,而是根据元素的深度以某种方式延迟。

我已经测试过该脚本

  • 84.0.4124.1(官方版本)canary(64 位)(同类:Clang-64)
  • 81.0.4044.122(官方版本)(64 位)(同类:稳定)
const createSpanWithDepth = depth => {
  let wrapper = document.createElement('div');
  const root = wrapper;

  for (let i = 0; i < depth - 1; i++) {
    const next = document.createElement('div');
    next.appendChild(wrapper);
    wrapper = next;
  }

  const span = document.createElement('span');
  span.innerHTML = 'Depth' + depth; // JSfiddle doesn't support template strings lol

  root.appendChild(span);
  return wrapper;
}

const {
  body
} = document;

for (let i = 0; i < 100; i += 10) {
  body.appendChild(createSpanWithDepth(i));
}


const btn = document.querySelector('button');
btn.addEventListener('click', () => body.classList.toggle('active'))
body * {
  transition: all 0.3s 0s;
}

body.active {
  color: red;
}
<button>Click me</button>

好吧,也许只是因为somehow currentColor在 chrome 中的行为有所不同 - 所以让我们尝试一下背景:

const createSpanWithDepth = depth => {
  let wrapper = document.createElement('div');
  const root = wrapper;

  for (let i = 0; i < depth - 1; i++) {
    const next = document.createElement('div');
    next.appendChild(wrapper);
    wrapper = next;
  }

  const span = document.createElement('span');
  span.innerHTML = 'Depth' + depth; // JSfiddle doesn't support template strings lol

  root.appendChild(span);
  return wrapper;
}

const {
  body
} = document;

for (let i = 0; i < 100; i += 10) {
  body.appendChild(createSpanWithDepth(i));
}


const btn = document.querySelector('button');
btn.addEventListener('click', () => body.classList.toggle('active'))
body * {
  transition: all 0.3s 0s;
}

body {
  background: white;
}

body.active * {
  color: red;
  background: green;
}
<button>Click me</button>

显然它确实有效background尽管仍然存在某种延迟,但在 Firefox(75.0(64 位))中它确实可以工作。

两种浏览器的比较:

Chrome:

Firefox:

(与上面使用的代码相同,可以找到一个JSFiddlehere https://jsfiddle.net/Simonwep/ufzj40ps/9/)

我是否遗漏了某些内容,或者这是其中一种浏览器中的错误?

Update

如果我瞄准它就会起作用span直接元素(尽管这不是真正的解决方案):

body span {
  transition: all 0.3s 0s;
}

这让我假设 chrome 会进行某种顺序转换?!

Update 2

谢谢@杰夫-詹姆斯 https://stackoverflow.com/users/6240567/geoff-james- 这或多或少是重复的CSS 转换:Webkit 浏览器(Chrome 和 Safari)中出现奇怪的不必要的延迟 https://stackoverflow.com/questions/22069877/css-transitions-strange-unwanted-delay-in-webkit-browsers-chrome-and-safari但也许有一些替代解决方案,因为原来的答案已经有 6 岁了......


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

chrome 中奇怪的颜色过渡行为 的相关文章

  • 如何将中间件绑定到socket.io中的事件

    现在您可以将中间件绑定到io use middleware 但这仅在建立套接字连接时触发 有没有办法在将其传递给事件句柄之前拦截它 就像在expressjs中一样 换句话说 In 快递 js你可以做 app get middleware1
  • 计算Javascript中两次点击之间的时间

    我想用 javascript 计算属性的两次点击之间的时间 但我不知道如何 例如 a href click here a 如果用户单击多次 假设 5 秒内 我想显示警报 如果有帮助的话我正在使用 jQuery 我对 javascript 不
  • 有没有模拟 Facebook 游览的 jQuery 插件?

    我指的是 Facebook 游览 可能使用开箱即用的 Facebook CSS 我已经知道这两个 http tympanus net codrops 2010 12 21 website tour http tympanus net cod
  • 在浏览器中语音聊天? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我们正在寻求建立一个小组 voice 使用服务器上的node js 在浏览器中聊天 这可能吗 如果您希望您的解决方案是基于服务器端和客
  • 如何使 WordPress 主题全宽?

    我尽了最大努力 但无法通过编辑 CSS 使以下主题全宽 屏幕 如果您能向我展示或给我有关此定制的提示 我将不胜感激 http demo mythemeshop com sociallyviral http demo mythemeshop
  • Flask wtf.quick_form 运行一些 javascript 并设置表单变量

    我正在创建博客文章 到目前为止已经使用普通的 html 表单完成了 我所做的一个有趣的想法是运行 javascript onclick 并使用页面中的额外数据在表单中设置一个隐藏变量 这很好地传递到服务器并通过 request form 获
  • 响应式网格布局框架[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何改变HTML5视频的播放速度?

    如何更改 HTML5 中的视频播放速度 我查过视频标签的属性 https www w3schools com html html5 video asp在 w3school 但无法做到这一点 根据这个网站 http www chipwreck
  • jQuery 选择器:为什么 $("#id").find("p") 比 $("#id p") 更快

    该页面的作者 http 24ways org 2011 your jquery now with less suck http 24ways org 2011 your jquery now with less suck断言 jQuery
  • css 计数器在 Internet Explorer 中无法工作以获取隐藏内容 - 如何修复?

    我们想要一些编号列表 并发现了这个很酷的计数器 您可以在 css 中使用它来让浏览器为您计算数字 ol instructions counter reset instructions section ol instructions gt l
  • 如何访问另一个 mobx 商店中的 mobx 商店?

    假设以下结构 stores RouterStore js UserStore js index js each of Store jsfiles 是一个 mobx 存储类 包含 observable and action index js只
  • Keycloak javascript 适配器 `keycloak.init` 加载 404 iframe

    我正在尝试使用 javascript 适配器将 Keycloak 集成到我的客户端应用程序keycloak js 但是 我似乎无法让它发挥作用 这是我的代码 const keycloak new Keycloak realm my real
  • 有关于 PHP 中的 V8JS 的文档吗?

    有没有关于V8JS的文档 我是否只需要标准 PHP 或一些扩展即可使用 V8JS 我将非常感谢有关 PHP 中的 V8JS 的任何信息 要求 PHP 5 3 3 和 V8 库和标头安装在正确的路径中 Install http www php
  • WebRTC:通道、轨道和流与 RTP SSRC 和 RTP 会话之间的关系

    来自 Mozilla 网站 https developer mozilla org en US docs Web API Media Streams API https developer mozilla org en US docs We
  • Jquery:选择菜单以显示和隐藏某些div元素

    我正在创建一个选择菜单 根据所选选项显示和隐藏某些 div 像这样的东西
  • ES6 模板文字的延迟执行

    我正在玩新的ES6 模板文字 http tc39wiki calculist org es6 template strings 我首先想到的是String format对于 JavaScript 所以我开始实现一个原型 String pro
  • gwt 中的垂直居中

    如何使用垂直面板在 gwt 中垂直居中 或者请告诉我有什么方法可以进行垂直居中 如果你想直接使用VerticalPanel从代码中 您需要使用setVerticalAlignment HasVerticalAlignment ALIGN M
  • Express.js Passport认证自动失败跳过策略

    UPDATE 我已将代码从护照本地注册内部移至单独的处理程序 并且运行良好 问题在于 Passport 和本地注册的使用 但我不知道为什么 我使用 Node js Express Passport 进行身份验证和注册设置 这是以前使用过的标
  • 如何在 SVG 元素上使用箭头标记?

    我需要在 d3 js 中创建一个箭头 但我找到的只是带有节点图的示例 我需要的是简单地制作一个从 A 点到 B 点的箭头 我尝试实现以下示例中的部分代码 http bl ocks org 1153292 http bl ocks org 1
  • 如何更改订阅值?使用 rxJS

    我正在创建一个计时器 需要你的帮助 我刚刚学习 Angular 和 rxJS 对此我有一些疑问 我正在创建一个具有启动 停止 暂停 重置功能的计时器 并且 btn Reset 必须将我的计时器 暂停 到 300 毫秒 怎么做 D 我的启动定

随机推荐