【问题标题】:Css 3 transition between arrows箭头之间的CSS 3过渡
【发布时间】:2018-01-03 09:37:03
【问题描述】:

我有一个像这样的简单箭头:

>

在悬停时,我希望它扩展为如下所示:

->

当然没有他们之间的差距。

这必须是它们之间的过渡+动画才能平滑。这是我目前所拥有的

My Work

body,
html {
  margin: 0;
  padding: 0;
  max-width: 100%;
  max-height: 100%;
  overflow-x: hidden;
  position: relative;
  background-color: black;
}

.button {
  display: inline-block;
  vertical-align: middle;
  border-radius: 50%;
  margin: 6em 0 0;
  padding: 0;
  text-align: center;
}

.left {
  display: inline-block;
  width: 3em;
  height: 3em;
  border: 0.5em solid #333;
  border-radius: 50%;
  margin-right: 1.5em;
}

.left:after {
  content: '';
  display: inline-block;
  margin-top: 0.90em;
  margin-left: 0.6em;
  width: 0.8em;
  height: 0.8em;
  border-top: 0.5em solid #333;
  border-right: 0.5em solid #333;
  -moz-transform: rotate(-135deg);
  -webkit-transform: rotate(-135deg);
  transform: rotate(-135deg);
}

.right {
  color: white;
  display: inline-block;
  width: 3em;
  height: 3em;
  border: 0.5em solid #333;
  border-radius: 50%;
  margin-left: 1.5em;
}

.right:after {
  content: '';
  display: inline-block;
  margin-top: 0.90em;
  margin-left: -0.6em;
  width: 0.8em;
  height: 0.8em;
  border-top: 0.5em solid #333;
  border-right: 0.5em solid #333;
  -moz-transform: rotate(45deg);
  -webkit-transform: rotate(45deg);
  transform: rotate(45deg);
}

.right:hover {
  content: '';
  display: inline-block;
  margin-top: 0.90em;
  margin-left: -0.6em;
  width: 2em;
  height: 2em;
  border-top: 0.5em solid #333;
  border-right: 0.5em solid #333;
  -moz-transform: rotate(45deg);
  -webkit-transform: rotate(45deg);
  transform: rotate(45deg);
}
<body>
  <div class="button">
    <span class="left"></span>
  </div>
  <div class="button">
    <span class="right"></span>
  </div>
</body>

任何想法如何从这两个箭头之间实现平滑过渡和动画?

【问题讨论】:

    标签: css css-transitions css-animations


    【解决方案1】:

    嗯,希望对您有所帮助。我通过插入另一个伪类 onhover 来做到这一点。

    .right:hover:before {
        content: '';
        height: 0.5em;
        width: 1.4em;
        background-color: #333333;
        display: inline-block;
        transform: translate(6px,-6px);
        max-width: 2em;
        transition: 0.5s all ease-in-out;
    }
    .right:before {
        content: '';
        transition: 0.5s all ease-in-out;
        max-width: 0em;
    }
    

    如果你插入这个,你必须删除 .right:hover。检查this pen

    【讨论】:

    • 看起来很棒,只是需要稍微打磨一下。但我了解它的工作原理。谢谢
    • 伪类很强大。干杯!
    • 看起来不错,只需将heighttransform 属性从.right:hover:before 移动到.right:before,所以它不会从底部以那种奇怪的方式进行动画处理