javascript - 如何对现有列表项使用 CSS 转换来为新列表项腾出空间?

标签 javascript html css

假设我有以下 HTML:

<ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>AlwaysAtTheEnd</li>
</ul>

在列表项 3 之后,我将使用 javascript 插入列表项 4。之后,HTML 将如下所示:

<ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>AlwaysAtTheEnd</li>
</ul>

但是,我希望“AlwaysAtTheEnd”元素顺利向下滑动以为新元素腾出空间,而不是立即弹出来腾出空间。

我尝试简单地添加以下 CSS,但似乎没有任何影响:

li {
    -webkit-transition: all 1s ease-in-out;
    -moz-transition: all 1s ease-in-out;
    -o-transition: all 1s ease-in-out;
    transition: all 1s ease-in-out;
}

在这里 fiddle :http://fiddle.jshell.net/pcsj2mgb/

编辑:固定 fiddle :http://fiddle.jshell.net/pcsj2mgb/1/

最佳答案

可以使用 CSS 完成,尽管您需要定义 li 元素的最终高度,以便您可以将动画设置为该高度。

当然,您需要将 newItem 类添加到要追加的元素中,以便 CSS 对其产生影响。

更新:无需定义最终高度!让我们为 max-height 设置动画。更新了代码段。

add = function() {
  listItems = document.getElementsByTagName('li');
  var lastItem = listItems[listItems.length - 1]
  var newItem = document.createElement('li');
  newItem.innerHTML = "4";

  newItem.classList.add("newItem");

  lastItem.parentNode.insertBefore(newItem, lastItem);
}
.newItem {
  max-height: 0;
  opacity: 0;
  animation: grow 1s ease-in-out forwards;
  -webkit-animation: grow 1s ease-in-out forwards;
}
@-webkit-keyframes grow {
  to {
    max-height: 20px;
    opacity: 1;
  }
}
@keyframes grow {
  to {
    max-height: 20px;
    opacity: 1;
  }
}
<ul>
  <li>1</li>
  <li>2</li>
  <li>3</li>
  <li>AlwaysAtTheEnd</li>
</ul>
<button onClick="add()">Add</button>

关于javascript - 如何对现有列表项使用 CSS 转换来为新列表项腾出空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28498286/

相关文章:

javascript - FB.api 不返回用户名

javascript - 将多条记录添加到本地存储

css - 使用javascript订购div

html - 从内侧绕箭头

html - CSS 中@media 查询的标准断点是什么?

javascript - 计算文本选择的 xy 位置

javascript - 在 asp 中将变量传递给 javascript 函数失败 :dropdownlist

javascript - Angular 2 typescript : concat() work as mutable

html - 我该怎么做才能使用 canvas/div 而不是图像来创建 Jquery 卷轴效果?

javascript - 父级/最近的 Div 问题