css устанавливает нижнюю границу для первых 3 символов li при наведении

#css #hover #border

#css #наведите #граница

Вопрос:

Я хочу установить границу для первых 3 букв, а не только для первой.

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

Ответ №1:

Кажется, невозможно использовать только 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> 

Ответ №2:

Вы можете использовать :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> 

Комментарии:

1. Это хорошо работает для приведенного примера, но не работает, если размер шрифта сильно отличается или текст содержит, скажем, много широких символов в начале.

2. Использование 3em , вероятно, будет лучшим вариантом, чем значение пикселя.

3. или даже 3ch … может быть лучше

4. Это круто!! Идеальное решение, спасибо