【问题标题】:CSS border-bottom should extend when hoverCSS 边框底部应在悬停时扩展
【发布时间】:2015-05-21 19:17:28
【问题描述】:

我想创建一个边框动画。如果我将鼠标悬停在链接上,边框底部应该从左侧延伸到右侧。我搜索了很多, 但我不知道如何命名它。

这是我的代码:

.a{
    width: 200px;
    display: inline-block;
    transition: 0.5s all;
}

.a:hover{
    border-bottom: 5px solid #037CA9;
}
<a>Benutzername:</a>

我必须如何设计这个元素,边框底部从左侧延伸到右侧?

【问题讨论】:

  • 好的,那你有什么尝试?
  • CSS 选择器前面不应该有句点,因为您的目标是一个元素,而不是一个类。

标签: html css


【解决方案1】:

如果有人想从中心延长线,有解决方案:

a {
  position: relative;
  text-decoration: none;
}
a:after {
  content: '';
  background: #2a57b3;
  display: block;
  height: 2px;
  position: absolute;
  left: 50%;
  bottom: 0;
  width: 0;
  -webkit-transition: all .2s;
  transition: all .2s;
}
a:hover:after {
  width: 100%;
  margin-left: -50%;
}
<a>Hover me!</a>

【讨论】:

    【解决方案2】:

    我认为您正试图在下面得到类似这个小提琴的东西。 我用<a> 样式标记做了一个小例子,并使用了伪<a> 元素,并给它一个过渡以使其在悬停时扩展。

    a {
        position:relative;
        display:inline-block;
        padding:5px 10px;
        color:#444;
        background:#f3f3f3;
        text-decoration:none;
    }
    a:after {
        content:'';
        position:absolute;
        background:green;
        display:block;
        height:2px;
        bottom:-2px;
        left:0;
        min-width:0;
        transition:all .2s linear;
        -webkit-transition:all .2s linear;
    }
    
    a:hover:after {
        min-width:100%;
    }
    <a href="#">Hover button</a>

    可能会添加更多特定于浏览器的 css 过渡,以更好地兼容多浏览器。有关这方面的更多信息,请查看HERE

    jsFIDDLE

    【讨论】:

    • 感谢您的帮助!太完美了!
    【解决方案3】:

    您可以使用缩放到 0.001 的伪元素并在悬停时将其缩放回 1。这种方法在另一个问题中有所描述:Expand border from center on hover

    要使其从左侧扩展,您只需将变换原点更改为0 0

    a{
      display:inline-block;
    }
    a:after {
      display:block;
      content: '';
      border-bottom: solid 3px #019fb6;
      transform-origin:0 0;
      transform: scaleX(0.001);
      transition: transform 250ms ease-in-out;
    }
    a:hover:after {
      transform: scaleX(1);
    }
    <a>Benutzername:</a>

    【讨论】:

    • 感谢您的回答! :)
    【解决方案4】:

    你可以使用定位伪元素

    a {
      text-decoration: none;
      position: relative;
    }
    a::before {
      content: '';
      position: absolute;
      background: red;
      height: 2px;
      top: 100%;
      left: 0;
      width: 0%;
      transition: width 0.5s ease;
    }
    a:hover::before {
      width: 100%;
    }
    <a href="#">Benutzername:</a>

    【讨论】:

    • 你应该指出它在旧版 IE 中不起作用,因为当时不支持 CSS3
    • OP 已经在使用过渡,我认为 CSS3 在这里不是问题。
    • 感谢您的回答! :)
    • 这可能与问题无关,因为这种转换很简单,但应该注意的是,用宽度/高度转换元素的大小比转换属性更昂贵(与性能相关)。 see here
    【解决方案5】:

    你可以试试这个。

    #divname {
    position:absolute;
    top:0;
    height:500px;
    }
    
    #divname:hover {
    position:absolute;
    top:0;
    height:600px;
    }
    

    这对我有用。

    【讨论】:

    • 这没有动画也没有边框。
    • 对不起,我误解了他的意思,对试图提供帮助的人投反对票无济于事。他所要做的就是为其添加一个边框,然后进行过渡。
    • 实际上,像您发布的那样对答案投反对票正是投反对票的重点。您自己承认您误解了 OP 的意思,并且您的答案没有用。不要亲自投票。
    • 不是我的意思,如果添加一两件事,那将是他所需要的。如果它不起作用,他可以使用另一个答案。
    猜你喜欢
    • 2013-04-28
    • 1970-01-01
    • 2015-07-03
    • 2015-04-21
    • 2020-01-09
    • 2020-03-15
    • 1970-01-01
    • 2021-06-03
    • 1970-01-01
    相关资源
    最近更新 更多