为什么过渡 属性 不适用于此线性渐变?

Why isn't the transition property working on this linear gradient?

我已经包含了一个 jsfiddle 来简化它。 问题是当鼠标悬停在箭头上时,过渡没有按预期进行动画处理。

.spotlight-next {
  transition: background 0.5s ease-out;
  background: linear-gradient(90deg, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1));
}

.spotlight-next:hover {
  background: linear-gradient(90deg, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.9));
}

https://jsfiddle.net/yashiman/jqq3u1nz/2/

linear-gradient 的工作方式与 background-image 类似,您如何阅读 herebackground-image 不是 动画化的 .

这很明显,因为没有标准的方法来为 background-image 设置动画。你可能想用 淡入 效果或 向左滑动 效果来制作动画,这是模棱两可的,我不明白为什么你说不行"as expected"。预期是什么?

您应该利用其他属性的设置转换,例如 opacitywidth


这是在 background-image 属性 上实现淡入淡出效果的简单方法,使用 ::after 伪元素:

.spotlight-next::after {
  display: block;
  content: "";
  width: 100%;
  height: 100%;
  position: absolute;
  right: 0;
  top: 0;
  transition: opacity 0.5s ease-out;
  background: linear-gradient(90deg, rgba(0, 0, 0, 0), rgba(0, 0, 0, 1));
  opacity: 0.1;
  z-index: -1;
}
.spotlight-next:hover::after {
  opacity: 1;
}

.spotlight-next 中删除 transitionbackground-image 属性 以使其正常工作。