CSS 动画 - 高度变化时的过渡效果

本贴最后更新于 1930 天前,其中的信息可能已经时移世易

2019-08-09

描述

在一个元素高度不确定的情况下,为其做一个高度从 0auto 的过渡效果。

HTML

<div class="trigger">
  Hover me to see a height transition.
  <div class="el">content</div>
</div>

CSS

.el {
  transition: max-height 0.5s;
  overflow: hidden;
  max-height: 0;
}
.trigger:hover > .el {
  max-height: var(--max-height);
}

JavaScript

var el = document.querySelector('.el')
var height = el.scrollHeight
el.style.setProperty('--max-height', height + 'px')

Demo

说明

CSS

  1. transition: max-height: 0.5s cubic-bezier(...) 表示当 max-height 变化时需使用 ease-out-quint 时间函数让其持续 0.5 秒的过渡效果
  2. overflow: hidden 阻止隐藏元素的内容从他的容器中溢出
  3. max-height: 0 specifies that the element has no height initially.
  4. .target:hover > .el specifies that when the parent is hovered over, target a child .el within it and use the --max-height variable which was defined by JavaScript.

JavaScript

  1. el.scrollHeight 一个元素包含溢出部分的高度,他会根据元素内容进行动态的变化
  2. el.style.setProperty(...) 用于设置 CSS 变量 --max-height,可以指定当鼠标移动到元素上时该元素的 max-height,进而实现从 0 到 auto 的过渡效果

浏览器支持

支持率:91.6%
支持情况:

⚠️:每一帧的动画都会导致重绘,如果元素下方有大量的元素存在,那么在高度效果过渡的时候就可能会产生延迟。

返回总目录

每天 30 秒系列之 CSS

  • 30Seconds

    📙 前端知识精选集,包含 HTML、CSS、JavaScript、React、Node、安全等方面,每天仅需 30 秒。

    • 精选常见面试题,帮助您准备下一次面试
    • 精选常见交互,帮助您拥有简洁酷炫的站点
    • 精选有用的 React 片段,帮助你获取最佳实践
    • 精选常见代码集,帮助您提高打码效率
    • 整理前端界的最新资讯,邀您一同探索新世界
    488 引用 • 384 回帖 • 8 关注
  • CSS

    CSS(Cascading Style Sheet)“层叠样式表”是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。

    198 引用 • 550 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...