html - 使用 CSS Transition 设置边距和填充动画会导致动画跳动

标签 html css css-transitions

在我的 personal website ,我在顶部导航栏上使用 CSS3 Transition 属性为带有边框的元素的边距和填充设置动画,使边框在悬停时膨胀。

相关标记:

<nav>
        <a class="email" href="mailto:notmyrealemailaddress">
          <div class="icon-border">
            <img src="images/mail_icon.png" width="14" height="12">
          </div>Email Me</a>

        <a class="phone" href="tel:4075555555">
          <div class="icon-border">
            <img src="images/phone_icon.png" width="11" height="18">
          </div>Call Me</a>

        <a class="behance" href="http://behance.net/dannymcgee" target="_blank">
          <div class="icon-border">
            <img src="images/behance_icon.png" width="21" height="13">
          </div>See My Work</a>
</nav>

CSS:

header nav .icon-border {
  display: inline-block;
  border: 2px solid #000;
  border-radius: 30px;
  padding: 5px;
  margin: 0 10px;
  transition: 0.15s padding ease-out, 0.15s margin ease-out, 0.15s border ease-out;
}

header nav a:hover .icon-border {
  padding: 10px;
  margin: -10px 5px;
  border: 2px solid #ddd;
  transition: 0.15s padding ease-out, 0.15s margin ease-out, 0.15s border ease-out;
}

看看它在做什么?通过减少边距并增加悬停时的填充,圆形边框有效地变大而不会改变它环绕的图像的位置。

它工作得很好,但问题是如果我快速将鼠标从 EMAIL ME 移动到 CALL ME,反之亦然,在第一个动画完成之前,整个导航会上下“跳跃”大约一个像素。但是,这个问题不会发生在 CALL ME 和 SEE MY WORK 之间,这让我相信这是一个可以解决的问题。有什么想法吗?

最佳答案

我认为问题是因为您正在转换边距(并使用总是有点不稳定的负边距)。

更流畅的解决方案可能是使用 transform: scale(x)

有点像:

header nav .icon-border {
  display: inline-block;
  border: 2px solid #000;
  border-radius: 30px;
  padding: 5px;
  margin: 0 10px;
  transform: scale(1); /* you need a scale here to allow it to transition in both directions */
  transition: 0.15s all ease;
}

header nav a:hover .icon-border {
  transform: scale(1.2);
  border: 2px solid #ddd;
}

关于html - 使用 CSS Transition 设置边距和填充动画会导致动画跳动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28203411/

相关文章:

javascript - React/CSS - 当宽度为自动时,内容更改后动画按钮宽度调整大小

javascript - 检测滚动到页面底部事件并采取行动

javascript - DIV 意外改变形状

javascript - 随着时间的推移将 css 属性从 x 更改为 y

javascript - 使用 Jquery 给文本加下划线

jquery - CSS3 动画和更新 DOM

html - 在悬停动画 : Icon must get closer to the text, 现在它以相反的方式工作

javascript - 控制台日志是否已选中复选框?

Javascript:单击后更改按钮文本更改

javascript - 在哪里可以找到 dojo 工具包 dijit 小部件的图标图像列表?