【问题标题】:How to make the translate transform start from the element?如何使翻译变换从元素开始?
【发布时间】:2018-10-22 04:37:40
【问题描述】:

我在CSS 中实现了一个简单的动画一举。此动画在按钮单击时触发。我对结果很满意,但我可以做得更好。我希望突然出现的文本从按钮元素本身开始,而不是一直从页面边缘开始。我尝试更改翻译属性,但没有任何运气。我想知道是否有人可以就如何修复它给我一些建议,如果可以优化代码以使用SASS/SCSS,那就太好了。

编辑:用 SCSS 更新代码:

这是动画的代码:

HTML:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="swoop-in">
  <div class="swoop-in-content">
    PRETTY NEAT TRANSITION BLAH BLAH..
  </div>
</div>

<button class="toggle">Toggle</button>

CSS:

 swoop-in {
   position: absolute;
   right: 0px;
   top: 140px;
   width: 220px;
   margin-left: -30px;
   &.show .swoop-in-content {
      transform: translateX(0);
      opacity: 1;
      -webkit-transform: translateX(0);
   }
   .swoop-in-content {
      transform: translateX(100%);
      -webkit-transform: translateX(100%);
      opacity: 0;
      transition: all .5s ease;
   }
}

.toggle {
  position: absolute;
  top: 120px;
  right: 20px;
  background: none;
  border: 2px solid;
  border-bottom-width: 4px;
  margin: 1em;
  padding: 1em 2em;
  height: auto;
  text-align: center;
  text-transform: uppercase;
  background-color: red;
  &:hover {
    background-color: #9c89f7;
    cursor: pointer;
  }
}

jQuery:

$('.toggle').click(function() {
  $('.swoop-in').toggleClass('show');
});

这是CODEPEN。 使用 SCSS 更新了 CODEPEN

谢谢。

【问题讨论】:

    标签: jquery html sass


    【解决方案1】:

    假设这不是最好的解决方案,但您可以使用它来制作更精美的内容(取决于您将在该动画 div 中拥有的内容)。 https://codepen.io/Yulia_pi/pen/oddpZY 我没有转换位置属性,而是将初始 width: 0px; 更改为所需的属性,并将其定位在按钮的左边缘。为了能够做到这一点,我们还需要设置按钮大小。 overflow: hidden 让过渡 div 中的文字看起来不那么奇怪,但仍然不完美。

    【讨论】:

    • 酷 :) 感谢您的尝试。它确实让我对如何处理它有了一个很好的了解。将在 24 小时后接受答案,以便为任何其他答案留出足够的时间:)
    【解决方案2】:

    也许这个匹配你的需要https://codepen.io/AElkhodary/pen/MGGBvV如果你想改变效果,你可以调整 translate 属性的百分比

    更新

    Safari 遇到transition: all 的问题,我们总是应该指定我们想要转换的内容,因此解决方案是

      transition: transform .4s cubic-bezier(0.25, 0.46, 0.45, 0.94), opacity .4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
    

    $('.toggle').on('click', function() {
      $('.swoop-in').toggleClass('show');
    });
    body {
      max-width: 1200px;
      position: relative;
      margin: auto;
    }
    
    .swoop-in {
      transform: translateX(45%);
      opacity: 0;
      position: absolute;
      right: 120px;
      top: 22px;
      overflow: hidden;
        transition: transform .4s cubic-bezier(0.25, 0.46, 0.45, 0.94), opacity .4s cubic-bezier(0.25, 0.46, 0.45, 0.94);
      z-index: -1;
    }
    .swoop-in.show {
      transform: translateX(0);
      opacity: 1;
    }
    
    .btn {
      text-align: right;
    }
    
    .toggle {
      background: none;
      border: 2px solid;
      border-bottom-width: 4px;
      margin: 1em;
      padding: 1em 2em;
      min-width: 100px;
      height: auto;
      text-align: center;
      text-transform: uppercase;
      background-color: red;
    }
    .toggle:hover {
      background-color: #9c89f7;
      cursor: pointer;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div class="swoop-in">
      PRETTY NEAT TRANSITION BLAH BLAH..
    </div>
    
    <div class="btn">
      <button class="toggle">Toggle</button>
    </div>

    【讨论】:

    • 对不起,我没明白它到底是什么不工作?如果您打开按钮,文本将在您寻找时出现和消失
    • 它没有切换文本。我根本看不到文字。
    • 我刚刚再次检查了它,它完全可以正常工作,即使在 codepen codepen.io/AElkhodary/pen/MGGBvV 中也可以
    • 啊啊。它不适用于 Safari……它适用于 Firefox、Chrome、IE 11 和 Edge。我假设这是因为三次贝塞尔曲线。不过我不确定。有什么想法吗?
    • 嘿 Adel,你有机会在 Safari 上试用吗?
    猜你喜欢
    • 1970-01-01
    • 2019-05-27
    • 2023-04-03
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多