普通视图

发现新文章,点击刷新页面。
昨天以前首页

CSS终于支持渐变色的过渡了🎉

作者 JIE_
2026年1月6日 10:33

背景

在做项目时,总会遇到UI给出渐变色的卡片或者按钮,但在做高亮的时候,由于没有过渡,显得尤为生硬。

过去的解决方案

在过去,我们如果要实现渐变色的过渡,通常会使用如下几种方法:

  1. 添加遮罩层,通过改变遮罩层的透明度做出淡入淡出的效果,实现过渡。
  2. 通过background-size/position使得渐变色移动,实现渐变色移动的效果。
  3. 通过filter: hue-rotate滤镜实现色相旋转,实现过渡。

但这几种方式都有各自的局限性:

  1. 遮罩层的方式看似平滑,但不是真正的过渡,差点意思。
  2. background-size/position的方式需要计算好background-sizebackground-position,否则会出现渐变不完整的情况。并且只是实现了渐变的移动,而不是过渡。
  3. filter: hue-rotate也需要计算好旋转角度,实现复杂度高,过渡的也不自然。

@property新规则

@property规则可以定义一个自定义属性,并且可以指定该属性的语法、是否继承、初始值等。

@property --color {
  syntax: '<color>';
  inherits: false;
  initial-value: #000000;
}

我们只需要把这个自定义属性--color应用到linear-gradient中,在特定的时候改变它的值,非常轻松就可以实现渐变色的过渡了。 我们再看看@property规则中这些属性的含义。

Syntax语法描述符

Syntax用于描述自定义属性的数据类型,必填项,常见值包括:

  • <number> 数字(如0,1,2.5)
  • <percentage> 百分比(如0%,50%,100%)
  • <length> 长度单位(如px,em,rem)
  • <color> 颜色值
  • <angle> 角度值(如deg,rad)
  • <time> 时间值(如s,ms)
  • <image> 图片
  • <*> 任意类型

Inherits继承描述符

Inherits用于描述自定义属性是否从父元素继承值,必填项:

  • true 从父元素继承值
  • false 不继承,每个元素独立

Initial-value初始值描述符

Initial-value用于描述自定义属性的初始值,在Syntax为通用时为可选。

兼容性

@property目前仍是实验性规则,但主流浏览器较新版本都已支持。 b70bdd98-15d5-4aa3-a3c4-b4d08a7aba9c.png

总结与展望

@property规则的出现,标志着CSS在动态样式控制方面迈出了重要一步。它不仅解决了渐变色过渡的技术难题,更为未来的CSS动画和交互设计开辟了新的可能性。 随着浏览器支持的不断完善,我们可以期待:

  • 更丰富的动画效果
  • 更简洁的代码实现
  • 更好的性能表现
❌
❌