CSS @property --rotate 在Safari中失效,寻求替代方案
兼容Safari和Firefox的卡片渐变旋转动画替代方案
你遇到的问题确实是因为@property --rotate的浏览器支持性限制:Safari 16.4及以上才开始支持该特性,旧版本完全不兼容;Firefox的部分版本也存在适配问题。下面是不需要依赖@property的替代实现方案,能在所有主流现代浏览器中正常运行:
修改后的代码
<div class="card"></div> <style> :root { --card-height: 65vh; --card-width: calc(var(--card-height) / 1.5); } .card { background: #191c29; width: var(--card-width); height: var(--card-height); padding: 3px; position: relative; border-radius: 6px; justify-content: center; align-items: center; text-align: center; display: flex; font-size: 1.5em; color: rgb(88 199 250 / 0%); cursor: pointer; font-family: cursive; } .card::before { content: ""; width: 104%; height: 102%; border-radius: 8px; background-image: linear-gradient( 0deg, #5ddcff, #3c67e3 43%, #4e00c2 ); position: absolute; z-index: -1; top: -1%; left: -2%; animation: spin 2.5s linear infinite; transform-origin: center center; /* 确保伪元素绕中心旋转 */ } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } </style>
关键改动说明
- 移除了
@property --rotate的定义,避免依赖浏览器对自定义属性动画的支持 - 将渐变角度固定为
0deg,转而通过旋转伪元素本身实现渐变的旋转效果 - 添加
transform-origin: center center确保伪元素以自身中心为轴旋转,和原动画效果完全一致 - 动画逻辑改为操作
transform: rotate(),这是所有主流浏览器(包括Safari、Firefox)都原生支持的动画属性
这个方案的视觉效果和原代码完全一致,但兼容性覆盖了所有现代浏览器,不需要担心版本限制。
内容的提问来源于stack exchange,提问作者eabdenna
相关产品推荐
相关产品推荐

