Una Kravetz 深入探讨 了 Chrome 如何允许您直接从 CSS 声明 CSS 自定义属性,并提供比字符串更详细的信息。
所以,不再是像这样
html {
--stop: 50%;
}
…而是可以像这样声明更多细节
@property --stop {
syntax: "<percentage>";
initial-value: 50%;
inherits: false;
}
然后,浏览器就会知道这个特定的自定义属性是百分比而不是字符串。它可以是其他有用的东西,比如 <integer>
和 <color>
。现在我们有了向浏览器传达此类信息的方法,我们就获得了一些新功能,比如能够在两个值之间进行过渡。
在玩耍的过程中,我注意到您必须 *非常明确地调用* 要过渡的属性(因为通用的 transition
不行)。尝试将鼠标悬停在这个演示上,它是 Una 在文章中所做的演示的重新创建。
请注意,我正在对颜色停止的位置(百分比)进行动画处理,但我也 *尝试* 对颜色进行动画处理,但这仍然不起作用。我以为使用这个新功能就可以实现。我知道人们对长期以来无法对渐变进行动画处理感到困惑。(参见 Ana Tudor 的文章。)
您始终可以在高级别重新声明属性,以“支持”无法读取自定义属性的浏览器。这感觉像是一个讨论这个话题的有趣时刻。Safari 似乎对这种基于 Houdini 的东西表现出浓厚的兴趣,但还没有实现。Firefox?嗯,我不知道。我们所知道的最佳情况是,他们在所有裁员之前将它标记为 “值得原型设计”。
这也有助于解决 CSS 自定义属性中奇怪的回退问题,我们在 时事通讯 中提到过。
与任何其他自定义属性一样,您可以获取(使用 var)或设置(写入/重写)值,但对于 Houdini 自定义属性,如果您在覆盖时设置了一个虚假值,则 CSS 渲染引擎会发送初始值(其回退值)而不是忽略该行。
喜欢这个!对 Houdini 的 JS 方面并不太兴奋,但这确实让我兴奋起来!
我的反应是“哦,太棒了!”我发现自己被这个功能所吸引。正如 CSS tricks 总是会带来惊喜,我知道这一点。感谢 Chris。
我昨天还在讨论 Typed OM,以及它的 JS 方法可能会阻碍其被批准。
有趣的是,这样更有意义。
有规范吗?
这两个动画都在最新的 Chrome Canary(版本 87.0.4254.2)中有效。感谢您的见解。希望它们能在所有其他浏览器中实现。
它在 Chrome v85 中也有效,包括颜色和颜色停止过渡。我不明白 *“请注意 […] 我也尝试对颜色进行动画处理,但这仍然不起作用。我以为使用这个新功能就可以实现。”* 这部分。
一个小小的 CodePen,解释了 @property 继承如何与标准属性继承一起工作。这会让您在第一次使用此功能时感到困惑。
即使颜色停止的百分比,如果我们使用关键帧动画而不是过渡,也会出现不平滑的过渡。
您知道如何使其在关键帧中正常工作吗?