【问题标题】:How does the CSS button hover animation work?CSS 按钮悬停动画是如何工作的?
【发布时间】:2019-01-07 08:41:09
【问题描述】:

我正在尝试理解这些按钮悬停效果的代码块,但仍然感到困惑。

我可以理解,当鼠标悬停在按钮上时,.btn:hover::after 会启动并显示背景(z=-1)按钮,然后用transform: scaleX(1.4) scaleY(1.6); 展开它

但是当鼠标指针从按钮上移开时,背景按钮也会“缩小”效果,就像从transform: scaleX(1.4) scaleY(1.6); 到正常大小一样。我只是不明白哪一行代码控制了这个鼠标离开动画。

.btn:link,
.btn:visited {
  position: relative;
  border-radius: 10rem;
  display: inline-block;
  margin-top: 6rem;
  text-transform: uppercase;
  text-decoration: none;
  padding: 1.5rem 4rem;
  transition: all 0.2s;

}

.btn:hover {
  transform: translateY(-.3rem);
  box-shadow: 0 1rem 2rem  rgba(0, 0, 0, .3);
}

.btn:active {
  transform: translateY(-.1rem);
  box-shadow: 0 .5rem 1rem  rgba(0, 0, 0, .2);
}

.btn--white {

  background-color: #fff;
  color: #777;
}

.btn::after {
  content: "";
  display: inline-block;
  height: 100%;
  width: 100%;
  border-radius: 10rem;
  position: absolute;
  top: 0;
  left: 0;
  z-index: -1;
  transition: all .4s;
}

.btn--white::after {
  background-color: #fff;
}

.btn:hover::after {
  transform: scaleX(1.4) scaleY(1.6);
  opacity: 0;
}

【问题讨论】:

    标签: css animation hover


    【解决方案1】:

    秘密在于按钮的:link/:visited中的transition: all 0.2stransition 不仅进入目标状态,而且离开目标状态。从本质上讲,transition 控制着您所看到的动画的两侧。

    仍然是 transform 应用实际偏移量,但 transition 负责平滑地来回淡出是否应用 transform - 没有 transition ,动画只会在两种状态之间“跳跃”。

    body {
      background: black;
    }
    
    .btn:link,
    .btn:visited {
      position: relative;
      border-radius: 10rem;
      display: inline-block;
      margin-top: 6rem;
      text-transform: uppercase;
      text-decoration: none;
      padding: 1.5rem 4rem;
      transition: all 0.2s;
    }
    
    .btn:hover {
      transform: translateY(-.3rem);
      box-shadow: 0 1rem 2rem rgba(0, 0, 0, .3);
    }
    
    .btn:active {
      transform: translateY(-.1rem);
      box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .2);
    }
    
    .btn--white {
      background-color: #fff;
      color: #777;
    }
    
    .btn::after {
      content: "";
      display: inline-block;
      height: 100%;
      width: 100%;
      border-radius: 10rem;
      position: absolute;
      top: 0;
      left: 0;
      z-index: -1;
      transition: all .4s;
    }
    
    .btn--white::after {
      background-color: #fff;
    }
    
    .btn:hover::after {
      transform: scaleX(1.4) scaleY(1.6);
      opacity: 0;
    }
    <a href="#" class="btn btn--white">Button</a>

    【讨论】:

    • TY。您能否进一步解释一下 (.btn--white) 和 (.btn--white::after) 在此设置中的行为?
    • 当然。常规的.btn--white 只不过是设置了一个背景颜色(白色是默认的,所以它真的什么都不做)。 .btn::after 在按钮周围创建一个过渡边框,使其具有脉动效果。但是,它没有设置颜色,因此不可见。 .btn--white::after 添加颜色,因此您可以看到白色的脉动效果。我假设这样做是为了让您通过选择相关的类来指定脉动效果应该是什么颜色。我还更新了我的小提琴以实际包含 .btn-white 类来展示脉动。
    • 再次感谢。我正在尝试使用简单明了的术语来描述这些代码,如果我错了,请纠正我:
    • 使用.btn::after,我们在链接btn 后面创建了一个新的btn,但是使用.btn:hover::after,css 如何选择z-index= -1 的新btn 进行操作?是不是应该选择顶层元素,btn.link 用于悬停效果?
    猜你喜欢
    • 2020-05-06
    • 1970-01-01
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    • 2021-01-20
    相关资源
    最近更新 更多