纯css实现高度0-auto动画过度interpolate-size 和 height: calc-size(auto,size)

interpolate-size 属性

interpolate-size 是 CSS 中的一个属性,用于启用元素大小的动画和过渡,特别是从固定长度(如像素值)到内在大小关键字(如 auto、min-content、max-content 或 fit-content)之间的平滑变化。通常,默认情况下,CSS 动画无法直接从 height: 100px 过渡到 height: auto,因为 auto 不是一个可插值的数值。但通过设置 interpolate-size: allow-keywords,你可以允许这种插值,从而实现更平滑的动画效果。

  • 语法 :interpolate-size: numeric-only | allow-keywords;

    • numeric-only:默认值,仅允许数值之间的插值。
    • allow-keywords:允许关键字(如 auto)参与插值。
  • 用法示例:

    css 复制代码
    .element {
      interpolate-size: allow-keywords;
      height: 0;
      transition: height 0.5s ease;
    }
    
    .element:hover {
      height: auto;  /* 现在可以平滑过渡到 auto 值 */
    }
  • 浏览器支持:这是一个较新的功能,Browser Support

  • Chrome: 129. ✅

  • Edge: 129. ✅

  • Firefox: not supported. ❌

  • Safari: not supported. ❌

calc-size() 函数

calc-size() 是 CSS 中的一个函数,用于对内在大小值(如 auto、fit-content 等)进行数学计算。它允许你基于一个基础大小(basis)来添加、减去或进行其他运算,从而生成一个新的大小值。这特别有用在响应式设计、容器查询或需要动态调整大小的场景中。

  • 语法 :calc-size(basis, calculation);

    • basis:基础大小,可以是内在关键字(如 auto、min-content、max-content、fit-content、stretch)或长度值。
    • calculation:计算表达式,如 basis + 10px、basis - 20%、clamp(100px, basis, 500px) 等。
  • 用法示例 (针对 height: calc-size(auto, size)): 用户查询中的 "size" 可能是一个占位符或简写,指代计算表达式(如 basis + 10px)。假设这是 height: calc-size(auto, basis + 10px) 的变体,以下是一个实际例子:

    css 复制代码
    .element {
      height: calc-size(auto, basis + 10px);  /* 基于 auto 高度再加 10px */
    }

    这会计算元素的内在 auto 高度,然后在其基础上增加 10px。如果是动画,可以结合 interpolate-size 使用:

    css 复制代码
    .element {
      interpolate-size: allow-keywords;
      height: calc-size(auto, basis + 10px);
      transition: height 0.5s ease;
    }
    
    .element:hover {
      height: calc-size(auto, basis + 50px);  /* 平滑过渡到更大的计算高度 */
    }
  • 浏览器支持 :类似于 interpolate-size,

  • Chrome: 129. ✅

  • Edge: 129. ✅

  • Firefox: not supported. ❌

  • Safari: not supported. ❌

两者结合使用

interpolate-size 和 calc-size() 经常一起使用,尤其在需要动画涉及内在大小的场景中。例如,calc-size() 可以生成一个基于 auto 的计算值,而 interpolate-size 确保从一个计算值到另一个的过渡是平滑的。这解决了长期以来 CSS 中动画 height: auto 的痛点。

相关推荐
excel20 分钟前
Base62 和 Base64 有什么区别?
前端
风骏时光牛马2 小时前
大模型底层架构与AI源码深度剖析
前端
掘金挖土2 小时前
前端手摸手跑路之 AI 应用开发(九)
前端·后端
中文呀5 小时前
三维 GIS 离线缓存实战:逆向 CesiumOfflineCache,并亲手为它补上"自动更新"能力
前端
前进前进前进5 小时前
TRAE 全链路实战:做了一个警示牌一键生成器:纯 Canvas、单文件、零依赖
前端
小万7427 小时前
God‘s Eye View 深度解析:15 路公开信号 + CesiumJS 的浏览器级 OSINT 控制台,60 帧渲染的“真实间谍卫星模拟器”
前端
IT星宿7 小时前
浏览器标签页全是一个图标:我用名字哈希生成 favicon,让每个项目都有身份标识
前端
全栈项目管理程序猿7 小时前
ArcGIS JS 基础教程(32):体元系列 - VoxelSlice 体元切片
前端·javascript
拖孩9 小时前
AI 帮我写的小程序「厨菜记」上线满月了,挣了两百块!!!
前端·后端·微信小程序