如何根据内容变化制作宽度/高度变化的动画?

mpe*_*pen 3 css animation css-transitions css-animations

在下面的示例中,当您单击按钮时,某些内容将添加到 div 中。我想让 div 变得更大。这可以用纯 CSS 实现吗?

$('#btn').on('click', function() {
  $('#content').append("<p>Ab atque aut cumque dolor exercitationem officia, perferendis quis vel. Autem deserunt ea maiores quaerat quos temporibus! Aperiam dolorem dolores, eaque ex ipsam laborum minima nesciunt nulla porro quaerat vel?</p>");
});
Run Code Online (Sandbox Code Playgroud)
#content {
  background-color: yellow;
  
  transition: width 1s, height 1s;
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="content">

  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ab cupiditate debitis dolores dolorum ea, eligendi ex, expedita illum incidunt ipsum itaque neque optio quisquam quo vel veniam voluptatem voluptatibus, voluptatum.</p>

</div>

<button id="btn">click me</button>
Run Code Online (Sandbox Code Playgroud)

小智 5

您需要对 #content 使用掩码包装器,并对它应用 css 过渡,并使用 Javascript 更改它的高度。每次追加新内容(高度更改)时,您都需要从 #content 获取新高度。

var $contentMask = $('#contentMask');
var contentBoxId = '#content';
var currentHeight = getCurrentHeight(contentBoxId);
$contentMask.css('height', currentHeight);

$('#btn').on('click', function() {
  $(contentBoxId).append("<p>Ab atque aut cumque dolor exercitationem officia, perferendis quis vel. Autem deserunt ea maiores quaerat quos temporibus! Aperiam dolorem dolores, eaque ex ipsam laborum minima nesciunt nulla porro quaerat vel?</p>");
  currentHeight = getCurrentHeight(contentBoxId);
  $contentMask.css('height', currentHeight);
});

function getCurrentHeight(selector) {
 return $(selector).height();
}
Run Code Online (Sandbox Code Playgroud)
#content {
  background-color: yellow;
}
#contentMask {
  overflow: hidden;
  transition: height 1s ease;
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="contentMask">
  <div id="content">
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ab cupiditate debitis dolores dolorum ea, eligendi ex, expedita illum incidunt ipsum itaque neque optio quisquam quo vel veniam voluptatem voluptatibus, voluptatum.</p>
  </div>
</div>

<button id="btn">click me</button>
Run Code Online (Sandbox Code Playgroud)

您也可以在 jsfiddle 中看到它:https://jsfiddle.net/iamgutz/fsagbLn9/

  • 我真的希望我不会向“点击”处理程序添加任何内容。DOM 更改实际上是由 React 处理的——这将非常困难,如果不是不可能的话……或者也许不是,我确实有一个 `render()` 方法。必须对此进行实验。谢谢 (2认同)