CSS transition 不支持 background-image 插值,需用伪元素控制显隐;background 简写会重置子属性;hover 中避免 transition-delay,改用 timing-function;渐变过渡需角度、色标数、颜色格式严格一致;:visited 状态下多数属性不可过渡。
直接写 transition: background 0.3s 对 background-image 完全无效——CSS 过渡不支持图片路径或渐变的插值计算。浏览器只能过渡颜色、尺寸、透明度等可数值化属性。
background-color 单独过渡,background-image 用 opacity 或 clip-path 配合伪元素模拟“切换”效果::before 
opacity 或 visibility)background 简写会重置所有子属性,包括 background-size 和 background-position,导致悬停后图片拉伸或偏移给按钮加 transition-delay: 0.1s 看似让动画更“从容”,但实际会造成鼠标反复进出时状态滞留:离开时延迟才开始反向过渡,视觉上像卡住。
:hover 中设 transition-delay;如需入场/离场节奏差异,用两个独立 transition 声明:transition: background-color 0.2s, transform 0.2s;transition: background-color 0.2s 0.05s, transform 0.2s 0.05s;(后者写在 :hover 里)transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94) 替代延迟,它让动画前慢后快,自然规避“突兀触发”感@media (hover: hover) 包裹 :hover 规则,否则部分 iOS Safari 会误触发线性渐变(linear-gradient)本身不可过渡,但可以通过「同方向、同色标数量、同单位」的渐变定义,骗过浏览器做颜色插值。
button {
background: linear-gradient(to right, #3498db, #2c3e50);
transition: background 0.4s ease;
}
button:hover {
background: linear-gradient(to right, #2980b9, #1a252f);
}
to right,别一个用 90deg 一个用 to right)color-stop,否则整个 transition 失效transparent 关键字,Safari 会直接跳变出于隐私保护,现代浏览器禁止对 :visited 的绝大多数 CSS 属性做过渡,包括 color、background-color、border-color 等。一旦声明了 transition,:visited 下这些属性将被忽略。
:visited 属性只有 outline、text-decoration(部分)、font-size(极少数场景)opacity 或 transform 绕过限制——它们虽可过渡,但无法体现“是否访问过”的语义,违背设计初衷