Многострочная анимация ссылок: до - PullRequest
1 голос
/ 31 января 2020

Как и в вопросе, у меня есть код

Как заставить этот эффект работать на многих текстовых строках, а не так, как сейчас - эффект появляется только в 1 из, например, 2 текстовых строк (как пример)

:root {
--00a3a3: #00a3a3;
}

a {
position: relative;
text-decoration: none; /* For Example */
}

a:before {
content: "";
position: absolute;
width: 100%;
height: 2px;
bottom: 0;
left: 0;
background-color: var(--00a3a3);
visibility: hidden;
-webkit-transform: scaleX(0);
transform: scaleX(0);
-webkit-transition: all 0.3s ease-in-out 0s;
transition: all 0.3s ease-in-out 0s;
}

a:hover:before {
visibility: visible;
-webkit-transform: scaleX(1);
transform: scaleX(1);
}
<a href="#">test</a>
<br>
<br>
<a href="#">test
<br>
test2
</a>

Ответы [ 2 ]

1 голос
/ 31 января 2020

Избавьтесь от ::before. Вместо этого примените background-image к <a>.

:root {
--00a3a3: #00a3a3;
}

a {
position: relative;
text-decoration: none; /* For Example */
background-image: linear-gradient(#00a3a3, #00a3a3);
background-position: 50% 100%;
background-repeat: no-repeat;
background-size: 0% 2px;
transition: background-size .3s;
}

a:hover {
background-size: 100% 2px;
}
<a href="#">test</a>
<br>
<br>
<a href="#">test
<br>
test2
</a>

Редактировать: Проблема в том, что псевдоэлемент :before не знает, что ваш <a> состоит из двух строк. Это просто добавление нового элемента блока внутри него и принятие формы, которую вы ему придаете.

Если вы знаете, что ваши ссылки всегда будут состоять из двух строк, вы можете избежать использования :after для вторая строка, вот так:

:root {
  --00a3a3: #00a3a3;
}

a {
  position: relative;
  text-decoration: none;
  /* For Example */
}

a:before,
a:after {
  content: "";
  position: absolute;
  width: 100%;
  height: 2px;
  left: 0;
  background-color: var(--00a3a3);
  visibility: hidden;
  -webkit-transform: scaleX(0);
  transform: scaleX(0);
  -webkit-transition: all 0.3s ease-in-out 0s;
  transition: all 0.3s ease-in-out 0s;
}

a:before {
  bottom: 0;
}

a:after {
  bottom: 1em;
}

a:hover:before,
a:hover:after {
  visibility: visible;
  -webkit-transform: scaleX(1);
  transform: scaleX(1);
}
<a href="#">test</a>
<br>
<br>
<a href="#">test
<br>
test2
</a>

(Но вам, вероятно, лучше реструктурировать свой код, чтобы удалить :before.)

1 голос
/ 31 января 2020

Используйте фон в сочетании с box-decoration-break, чтобы дублировать эффект на каждой строке

:root {
  --00a3a3: #00a3a3;
}

a {
  text-decoration: none;
  background:linear-gradient(var(--00a3a3),var(--00a3a3)) bottom center no-repeat;
  background-size:0% 2px;
  transition: all 0.3s ease-in-out 0s;
  /* Remove the below to see the diffrence */
  -webkit-box-decoration-break: clone;
  box-decoration-break: clone;
}

a:hover{
  background-size:100% 2px;
}
<a href="#">test</a>
<br>
<br>
<a href="#">test
<br>
test2
</a>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...