如何从左到右动画下划线?

Dan*_*elX 3 html css

我正在尝试从 uber.design 站点复制此转换:

我正在尝试从 uber.design 站点复制此过渡

问题是我一直在扭转过渡:

.un {
  display: inline-block;
}

.un:after {
  content: '';
  width: 0px;
  height: 2px;
  display: block;
  background: black;
  transition: 300ms;
}

.un:hover:after {
  width: 100%;
Run Code Online (Sandbox Code Playgroud)
<span class="un">Underlined Text</span>
Run Code Online (Sandbox Code Playgroud)

Tem*_*fif 7

您可以使用渐变并background-position延迟调整以获得这种效果:

.un {
  display: inline-block;
  padding-bottom:2px;
  background-image: linear-gradient(#000, #000);
  background-position: 0 100%; /*OR bottom left*/
  background-size: 0% 2px;
  background-repeat: no-repeat;
  transition:
    background-size 0.3s,
    background-position 0s 0.3s; /*change after the size immediately*/
}

.un:hover {
  background-position: 100% 100%; /*OR bottom right*/
  background-size: 100% 2px;
}
Run Code Online (Sandbox Code Playgroud)
<span class="un">Underlined Text</span>
Run Code Online (Sandbox Code Playgroud)

如果你想要悬停时的连续动画,你可以试试这个:

.un {
  display: inline-block;
  padding-bottom:2px;
  background-image: linear-gradient(#000, #000);
  background-position: right -100% bottom 0;
  background-size: 200% 2px;
  background-repeat: no-repeat;
}

.un:hover {
  background-position: left -100% bottom 0;
  transition: background-position 0.5s;
}
Run Code Online (Sandbox Code Playgroud)
<span class="un">Underlined Text</span>
Run Code Online (Sandbox Code Playgroud)

您可以查看此答案以获取有关如何完成不同值的计算的更多详细信息:在线性渐变上使用具有背景位置的百分比值


另一种动画

.un {
  display: inline-block;
  padding-bottom:2px;
  background-image: linear-gradient(to right, #000 33%,transparent 33% 66%,#000 66%);
  background-position: right bottom;
  background-size: 300% 2px;
  background-repeat: no-repeat;
}

.un:hover {
  background-position: left bottom;
  transition: background-position 0.5s;
}
Run Code Online (Sandbox Code Playgroud)
<span class="un">Underlined Text</span>
Run Code Online (Sandbox Code Playgroud)

让我们不要忘记基本的:

.un {
  display: inline-block;
  padding-bottom:2px;
  background-image: linear-gradient(#000,#000);
  background-position: right bottom; /* OR left bottom*/
  background-size: 100% 2px;
  background-repeat: no-repeat;
  transition: background-size 0.5s;
}

.un:hover {
  background-size: 0% 2px;
}
Run Code Online (Sandbox Code Playgroud)
<span class="un">Underlined Text</span>
Run Code Online (Sandbox Code Playgroud)