我正在努力实现以下效果,从底部开始为整个div动画文本div。当我可以获取transformY的高度时,可以使用javascript进行此操作。有没有办法用纯CSS做到这一点?

(请注意,transformY目前已进行硬编码以用于展示)。



$('.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>

最佳答案

使用top:100%最初隐藏文本,因为top内的百分比值考虑了容器的高度。然后使用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>

关于html - CSS从底部开始从底部开始动画div,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53073884/

10-11 23:48