【问题标题】:CSS transition defined in external stylesheet causes transition on page load外部样式表中定义的 CSS 过渡导致页面加载时的过渡
【发布时间】:2011-09-17 04:07:32
【问题描述】:

我已将我的问题缩小到一个相当简单的案例。这有效(至少在 Chrome 中),显示一个“弹出窗口”,该窗口大部分在屏幕外,屏幕右侧有一部分。当我将鼠标悬停在可见部分上时,整个弹出窗口会滑入视图:

<!DOCTYPE html>
<html>
<head>
  <title>Popout test</title>
  <style>
  #popout {
    -webkit-transition: left 0.5s ease-in-out;
    width: 200px;
    height: 200px;
    background-color: #cde;
    border: 4px solid black;
    padding: 4px;
    left: -180px;
    position: absolute;
    top: 250px;

  }

  #popout:hover {
    left: -4px;
  }  
  </style>
</head>
<body>
  <div id="popout">This is a test</div>
</body>
</html>

但是,如果我随后将确切的 CSS 移动到外部样式表中:

<!DOCTYPE html>
<html>
<head>
  <title>Popout test</title>
  <link rel="stylesheet" href="popout.css" />
</head>
<body>
  <div id="popout">This is a test</div>
</body>
</html>

popout.css:

#popout {
    -webkit-transition: left 0.5s ease-in-out;
    width: 200px;
    height: 200px;
    background-color: #cde;
    border: 4px solid black;
    padding: 4px;
    left: -180px;
    position: absolute;
    top: 250px;

}

#popout:hover {
  left: -4px;
}  

...效果保持不变,但在页面加载时弹出窗口会“弹出”并缓和屏幕。将样式直接放在 html 页面中的 &lt;style&gt; 中,就像在第一个示例中一样,这不会发生;弹出窗口从“屏幕外”开始,即在left: -180px,正如我所料。

我想知道这是否是“无样式内容的闪现”,加上令人烦恼的是,由于过渡效果,它实际上是一个非常明显、缓慢的效果?

谁能确切地告诉我为什么会发生这种情况,以及避免它的最简单的方法是什么?

由于 jsfiddle 的工作方式,很遗憾,我无法重现该问题。

【问题讨论】:

  • 您的 HTML 已损坏,请先检查与此无关。
    这是一个测试 - 它应该是
    这是一个测试
  • @Kinlan 哎呀,好点子。这是我简化为我的例子的产物;原代码有效。我已经更正了这个问题。不影响问题。
  • 我尝试了您的示例,它适用于外部样式表或在 chrome 中没有它。你用的是什么版本的chrome?
  • 可能是本地主机上的加载时间太短了?但是我尝试将示例上传到我的主机上,它仍然可以正常工作:easwee.net/test123/HTMLPage.htm 我的版本是 11.0.696.68。
  • @Matt Gibson - 我尝试在另一台电脑上安装最新的 Chrome 新版,但没有发生。不知道有什么可以搞砸的。在其他webkit浏览器上试过,也可以。

标签: google-chrome css webkit css-transitions


【解决方案1】:

感谢@easwee,帮助确认问题不是 :) 我现在已经找到了导致问题的原因。它是 Chrome 的 AdBlock 扩展。如果我禁用此扩展程序,我看不到问题。

如果它有助于其他人追踪此问题,您可以使用新的“隐身”窗口快速测试扩展程序是否导致问题 - Chrome 中的隐身窗口的所有扩展程序都已禁用。

【讨论】:

  • 我可以确认这不仅仅是 AdBlock,而是 Chrome 本身。我不确定它是否真的显示了一些没有样式的内容,但我已经在 Mac 上的 Chrome v12(当前稳定版)和 v14(当前金丝雀)中测试了这个,有和没有扩展,内外隐身模式。在 Safari 中它永远不会发生(可能是因为 Safari 会延迟渲染直到 CSS 被加载?)
  • Chrome 中的某些扩展确实会导致在刷新时重复发生这种情况,但是当第一次加载页面时,这种情况总是在没有缓存样式表的情况下发生。这应该作为 Chromium 项目的错误提交吗?
  • @pattern86 哦,所以你看到了吗?有趣的。我刚刚尝试使用@easwee 的测试页面,在 AdBlock 关闭的 13.0.782.31 中,我肯定 不会发生。其他版本还没试过。如果你可以在没有扩展的情况下重现它,那么是的,我猜这是一个 Chrome 错误,虽然它似乎是一个很滑的错误......以后可能会尝试使用 Chrome 14,看看那里会发生什么。
  • 是的,我在两个版本中都以隐身模式使用了他的示例。
猜你喜欢
相关资源
最近更新 更多
热门标签