导读:本期聚焦于小伙伴创作的《如何通过css animation控制高度和宽度变化》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何通过css animation控制高度和宽度变化》有用,将其分享出去将是对创作者最好的鼓励。

在前端页面交互开发中,经常需要实现元素高度和宽度的动态变化效果,比如下拉菜单展开、卡片尺寸切换、加载动画等场景,使用css animation可以高效实现这类效果,并且能灵活控制变化的过程和规则。

如何通过css animation控制高度和宽度变化

css animation控制尺寸变化的核心原理

css animation通过定义@keyframes关键帧规则,指定元素在不同时间节点的样式状态,再配合animation相关属性控制动画的播放时长、时间曲线、延迟、循环次数等参数,从而实现高度和宽度的平滑变化。

要实现高度和宽度的变化,核心就是在关键帧中设置不同的heightwidth属性值,浏览器会自动计算两个关键帧之间的过渡状态,生成连续的动画效果。

基础实现步骤

1. 定义关键帧

使用@keyframes定义动画名称,然后在内部设置起始和结束状态的高度、宽度值,也可以添加中间状态的关键帧。

/* 定义名为sizeChange的动画 */
@keyframes sizeChange {
  /* 起始状态:高度100px,宽度100px */
  from {
    height: 100px;
    width: 100px;
  }
  /* 结束状态:高度200px,宽度200px */
  to {
    height: 200px;
    width: 200px;
  }
}

2. 绑定动画到元素

在目标元素的样式中,通过animation-name指定要使用的动画名称,再通过animation-duration设置动画播放时长,其他属性可以根据需求可选配置。

.target-element {
  /* 初始高度和宽度,和关键帧起始状态保持一致 */
  height: 100px;
  width: 100px;
  background-color: #4CAF50;
  /* 指定使用的动画名称 */
  animation-name: sizeChange;
  /* 动画播放时长2秒 */
  animation-duration: 2s;
  /* 时间曲线为匀速 */
  animation-timing-function: linear;
}

3. 完整示例

下面是一个点击按钮触发元素尺寸变化的完整示例,动画播放完成后会保持结束状态。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>css animation尺寸变化示例</title>
  <style>
    .box {
      height: 100px;
      width: 100px;
      background-color: #4CAF50;
      /* 默认不播放动画 */
      animation: none;
    }
    /* 定义动画 */
    @keyframes sizeChange {
      from {
        height: 100px;
        width: 100px;
      }
      to {
        height: 200px;
        width: 200px;
      }
    }
    .box.animate {
      /* 触发动画:名称sizeChange,时长2s,匀速,播放1次,结束后保持最终状态 */
      animation: sizeChange 2s linear 1 forwards;
    }
    button {
      margin-top: 20px;
      padding: 8px 16px;
      cursor: pointer;
    }
  </style>
</head>
<body>
  <div class="box"></div>
  <button onclick="document.querySelector('.box').classList.toggle('animate')">切换尺寸动画</button>
</body>
</html>

常用动画属性说明

除了animation-nameanimation-duration,还有多个属性可以调整动画效果,具体说明如下:

属性名作用常用取值
animation-timing-function设置动画的时间曲线,控制变化的速度节奏ease(默认,慢快慢)、linear(匀速)、ease-in(慢入)、ease-out(慢出)、cubic-bezier(n,n,n,n)(自定义曲线)
animation-delay设置动画开始前的延迟时间单位s或ms,比如1s表示延迟1秒播放
animation-iteration-count设置动画播放的次数1(默认播放1次)、infinite(无限循环)、具体数字
animation-direction设置动画播放的方向normal(默认正向)、reverse(反向)、alternate(正向交替)、alternate-reverse(反向交替)
animation-fill-mode设置动画播放前后元素的样式状态none(默认无额外样式)、forwards(播放后保持结束状态)、backwards(播放前应用起始状态)、both(同时应用前后状态)

注意事项

  • 如果元素的高度或宽度初始值是auto,直接设置关键帧的尺寸变化可能无法生效,建议先给元素设置明确的初始高度和宽度值。
  • 频繁触发尺寸变化的动画时,尽量使用transform属性的scale来实现缩放效果,相比直接修改heightwidthtransform的动画性能更好,不会触发页面的重排。
  • 如果需要兼容旧版本浏览器,需要添加对应浏览器前缀,比如-webkit-@keyframes-moz-@keyframes等。
  • 当元素内容高度不确定时,想要实现高度从0到自适应内容的动画,可以结合max-height属性,设置一个足够大的max-height值作为结束状态,避免直接使用height:auto无法触发动画的问题。

max-height实现自适应高度动画示例

下面是使用max-height实现下拉菜单展开收起效果的示例,内容高度不确定也能正常播放动画。

/* 菜单容器默认收起 */
.menu {
  max-height: 0;
  overflow: hidden;
  transition: max-height 0.3s ease-out;
  background-color: #f5f5f5;
  width: 200px;
}
/* 展开状态,设置一个足够大的max-height值 */
.menu.open {
  max-height: 500px;
  transition: max-height 0.5s ease-in;
}
注意这里使用的是transition属性,它和animation的区别是transition只能定义起始和结束两个状态,而animation可以通过关键帧定义多个中间状态,两者都可以实现尺寸变化效果,根据场景选择即可。

css_animationheight变化width变化transition关键帧修改时间:2026-07-22 20:57:36

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。