6

我设计了一个链接,当你悬停它时,顶部会出现一个边框;当您将鼠标悬停在边框之外时,边框会随着过渡而消失。当您将鼠标悬停在边框上并关闭时,边框会滑入而不是淡入。我希望边框淡入而不是滑动。我怎样才能做到这一点?这是一个JsFiddle

HTML

<div>Text</div>

CSS

div {
    line-height: 50px;
    width: 100px;
    text-align: center;
    cursor: pointer;
    transition: border .2s ease-in-out;
    -webkit-transition: border .2s ease-in-out;
    -moz-transition: border .2s ease-in-out;
}

div:hover {
    border-top: 3px solid #000;
}

html, body {
    margin: 0;
    padding: 0;
}
4

2 回答 2

20

如果要为颜色设置动画,请为颜色设置动画,而不是整个边框。您现在还设置了从 0 像素到 3 像素的动画,所以它当然会滑入。您应该只给它一个默认的透明边框。

div {
    line-height: 50px;
    width: 100px;
    text-align: center;
    cursor: pointer;
    transition: border-color .5s ease-in-out;
    border-top: 3px solid transparent;
}

div:hover {
    border-top-color: #000;
}

Sample on JSfiddle

作为旁注:-moz-transition现在已经过时了,因为 FF17 左右 Mozilla 支持不带前缀的 CSS 过渡模块。

2014 年 12 月更新:我注意到这个答案仍然经常被查看和投票,请注意,在任何当前或最近被取代的浏览器transition中不再作为前缀。

于 2013-05-30T23:48:50.040 回答
2

在这种情况下 - 你将需要有一个边界开始。使其在第一种状态下透明。这样它就不会“生长”到位......颜色会随着它的变化而褪色。

http://jsfiddle.net/kLnQL/11/

div {
  border: 3px solid transparent;
}

div:hover {
  border: 3px solid #f06;
}
于 2013-05-30T23:51:43.420 回答