【问题标题】:How to create a separation animation in CSS upon hover of a picture?如何在图片悬停时在 CSS 中创建分离动画?
【发布时间】:2020-01-05 12:25:38
【问题描述】:

我有下面的图片,我想对从左上角到右下角穿过徽标的线的对角线分割进行动画处理,如下所示。动画会将 X 轴上的图片分开几个像素。

https://i.ibb.co/fDzZ6Sc/Logo.png

到目前为止,我已经取得了一些进展,我两次使用同一张图片并将它们相互重叠并在 X 轴上倾斜。然而,这将图片从右上角到左下角分开。我喜欢它的另一种方式,无法弄清楚。

我也想不出如何将鼠标悬停在整个图片上,以便两边都执行动画。

body { background: gainsboro; }
.pageOption {
  overflow: hidden;
  position: relative;
  margin: 0 auto;
  width: 40em; height: 27em;
}
.option, .option img { width: 100%; height: 100%; }
.option {
  overflow: hidden;
  position: absolute;  
  /* arctan(27 / 40) = 34.01935deg 
   * need to skew by 90deg - 34.01935deg = 55.98065deg
  */
  transform: skewX(-55.98deg);
  
  
}

.option:first-child {
  left: -.25em;
  transform-origin: 100% 0;
}
.option:last-child {
  right: -.25em;
  transform-origin: 0 100%;
}

.option img, .option:after {
  transform: skewX(55.98deg);
  transform-origin: inherit;
}

.option:hover {
  left: -.8em;
  transition: 1s;
}
<div class='pageOption'>
  <a href='#' class='option'>
    <img src='https://i.ibb.co/fDzZ6Sc/Logo.png'>
  </a>
  <a href='#' class='option'>
    <img src='https://i.ibb.co/fDzZ6Sc/Logo.png'>
  </a>
</div>

基本上我想要发生的事情是在将鼠标悬停在整个图片上时,两侧会从中间分开(从从左上角到右下角的线切割),当你将鼠标移开时,图像一起返回。

【问题讨论】:

  • “但是,这会将图片从右上角到左下角分开。” - 反转倾斜度上的符号,看看会发生什么。 “我也不知道如何将鼠标悬停在整个图片上以使动画在两边都执行。” - 您可以根据当前悬停的第一个链接来设置第二个链接的不同格式,但反之则不然。改为使用父元素的悬停状态。

标签: javascript html css hover skew


【解决方案1】:

您可以考虑 clip-path 并轻松地执行此操作,如下所示。诀窍是使用两个相反的多边形,组合将形成完整的图像。

.image {
  width:340px;
  height:230px;
  background-image:url(https://i.ibb.co/fDzZ6Sc/Logo.png);
  background-size:0;
  position:relative;
}
.image:before,
.image:after {
  content:"";
  position:absolute;
  top:0;
  left:0;
  right:0;
  bottom:0;
  background-image:inherit;
  background-size:cover;
  transition:1s;
}
.image:before {
  clip-path:polygon(0 0, 15% 0,  97% 100%, 0 100%);
}

.image:after {
  clip-path:polygon(100% 0, 15% 0,  97% 100%);
}

.image:hover::before{
   transform:translate(-20px,-10px);
}

.image:hover::after{
   transform:translate(20px,10px);
}

body {
 background:pink;
}
<div class="image">

</div>

如果您不想剪切The,请调整剪辑路径

.image {
  width:340px;
  height:230px;
  background-image:url(https://i.ibb.co/fDzZ6Sc/Logo.png);
  background-size:0;
  position:relative;
}
.image:before,
.image:after {
  content:"";
  position:absolute;
  top:0;
  left:0;
  right:0;
  bottom:0;
  background-image:inherit;
  background-size:cover;
  transition:1s;
}
.image:before {
  clip-path:polygon(0 0, 32% 0 ,32% 19%,  97% 100%, 0 100%);
}

.image:after {
  clip-path:polygon(100% 0,32% 0,32% 19%,97% 100%);
}

.image:hover::before{
   transform:translate(-20px,-10px);
}

.image:hover::after{
   transform:translate(20px,10px);
}

body {
 background:pink;
}
<div class="image">

</div>

【讨论】:

  • 非常感谢。我将研究多边形如何工作来学习这一点。这是一种非常酷的做事方式!
  • @SamRaha 他们很容易,你只需要想象这些点以及它们是如何联系起来的。这是一个可以帮助您的好工具:bennettfeely.com/clippy
  • 感谢先生的帮助。您是否碰巧知道如何禁用 IE 的“转换:翻译”,因为它不受支持。我试过 -ms-transform: none !important;在悬停上,但它不起作用。
  • @SamRaha translate 在 IE 中受支持,但剪辑路径不支持
猜你喜欢
  • 2021-06-29
  • 2014-09-07
  • 2021-06-30
  • 2014-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-02
  • 2015-06-09
相关资源
最近更新 更多