尝试获取CSS3过渡以在我的链接上方生成border-top
行。出于某种原因,它只是像border-bottom
一样不断增长。以下是使用SASS混音的代码。它目前正在发挥作用,但从底部而不是顶部发展。
#linkReport {
padding-left: 20px;
border-top: 0px solid transparent;
display: inline-block;
text-decoration: none;
color: $defaultText;
padding: 3px;
&:after {
@include outsideLinks;
}
&:hover:after {
@include outsideHover;
}
}
@mixin outsideLinks() {
border-top: 2px solid grey;
content: '';
display: block;
width: 0;
-webkit-transition: 0.5s ease;
transition: 0.5s ease;
}
@mixin outsideHover() {
width: 100%;
}
下面是使用上面代码生成的编译CSS创建的演示。
#linkReport {
padding-left: 20px;
border-top: 0px solid transparent;
display: inline-block;
text-decoration: none;
color: black;
padding: 3px;
}
#linkReport:after {
border-top: 2px solid grey;
content: '';
display: block;
width: 0;
-webkit-transition: 0.5s ease;
transition: 0.5s ease;
}
#linkReport:hover:after {
width: 100%;
}

<a id='linkReport' href='#'>Some Text</a>
&#13;
答案 0 :(得分:2)
为什么顶部边框出现在底部?
伪元素设置为display: block
,因此默认情况下它将显示在主元素内容下面的下一行中。这就是为什么伪元素的border-top
看起来好像是border-bottom
的原因。
演示问题:(添加了高度和背景颜色,以便您可以看到我的意思)
#linkReport {
padding-left: 20px;
border-top: 0px solid transparent;
display: inline-block;
text-decoration: none;
color: black;
padding: 3px;
}
#linkReport:after {
border-top: 2px solid grey;
content: '';
display: block;
width: 0;
height: 10px;
background: cyan;
-webkit-transition: 0.5s ease;
transition: 0.5s ease;
}
#linkReport:hover:after {
width: 100%;
}
<a id="linkReport">Some text</a>
解决方案是什么?
不是设置display: block
,而是将伪元素绝对地放在父元素上,如下面的代码片段所示。
#linkReport {
position: relative; /* add this */
padding-left: 20px;
border-top: 0px solid transparent;
display: inline-block;
text-decoration: none;
color: black;
padding: 3px;
}
#linkReport:after {
border-top: 2px solid grey;
content: '';
/* display: block; remove this */
position: absolute; /* add this */
top: 0px; /* add this */
left: 0px; /* add this */
width: 0;
-webkit-transition: 0.5s ease;
transition: 0.5s ease;
}
#linkReport:hover:after {
width: 100%;
}
<a id="linkReport">Some text</a>