css悬停时在li的前3个字符上设置边框底部

css set border bottom on first 3 character of li when hover

我想在 前 3 个字母 上设置边框,而不仅仅是第一个。

li:hover::first-letter{
  border-bottom: 2px solid #759d00
}
<ul>
  <li>School</li>
  <li>University</li>
  <li>Kindergarden</li>
</ul>

您可以像这样使用 :after 选择器而不是 border

li:after {
  content:"";
  background: #759d00;
  width: 0;
  height: 2px;
  display:block;
  transition: width 0.4s;
}
li:hover:after{
  display:block;
  width: 1.5em;
}
<ul>
  <li>School</li>
  <li>University</li>
  <li>Kindergarden</li>
</ul>

似乎没有办法仅使用 CSS 可靠地挑选出前 3 个字符(即处理所有字体设计可能性和所有字体大小以及所有字符组合),除非我们放置一个伪元素在每个元素上,每个元素的前 3 个字符作为内容,看起来很乱。

如果允许更改 HTML,那么像这样更简单的方法将起作用——将前 3 个字符包装在一个范围内。如果需要,您可以在 运行 时间使用 JS 执行此操作。

li:hover span{
  border-bottom: 2px solid #759d00
}
<ul>
  <li><span>Sch</span>ool</li>
  <li><span>Uni</span>versity</li>
  <li><span>Kin</span>dergarden</li>
</ul>