导航

萌即是正义!时不时分享一些ACG活动记录与有趣代码的小站!

侧边栏
热门文章
1博文
360度带你看《超时空辉夜姬》联动KTV联动房间
热度
1348
2页面
程序员老黄历&求签
热度
1287
3推文
让AI生成了一个记账网页应用。 完全按照我自己的需求定制的记账应用。当然也有一定的通用性。 支持响应式布局,所以手机也能用。 本人只贡献了需求和修改了一丢丢UI体验。 成品还是很满意的,看来AI时代,小工具根本不需要下什么APP了。 直接自己定制应用的好时代来了呀! 项目地址:https://github.com/eeg1412/wikimoeBookkeeping ※截图是测试数据,不是我发财了。
热度
91
4博文
探访日本的废校:《中二病也要谈恋爱!》圣地巡礼之杜鹃花学校(原镰挂小学)
热度
91
5页面
追番
热度
91
6推文
给维基萌公会联盟增加了一些自动化处理。 虽然好像这游戏已经没人玩了,但还是更新了一些功能。 ·冒险家们可以直接一键升级到最高等级,直接连公会等级也自动升级了。 ·迷宫增加了自动挑战迷宫军团,一键打到最高等级的迷宫。 ·竞技场增加了自动对战,一键消耗完所有挑战次数。 ·增加了机器人玩家,会根据设定好的行动树模拟玩家操作,属于是把游戏玩成单机了。
热度
78
7推文
一个多月过去了,《超时空辉夜姬》仍然在上映。 想想一开始说一周限定上映,导致每天凌晨和数万人抢票。现在想想果然是中了饥饿营销的套路😅。 当然作品本身质量还是很棒的。只是这营销方式不是非常认可。
热度
78
8博文
《爱上火车》与《铁路浪漫谭》的圣地巡礼之人吉
热度
78
9页面
友链
热度
65
10博文
《点兔》官网愚人节活动「Magical Order Rabbit」
热度
52
最新评论
广树管理员
2026-04-13 21:03
@Eofs:嘿嘿 看过立省7500日元
Eofs
2026-04-13 11:19
哇这个全景好
广树管理员
2026-04-12 18:37
@PeterJXL:可以记一个假装自己暴富的收入
PeterJXL
2026-04-12 16:38
记账 8 年了,还是穷 😇
广树管理员
2026-04-12 14:05
@石樱灯笼:毕竟属于生活中高需求又需要一些私人定制的应用。
攻略中
告别回忆 双想 ~Not always true~
暂无评分
Steam告别回忆 双想 ~Not always true~
2026年3月10日 22时 ~ 攻略中
已累计游玩1个月4天
“我觅见了生命中的唯一,而后——”
亚路塔:狐狸狐途的面包冒险
暂无评分
Steam亚路塔:狐狸狐途的面包冒险
2026年2月12日 19时 ~ 攻略中
已累计游玩2个月
一场席卷全世界的面包革命现在开始! 主人公查雅阴错阳差之下,开始了在荒废的岛屿上经营面包店的生活。 出外冒险搜集食材、研发崭新面包配方、遇见性格各异的伙伴们,建造更丰富的设施,用面包香气使无人问津的广场再次热闹起来!
ToHeart
暂无评分
SteamToHeart
2025年6月26日 19时 ~ 攻略中
已累计游玩9个月21天
AQUAPLUS推出的“温暖人心的校园恋爱游戏”将以高清全3D形式焕新归来!
fault - StP - LIGHTKRAVTE
暂无评分
Steamfault - StP - LIGHTKRAVTE
2025年5月29日 20时 ~ 攻略中
已累计游玩10个月19天
全球累计销量超过50万份的“fault”系列最新作!故事的舞台是一个融合了奇幻与科幻的超前世界——卢森海德王国。本作讲述了生活在此地的一个平凡又平庸的究极普通市民——名为果子的少年的故事。
PSN奖杯卡

PSN奖杯卡

归档
赞助商广告

让宽高自动过渡动画不再那么繁琐!CSS新功能 interpolate-size 和 calc-size()

作者:广树时间:2024-07-21 10:51:23分类:CSS/HTML

在 CSS 动画中从 height: 0 过渡到 height: auto 看起来应该很简单,但实际上 CSS 无法从 任何数值 过渡到 height: auto ,因为它需要一个具体的高度值来运行任何动画或过渡。在过去,开发者只能使用 JavaScript 来计算元素的高度并进行动画处理,这显然不是理想的解决方案。因此,CSS 终于引入了全新的 interpolate-size属性 和 calc-size() 函数,使这种类型的动画变得非常简单。


概述

CSS 新增的 interpolate-size 属性和 calc-size() 函数极大地增强了对内在尺寸关键字(如 auto、min-content、fit-content 等)的动画和过渡能力。这些工具的出现,使得不同尺寸之间的平滑动画成为可能,解决了网页开发者长期以来的痛点。


calc-size() 函数

calc-size() 函数的工作原理与 calc() 函数相同,但它增加了基于浏览器自动计算尺寸的能力。这些值包括:

  • auto
  • min-content
  • max-content
  • fit-content
  • stretch
  • contain

基本上,calc-size() 函数将诸如 auto 之类的值转换为特定的像素值,然后与其他值一起进行计算。这在动画自动调整大小的元素时特别有用。

例子:

.element {
  height: 0;
  overflow: hidden;
  transition: height 0.3s;
}

.element.open {
  height: calc-size(auto);
}

通过在 calc-size() 函数中包装 auto 值,可以在不使用任何 JavaScript 的情况下,从 0 过渡到 auto 高度。

需要注意的是,不能在两个自动计算的值之间进行动画,例如 auto 和 min-content 之间。

另一个有趣的方面是,只要在动画的某一个具体数值上使用 calc-size(),也能使动画生效。

比如:

.element {
  height: calc-size(0px);
  overflow: hidden;
  transition: height 0.3s;
}

.element.open {
  height: auto;
}


interpolate-size 属性

interpolate-size 属性允许对内在尺寸关键字进行动画和过渡。通过在根元素中指定 interpolate-size: allow-keywords,可以启用整个页面的新行为。这意味着可以不再依赖calc-size,全局使用新的过渡动画。

例子:

:root {
  interpolate-size: allow-keywords;
}
.element {
  height: 0px;
  overflow: hidden;
  transition: height 0.3s;
}
.element.open {
  height: auto;
}


计算

尽管上述情况是最常见的用例,但由于该函数与 calc() 函数的工作方式相同,它实际上可以用于进行以前在 CSS 中不可能进行的某些计算。

比如:

.element {
  width: calc-size(min-content, size + 50px);
}

上述 CSS 将元素的宽度设置为最小内容大小加 50 像素。语法可能有点复杂,所以进行解释:

calc-size() 接受两个参数,第一个是要计算的大小,第二个是要执行的计算。在这个例子中,计算元素的最小内容大小,然后加上 50 像素。关键字 size 始终表示传递给 calc-size 的第一个属性的当前大小。这意味着在这个例子中,size 等于元素的最小内容大小。

甚至可以嵌套多个 calc-size() 函数以进行更复杂的计算:

.element {
  width: calc-size(calc-size(min-content, size + 50px), size * 2);
}

这将计算元素的最小内容大小,加上 50 像素,然后将结果乘以 2。


浏览器支持

截至目前,calc-size() 仅在启用了 #enable-experimental-web-platform-features 标志的 Chrome 中受支持。还没有出现在 caniuse.com 上。

其他主流浏览器,例如火狐、Safari也已经开放了相应的Issues:

火狐: https://github.com/mozilla/standards-positions/issues/1022

Safari: https://github.com/WebKit/standards-positions/issues/348

相信明年的这个时候,主流浏览器应该都会支持吧。


相关链接

W3C: https://drafts.csswg.org/css-values-5/#calc-size

donate.png


telegram banner (1).png