#css #animation #line-breaks #pseudo-element
#css #Анимация #разрывы строк #псевдо-элемент
Вопрос:
Я поиграл с анимацией CSS, чтобы получить немного удовольствия для глаз, и я нашел следующий результат довольно приятным:
body {
font-size: xx-large;
font-family: 'Courier New';
color: white;
background: black;
}
a {
text-decoration: none;
position: relative;
}
a:visited {
color: white;
}
a::before,
a::after {
content: '';
position: absolute;
bottom: 0;
right: 50%;
width: 0;
border-bottom: 2px solid blue;
transition: 400ms 200ms;
}
a::after {
left: 50%;
right: 0;
}
a:hover::before,
a:hover::after {
width: 50%;
}
<a href="#">This is a test. This line has to be a bit longer to see the effect.</a>
Проблема с этим заключается в его поведении при разрывах строк… Можно ли это исправить? Я уже был бы счастлив, если бы анимация была только на наведенной ClientRect, и как только она будет завершена, все остальные ClientRects будут просто подчеркнуты. Решение только для CSS (если оно есть) будет высоко оценено.
Комментарии:
1. извините, но что вы на самом деле хотите получить?
2. Анимация работает только на первом ClientRect. Я сделал текст ссылки немного длиннее, чтобы вы могли видеть проблему.
3. Нет простого способа сделать это для многострочного текста … единственное, что нужно сделать, это добавить «a { пробел: nowrap; }», если вы уверены, что текст никогда не будет шире контейнера.
4. Хорошо, я не могу этого гарантировать. 🙁
5. Говорит дядя google… попробуйте это: nickymeuleman.netlify.app/blog/css-animated-wrapping-подчеркивание
Ответ №1:
Я мог бы найти решение, изменив пример Ники Мейлмана (спасибо webdev-dan за предоставление этой ссылки):
body {
background-color: black;
font-size: 3rem;
}
a {
color: blue;
text-decoration: none;
background-image: linear-gradient(blue, blue), linear-gradient(blue, blue);
background-size: 0 2px, 0 2px;
background-position: 50% 100%, 50% 100%;
background-repeat: no-repeat;
transition: background-size 400ms linear, background-position 400ms linear;
transition-delay: 200ms;
}
a:hover {
background-size: 50% 2px, 100% 2px;
background-position: 0 100%, 50% 100%;
}
a:visited {
color: white;
}
<a href="#">Short link test.</a>
<a href="#">This link is a bit longer to see the multiline behaviour.</a>
Надеюсь, это будет полезно и другим. 🙂