纯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 的痛点。

相关推荐
春生野草2 小时前
Ruoyi前端基于vue的脚手架的目录解析
前端·javascript·vue.js
m0_740043732 小时前
Axios拦截器 -- 请求拦截器和响应拦截器
开发语言·前端·javascript
不会代码的小猴2 小时前
C++的第十一天笔记
java·前端·jvm
风止何安啊3 小时前
递归 VS 动态规划:从 “无限套娃计算器” 到 “积木式解题神器”
前端·javascript·算法
ohyeah3 小时前
使用 Vue 3 实现大模型流式输出:从零搭建一个简易对话 Demo
前端·vue.js·openai
GPTMirrors镜像系统3 小时前
JS 实现指定 UA 访问网站跳转弹窗提醒,解决夸克等浏览器兼容性问题
前端·javascript
踢球的打工仔3 小时前
前端html(2)
前端·算法·html
Rysxt_3 小时前
Vue文件下载功能完整指南:从基础实现到进阶实战
前端·javascript·vue.js
一 乐4 小时前
智慧养老|基于springboot+小程序社区养老保障系统设计与实现(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·后端·小程序
冰暮流星4 小时前
css3网格布局2
前端·css·css3