一个困扰十多年的css问题即将被解决啦
CSS里边有个困扰了我们十多年的问题
W3C团队最近终于把它解决了
什么问题呢
我们先来看这个demo哈
现在这个容器的高度是
我们看不到它
但如果我们再写一个height
它肯定会覆盖前面的
对吧?这个没问题
但前提肯定是这里边写的值要合法
比如这样写
它肯定就没办法覆盖
所以我们写一个auto的话
大家看从效果上来看
肯定它是一个合法值
但是呢auto有个最大的问题
就是它不支持过渡动画
大家看我来切换这个auto的时候
没有任何过渡
但如果是100像素的话呢
它是有过渡的 对吧
之前我们碰到这种问题
都是用max-height来解决
比如说这样
我们开始呢把max-height设成
这样呢它也不会显示这个容器
然后呢
我们再把这个max-height设的大一点
比如说3个
大家看它看起来也是有动画
但是这个动画的效果
其实是取决于这个999设了多大
比如我们设小一点:
它看起来呢
它就会好一点
看到了吗
你设的再大一点
你会发现他其实就像没有动画了一样
我们再来试一下看看
为什么?因为他要在这0.3秒内
把这动画从0到5个9来执行
所以在前面我们能看到的这一点
看起来就像一晃而过
所以max-height这种方法
当时也只是一个折中的方案(不考虑js的前提)
大家看Chrome官网这个issues哈
(为啥说它有十多年了)
这是2013年提的一个issues问题
就是这个height auto
它不只是动画
甚至呢大家看在2016年的时候
它就被标记成
won't fix了
大家看
然后呢
23年底的时候呢
他又重新打开了Reopen了
因为W3C开始计划解决这个问题了
那现在呢
W3C已经把这个标准写好了
只是现在处于一个草稿待发布的状态
增加了一个方法叫calc-size
而且呢chrome已经支持了哈
它在123版本就开始测试了
打算在128版本开始默认的就启用它了
那我现在用的是126的版本
所以我可以这样把它启动起来
我们Chrome flags
然后搜这个Web platform
把这个打开
现在默认是禁用的
好需要重启一下
OK
然后呢
我们这里边就会多一个属性哈
height是
这里写一个calc-size
然后写个auto
大家看它就能完美支持过渡了
而且呢它还支持在这里边加运算
比如说我这写一个size乘以1.
也就是说
我让它的高度是自动高度的1.5倍
那与此同时呢
其实W3C还写了另外一个属性
Interpolate-size
但是呢我在这个Chrome这个版本里测
还测不出来
它怎么用呢
W3C是这样计划的啊
就在这里
在root里边
然后这个属性这里边可以怎么写呢
我们来看一下啊
interpolate它有两个值
一个是numberic only
也就是说默认的是这个值
它只能支持0-100像素啊这种切换
还有一个就是allow keywords
就是通过这种方式全局来切换
他是不是支持从0到auto
的动画
比如说
W3C准备了两个方案供大家选择
一种是在这种全局的切换
一种是通过calc-size的方式
那这种方式
现在在chrome下已经可以测试了哈
而且哈
这个属性各大浏览器也开始支持了
比我们在这里能看到
像Firefox啊
或者Safari都已经有自己的计划了
最后我再给大家看个好玩的哈
就是我在研究的过程中
像这个属性的命名我发现也挺有意思
有人把他们团队内部的一个聊天记录
贴上来了
这里边他他们在讨论这个问题哈
然后呢就有人提出了这个名字
大家看这是第一次提的
他叫他后边还多了一个-keywords
是这个方案
但是呢最终没有被采用
继续往下搜这个关键字哈
大家看还有人提了这样的方案
normal 和 allow-keywords
已经跟我们现在很接近了哈
然后讨论来讨论去
又提出来numberic-only和allow-keywords
这个现在就是最终的方案了
已经写到W3C标准里边了
最后更新于
这有帮助吗?