代码之家  ›  专栏  ›  技术社区  ›  Toniq

CSS从底部从其高度为div设置动画

  •  0
  • Toniq  · 技术社区  · 7 年前

    我试图实现以下,动画文本div从底部为其全高。当我可以为transformY获得它的高度时,我就可以用javascript来实现这一点。有没有一种方法可以用纯css来实现这一点?

    (注意,transformY目前是showcase的硬编码)。

    $('.trigger').click(function() {
      $('.inner').css({"transform": "translateY(73px)"});
    });
    .wrap {
      position: absolute;
      width: 200px;
      height: 100px;
      top: 50px;
      left: 0;
      overflow: hidden;
      background-color: #333;
      color: #FFF;
    }
    
    .inner {
         position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        margin: 0;
        padding: 5px;
        color: #fff;
        font-size: 15px;
        background: rgba(0,0,0,0.5);
        box-sizing: border-box;
        transition-property: transform;
        transition-duration: 0.2s;
        transition-timing-function: ease-out;
        transform: translate(0, 100px);
      
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <button class="trigger">
      show it
    </button>
    
    <div class="wrap">
      <div class="inner">Lorem ipsum dolor</div>
    </div>
    1 回复  |  直到 7 年前
        1
  •  1
  •   Temani Afif    7 年前

    使用 top:100% 要首先隐藏文本,因为顶部的百分比值考虑容器的高度。然后使用 transformY(-100%) 为了显示它,因为内部变换的百分比考虑变换后的元素的高度:

    /*$('.trigger').click(function() {
      $('.inner').css({
        "transform": "translateY(-100%)"
      });
    });*/
    .wrap {
      width: 200px;
      height: 100px;
      margin:10px;
      overflow: hidden;
      background-color: #333;
      color: #FFF;
      position:relative;
    }
    
    .inner {
      position: absolute;
      top: 100%;
      left: 0;
      width: 100%;
      padding: 5px;
      color: #fff;
      font-size: 15px;
      background: rgba(0, 0, 0, 0.5);
      box-sizing: border-box;
      transition: transform 0.2s ease-out;
    }
    .wrap:hover .inner{
     transform:translateY(-100%);
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <button class="trigger">
      show it
    </button>
    
    <div class="wrap">
      <div class="inner">Lorem ipsum dolor<br>Lorem ipsum dolor</div>
    </div>
    
    <div class="wrap">
      <div class="inner">Lorem ipsum dolor</div>
    </div>