我如何设置第一个字母的样式并应用此线性渐变动画?

How can I style the first letter and apply this linear gradient animation?

我有一些使用 background-positionlinear-gradient 的代码,以便在您将鼠标悬停在文本上时创建向右滑动的动画。

div {
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-image: linear-gradient( to right, #8b73f6, #8b73f6 50%, #000 50%);
  background-size: 200% 100%;
  background-position: 100%;
  font-size: 1.5rem;
  display: inline-block;
  transition: all 0.3s cubic-bezier(0, 0, 0.23, 1);
}

div:hover {
  background-position: 0%;
}
<div>Baz</div>

我想将此功能与为我的元素的第一个字母着色的功能相结合,以便第一个字母被着色,然后在悬停时其余字母被着色。

我使用了 ::first-letter 伪元素,并且能够通过这种方式将颜色更改为紫色:

  div::first-letter {
    color: #8b73f6;
  }
<div>Foo</div>

但是,当我组合这些时,线性渐变总是胜出并位于我的颜色之上。我可以更改 div 上的 background-position 直到它只在第一个字母上显示颜色,但随后该解决方案仅适用于该特定字母,因为我没有使用等宽字体。

这是我对它们进行组合的尝试:

div {
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-image: linear-gradient( to right, #8b73f6, #8b73f6 50%, #000 50%);
  background-size: 200% 100%;
  background-position: 100%;
  font-size: 1.5rem;
  display: inline-block;
  transition: all 0.3s cubic-bezier(0, 0, 0.23, 1);
}

div::first-letter {
  color: #8b73f6;
}

div:hover {
  background-position: 0%;
}
<div>Bar</div>

顺便说一句,我正在使用样式组件将其合并。任何想法将不胜感激!

div:not(:hover)::first-letter {
    color: #8b73f6;
    background: linear-gradient(to right, red, green);
}
<div>Foo</div>

它就这样工作了!我只需要停止使用 -webkit-text-fill-color 并使用正常的 coloranswer 为我指明了正确的方向。

div {
  -webkit-background-clip: text;
  color: transparent;
  background-image: linear-gradient( to right, #8b73f6, #8b73f6 50%, #000 50%);
  background-size: 200% 100%;
  background-position: 100%;
  font-size: 1.5rem;
  display: inline-block;
  transition: all 0.3s cubic-bezier(0, 0, 0.23, 1);
}

div::first-letter {
  color: #8b73f6;
}

div:hover {
  background-position: 0%;
}
<div>Foo</div>