@property 规则演示 - 自定义属性类型与动画
注册带类型的 CSS 自定义属性,观察其如何支持过渡动画和继承效果。
UD5工具箱
探索 CSS @property 规则如何让自定义属性支持平滑动画过渡
--demo-color
@property 是 CSS Houdini API 的一部分,允许开发者显式定义自定义属性的语法类型、初始值和继承行为。它让浏览器知道自定义属性(如 --my-color)存储的是什么类型的数据(颜色、长度、角度等),从而能够在动画中平滑插值,而不是简单地在关键帧之间跳变。
可以把它理解为给 CSS 自定义属性添加了"类型注解",类似于 TypeScript 对 JavaScript 的增强。
核心问题:浏览器不知道如何插值。在没有 @property 的情况下,CSS 自定义属性被当作字符串处理。当动画在两个值之间切换时,浏览器无法计算中间值,导致动画在关键帧处瞬间跳变(离散过渡),而不是平滑渐变。
例如,--color 从红色变到蓝色时,没有类型信息的话,浏览器不知道需要在 RGB 色彩空间中计算中间色,只能直接跳变。有了 syntax: '<color>',浏览器就知道该属性是颜色类型,可以平滑插值。
🔍 查看上方演示中的对比小球:左侧(无 @property)跳变,右侧(有 @property)平滑过渡。
CSS @property 支持以下类型值:
<color> 颜色
<length> 长度
<number> 数字
<percentage> 百分比
<angle> 角度
<time> 时间
<resolution> 分辨率
<transform-function>
<custom-ident>
<integer> 整数
* 任意类型
还可以使用 | 组合多个类型,如 <length> | <percentage>。
截至 2024 年:
layout.css.property-and-value-api.enabled 标志)可使用 CSS.registerProperty 的 JS API 进行特性检测,或使用 @supports 规则进行渐进增强。
两种方式定义同一个功能:
@property:纯 CSS 方式,在样式表中声明,适合静态定义CSS.registerProperty():JavaScript API,适合动态注册,在运行时按需定义两者效果相同。本演示工具使用 JS API 动态注册属性,同时展示对应的 CSS @property 代码。JS API 的优势是可以根据用户交互动态调整属性定义。
<color> 类型实现背景色平滑过渡<color> 类型实现主题色平滑切换<angle> 实现渐变旋转动画方法一:JS 特性检测
if ('registerProperty' in CSS) {
// 支持 CSS.registerProperty
console.log('✅ @property 可用');
} else {
console.log('⚠️ 不支持,使用回退方案');
}
方法二:CSS @supports(部分支持)
@supports (--custom: 1) {
/* 自定义属性基本支持 */
}
建议始终提供合理的回退样式,确保在不支持 @property 的浏览器中也有可用的体验。
@property。推荐使用 Chrome 85+ 或 Edge 85+ 获得完整体验。本工具使用 CSS.registerProperty() API 动态注册属性。
注册带类型的 CSS 自定义属性,观察其如何支持过渡动画和继承效果。
创建并运行动画工作线程,展示不受主线程影响的平滑动画效果。
手动构建HTTP请求,选择方法,填写头和主体,发送并查看完整响应。
输入 URL,通过前端代理或 CORS 配置获取并显示完整的响应头信息。
选择触发位置、箭头方向与样式,生成轻量悬停提示框代码。
可视化Flexbox容器和子项的所有属性及选项,鼠标悬停预览效果。
在主线程和 Worker 之间使用 SharedArrayBuffer 和 Atomics 进行同步通信。
在开发环境中模拟 periodicSync 事件,触发后查看 SW 中的处理逻辑和网络请求。
向指定 Webhook URL 发送自定义 JSON 负载,查看响应状态码和内容,记录发送历史。
上传 webpack 的 stats.json,生成交互式树状图、模块大小排名,辅助优化构建体积。
可视化选择操作(访问、点击、断言等),自动生成 Cypress 测试代码。
绑定动画进度到滚动位置,交互式调整参数,直观理解scroll-timeline和view-timeline。
编写Brainfuck代码,以可视化的方式步进执行,观察活动纸带和指针。
应用 contain 的各种值(layout, paint, size),直观对比开启前后渲染和布局的变化。
生成使用Intersection Observer实现图片懒加载的JavaScript代码,含过渡动画。
拖拽两控制点精细微调CSS `cubic-bezier()` 曲线并对比预设函数效果。
通过滑块和开关调整 Flex 容器和子项的所有 CSS 属性,实时观察布局变化,理解弹性盒子。
选择UI组件类型(按钮、标签页等),自动推荐所需的ARIA角色、状态与属性代码。
设定物理页框数,输入页引用串,动画展示不同页面置换算法的缺页率。
配置滚动容器与目标元素,自定义随滚动触发的关键帧动画,输出纯CSS代码。
创建一份让参与者寻找的物品或地标清单,可分享或打印。
加载Lottie动画JSON文件,播放并控制速度、方向,预览动效效果。
编写 Paint Worklet 代码并注册,实时作为 CSS 背景应用到元素。
并列播放所有CSS内置缓动函数(ease, linear等)的动画效果,方便对比选择。
提供历史数据,手动设定自回归/差分/移动平均阶数,查看拟合与未来几步预测,学习时序分析。
输入网址,尝试拉取该站favicon并提取其主要颜色,用于品牌配色参考。
连接游戏手柄,触发不同时长和强度的振动效果,测试Vibration Actuator API。
上传精灵图,自动切片检测或手动框选获取背景定位数值,生成CSS Sprite代码。
实时预览并生成符合隐私法规的Cookie同意横幅HTML/CSS/JS代码,一键嵌入网站。
触发系统原生分享,支持分享文本、链接与文件,检查浏览器兼容性与支持级别。