【问题标题】:Pseudo elements transition on IE 11 ignores paddingIE 11 上的伪元素转换忽略填充
【发布时间】:2015-06-12 22:42:17
【问题描述】:

尝试制作按钮悬停效果时,我在 IE 上偶然发现了这个奇怪的错误。

即使在 IE11 上也会发生这种情况。

当您将鼠标悬停在按钮上时,伪元素会“跳跃”它们的过渡。 如果您删除填充,它会停止!

我整个下午都在努力解决这个问题,但我似乎找不到问题。

这是演示:http://codepen.io/anon/pen/rVwRKL

HTML
<a href="http://##" title="yeah">Live Button</a>

CSS
body
{
  padding: 5em;
  margin: 0;
}

a{
  padding: 1em 1em;
  margin: 0;
  box-shadow: inset 0px 0px 0px 3px blue;
  position: relative;
  box-sizing: border-box;
  display: inline-block;
}

a::before,
a::after
{
  transition: width 0.4s ease, height 0.4s ease 0.4s, opacity 0.4s ease;
  content: " ";
  box-sizing: border-box;
  width: 100%;
  height: 100%;
  display: block;
  position: absolute;
  border: solid 3px green;
  display: inline-block;
}

a::after
{
  right: 0;
  bottom: 0;
  border-right-color: transparent;
  border-top-color: transparent;
}

a::before
{
  left: 0;
  top: 0;
  border-left-color: transparent;
  border-bottom-color: transparent;
}

a:hover::before,
a:hover::after
{
  transition-delay: 0.4s, 0s, 0.7s;
  width: 0;
  height: 0;
  opacity: 0;
}

谢谢!

【问题讨论】:

  • 我没有看到 IE 11 和 Chrome 之间有很大的区别。您能否分享另一个演示,使用尽可能少的代码,强调这个问题?
  • 当您在 IE11 中查看该框时,看起来正在动画的 3px 边框的一部分在框的中间短暂显示,然后移到框的外部。它发生得很快。我假设这就是 OP 所说的
  • 是否给 a 行高而不是顶部和底部填充有帮助?
  • 大家好,感谢 cmets。 @JonathanSampson 在 chrome 上的动画很流畅,在 IE 上,只要你悬停它就会跳转到按钮的中间。
  • 嘿@CarolMcKay,行高不起作用。我对这个很迷茫。

标签: css internet-explorer debugging transition


【解决方案1】:

不确定您是否曾经得到过这个 Marlon 的答案,但我刚刚遇到了与 IE 基本相同的问题。谢天谢地,我已经设法找出导致问题的 IE 中的怪异之处。

这似乎是当您混合测量前缀时,即 px、%、em、vw 等...

在我的问题中,我从 vw 转到 px - 除了 IE,这在任何地方都可以正常工作。一旦我将我的 vw 更改为 px 一切正常。

在您上面的示例中,发现起来就更不明显了。您将之前/之后的宽度设置为 100% - % 作为测量值。 然后,在悬停状态下,您将它们都简单地设置为 0(零)而不进行测量。这就是问题所在,因为没有测量值 不一样 % IE 似乎很难弄清楚 (?!?!?!)。只要将 % 添加到悬停状态的宽度/高度,它就可以正常工作。

在此处查看调整宽度/高度的工作示例:http://codepen.io/anon/pen/YyNWzw

以前的 CSS

a:hover::before,
a:hover::after
{
  transition-delay: 0.4s, 0s, 0.7s;
  width: 0;
  height: 0;
  opacity: 0;
}

调整后的 CSS

a:hover::before,
a:hover::after
{
  transition-delay: 0.4s, 0s, 0.7s;
  width: 0%;
  height: 0%;
  opacity: 0;
}

通常我也不会在值为 0(零)时添加测量值,但我猜如果您使用转换,那么 IE 需要它匹配。

希望这会有所帮助。

【讨论】:

  • 伙计,我刚刚在我遇到的问题的旧 jsFiddle 上测试了您的解决方案,它有效。感谢您抽出宝贵时间回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-12
  • 2015-09-09
  • 1970-01-01
  • 2016-12-13
  • 2011-03-21
  • 2014-04-17
  • 2015-06-05
相关资源
最近更新 更多