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

interpolate-size 属性

interpolate-size 是 CSS 中的一个属性,用于启用元素大小的动画和过渡,特别是从固定长度(如像素值)到内在大小关键字(如 automin-contentmax-contentfit-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 中的一个函数,用于对内在大小值(如 autofit-content 等)进行数学计算。它允许你基于一个基础大小(basis)来添加、减去或进行其他运算,从而生成一个新的大小值。这特别有用在响应式设计、容器查询或需要动态调整大小的场景中。

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

    • basis:基础大小,可以是内在关键字(如 automin-contentmax-contentfit-contentstretch)或长度值。
    • calculation:计算表达式,如 basis + 10pxbasis - 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-sizecalc-size() 经常一起使用,尤其在需要动画涉及内在大小的场景中。例如,calc-size() 可以生成一个基于 auto 的计算值,而 interpolate-size 确保从一个计算值到另一个的过渡是平滑的。这解决了长期以来 CSS 中动画 height: auto 的痛点。

相关推荐
kyriewen7 小时前
Anthropic 估值逼近万亿美元,Claude Sonnet 5 + Claude Science 一天两连发
前端·ai编程·claude
小徐_23338 小时前
Wot UI 2.2.0 发布:Button 新增 subtle,VideoPreview 预览体验继续增强
前端·微信小程序·uni-app
天蓝色的鱼鱼10 小时前
关于 CSS 你可能不知道的属性,但关键时刻很有用
前端·css
泯泷11 小时前
第 2 篇:设计第一套字节码:Opcode、Instruction 与 Constant Pool
前端·javascript·安全
妙码生花11 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(十五):优化细节、网络请求封装
前端·后端·ai编程
泯泷11 小时前
第 1 篇:从 1 + 2 开始:亲手写出第一台 JSVM
前端·javascript·安全
团团崽_七分甜11 小时前
Spring Boot 核心知识点总结
前端
lichenyang45312 小时前
从一个按钮开始,理解 ASCF 框架到底在做什么
前端
古夕12 小时前
第三方 SSO 接入实践:redirect_uri 编码、回调一致性与跨项目联调
前端·vue.js