CSS3 开销边框-顶部过渡看起来像底部边框



试图获得 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>

为什么顶部边框出现在底部?

伪元素设置为 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>

相关内容

  • 没有找到相关文章

最新更新