惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
Netflix TechBlog - Medium
G
Google Developers Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
T
The Blog of Author Tim Ferriss
Microsoft Azure Blog
Microsoft Azure Blog
GbyAI
GbyAI
L
LangChain Blog
云风的 BLOG
云风的 BLOG
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
aimingoo的专栏
aimingoo的专栏
P
Proofpoint News Feed
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
小众软件
小众软件
WordPress大学
WordPress大学
A
About on SuperTechFans
大猫的无限游戏
大猫的无限游戏
C
Check Point Blog
月光博客
月光博客
Stack Overflow Blog
Stack Overflow Blog
美团技术团队
Jina AI
Jina AI
T
Tailwind CSS Blog
Google DeepMind News
Google DeepMind News
D
Docker

博客园 - 码间留白

uniapp打包的APP内嵌H5游戏切后台背景音乐停不下来的解决方案 微信小程序审核总被拒?掌握这套“极简闭环”方案,轻松通关,亲测有效! uni-app 项目鸿蒙原生适配实录:微信授权登录从"点击无反应"到真机跑通,条件编译、SDK 配置与那些官方文档没说清的坑 uniapp项目鸿蒙适配,rebuild 后同步原生工程的三种方案与分层决策 uniapp项目适配鸿蒙端没有自定义基座,调试和打包怎么办? 鸿蒙纯血系统适配实战记录:uView + Vue3 的 uni-app 项目适配鸿蒙 NEXT,一天搞定主功能运行到鸿蒙纯血系统 AI辅助前端开发实战指南:高效落地、避坑沉淀全流程 uni-app 集成网易云信通话插件:首页通话监听一直只有第一次有日志?从监听丢失到重复上报的完整治理之路 即时通信 IM 踩坑实录:群主拉人入群后无法收消息?一文讲透 10007 错误码 AI时代插件开发新玩法,分分钟抽离封装插件,你需要做的只是发布到插件市场 PhotoShop CS6在win11系统中界面字体很小,通过兼容性设置强制高 DPI 缩放即可解决 不会后端不用愁,Strapi解你忧——使用Qoder生成前端开发框架,技术栈React18 + Vite + ReactRouter6 + Axios + vw 适配 + Ant Design Mobile + Zustand + Strapi5 不会后端不用愁,Strapi解你忧——Strapi后台数据表创建及API联调测试,实现查询文章及关联的分类、标签、评论等表连接查询 不会后端不用愁,Strapi解你忧——搭建博客系统常用数据表设计 windows11系统如何安装多个版本的node,新旧项目切换再也不需要卸载重装了 不会后端不用愁,Strapi解你忧——前端使用Strapi就能实现常见的数据增删查改,分页、排序、模糊查询、时间范围等,不要后端也能自己建站 不会后端不用愁,Strapi解你忧——Windows 11 本地完整部署 Strapi + MySQL 8 实操攻略,从下载到配置启动全指南 不会后端不用愁,Strapi解你忧——Strapi v5.4设置中文语言展示 win11电脑浏览器无法上网但微信正常使用,通常是因为‌DNS解析失败‌,手动设置可靠的公共DNS服务器地址来解决问题 高效能CI/CD流水线设计:Jenkins与Docker的7个关键优化点 从零搭建 Docker + Jenkins CI/CD 流水线:实现项目自动化构建与部署 AI辅助开发——阿里Qoder重构vue2项目到vue3后继续对项目页面加载速度进行优化 vue3项目本地环境网路请求初始连接过久导致接口请求时间过长的问题处理 微信小程序内嵌vue项目实现页面自定义分享完整示例代码 JavaScript 数组高阶用法汇总(含浏览器+微信小程序WebView支持) 京东小程序报错APP-SERVICE-SDK:setStorageSync:fail vue3+ts项目自定义全局函数调用正常但IDE报异常类型ComponentPublicInstance上不存在属性“$showLoading" vue项目实现Tab页面触底上拉切换下个Tab vue3+ts实现页面滚动位置的保存及恢复 到底是用vue2还是vue3好?
css3过渡效果如何处理高度不确定的动态内容
码间留白 · 2025-11-05 · via 博客园 - 码间留白

如下图,要实现一个超出一定高度默认折叠的div层,下边带有展开/折叠按钮,点击按钮实现展开/折叠。

image

 原来的代码:

.attrTable {
      border-right: 1px solid #f5f5f5;
      border-bottom: 1px solid #f5f5f5;
      height: auto;
      transition: height 1s ease;

      &.collapse {
        height: 400px;
        overflow: hidden;
      }
}

这种写法是不会生效的,由于div层的高度是auto,折叠后的高度是400px,浏览器无法计算从auto到400px的过渡处理。当然也可以在获取数据并渲染之后实时计算具体高度,但这个就太复杂了。

有效的解决方案就是使用max-height代替height,代码如下:

.attrTable {
  border-right: 1px solid #f5f5f5;
  border-bottom: 1px solid #f5f5f5;
  height: auto; /* 保持动态高度 */
  max-height: 5000px; /* 展开时上限(远大于实际动态高度) */
  overflow: visible; /* 展开时显示全部内容 */
  transition: max-height 1s ease; /* 过渡目标改为 max-height */

  &.collapse {
    max-height: 400px; /* 折叠时固定上限 */
    overflow: hidden; /* 隐藏超出部分 */
  }
}

如上,给div层设置一个很大的max-height,使用max-height来作为动态效果触发的样式,就能实现展开/折叠的过渡效果了。

关键说明:
1. max-height 取值技巧:
展开状态的 max-height 要设为 “肯定大于动态高度” 的数值(如 5000px,根据你的实际场景调整,只要不小于最大可能高度即可)。
折叠状态的 max-height 保持你要的 400px,实现 “固定高度折叠”。
2. 为什么生效:
展开时:max-height: 5000px(实际高度由内容决定,动态自适应),overflow: visible 显示全部内容。
折叠时:max-height: 400px,超出部分被 overflow: hidden 隐藏,且 max-height 从 5000px → 400px 是 “数值→数值” 的过渡,浏览器能正常计算动画。
3. 优化体验(可选):
如果动态高度很小(比如不到 400px),折叠时可能看不到过渡效果,可给展开状态加最小高度兜底:

.attrTable {
  /* 其他样式不变 */
  min-height: 100px; /* 确保展开时至少有一定高度,过渡更明显 */
}