我想在链接下面画一条线并在其上应用动画,所以我使用伪元素。它按预期生成线,但如果链接周围有一个大的填充,则该线显得很远。有没有办法忽略填充并在文本下方绘制线条?
a {
position: absolute;
padding: 20px 0;
top: 50%;
left: 50%;
margin-top: -30px;
margin-left: -30px;
line-height: 20px;
}
a:after {
position: absolute;
bottom: 0;
left: 0;
width: 0;
content: '';
transition: width .3s;
display: block;
}
a:hover:after {
width: 100%;
border-top: 1px solid #333;
}
<a>Link Text</a>
答案 0 :(得分:3)
您可以删除绝对位置,因为在:after
上设置了伪,因此它位于文本之后。
a {
position: absolute;
padding: 20px 0;
top: 50%;
left: 50%;
margin-top: -30px;
margin-left: -30px;
line-height: 20px;
border: 1px solid aqua;
}
a:after {
content: "";
display: block;
border-top: 1px solid #333;
width: 0;
transition: width .3s;
}
a:hover:after {
width: 100%;
}
&#13;
<a>Link Text</a>
&#13;
旁注,您可能会遇到触控设备(如手机,平板电脑)上的悬停效果的双击行为。添加此项以修复:
@media (hover: none) {
a:hover:after {
display: none;
}
}
此外,效果也可以使用linear-gradient()
完成,例如:
a {
display: inline-block;
text-decoration: none;
border: 1px solid aqua;
font-size: 16px;
padding: 20px 0;
background-image: linear-gradient(to bottom, blue, blue);
background-position: 0 38px; /*adjust this based on font-size and padding*/
background-size: 0 1px;
background-repeat: no-repeat;
transition: background-size .3s;
}
a:hover {
background-size: 100% 1px;
}
&#13;
<a href="#">Link text</a>
&#13;