我在这里关注了一些教程http://tympanus.net/codrops/2013/08/06/creative-link-effects/
并在悬停导航列表项时制作了一个漂亮的动画.
这是HTML:
这是CSS:
#navbar { list-style: none; } #navbar li { display: inline-block; padding: 15px; } #navbar li a { position: relative; display: inline-block; margin: 15px 25px; text-decoration: none; letter-spacing: 1px; font-weight: bold; text-shadow: 0 0 1px rgba(255, 255, 255, 0.3); font-size: 24px; padding: 10px 0; border-top: 1.5px solid #0972b4; color: #0972b4; } #navbar li a:after { position: absolute; top: 0; left: 0; overflow: hidden; padding: 10px 0; max-width: 0; border-bottom: 1.5px solid #000; color: #000; content: attr(data-hover); -webkit-transition: max-width 0.5s; -moz-transition: max-width 0.5s; transition: max-width 0.5s; } #navbar li a:hover:after, #navbar li a:focus:after { max-width: 100%; }
它适用于"家庭","关于"和"联系",但不适用于"注册"; 显然是因为空间!
我理解代码是如何工作的,但我不知道为什么会存在这样的错误!
伪类after
将相同的文本放在原始文本的顶部,然后根据转换规则对其进行着色并在悬停时扩展底部边框.
这是一个JSFiddle:https://jsfiddle.net/rnw00/3dhcz84b/1/
它发生的原因是因为你正在将伪元素宽度从转换0
为100%
.当宽度小于时100%
,文本将换行到新行,从而导致您看到的问题.
您可以通过添加white-space: pre
到后代锚元素来防止这种情况.
更新的示例
#navbar li a { position: relative; display: inline-block; /* ... */ white-space: pre; }
#navbar {
list-style: none;
}
#navbar li {
display: inline-block;
padding: 15px;
}
#navbar li a {
position: relative;
display: inline-block;
margin: 15px 25px;
text-decoration: none;
letter-spacing: 1px;
font-weight: bold;
text-shadow: 0 0 1px rgba(255, 255, 255, 0.3);
font-size: 24px;
padding: 10px 0;
border-top: 1.5px solid #0972b4;
color: #0972b4;
white-space: pre;
}
#navbar li a:after {
position: absolute;
top: 0;
left: 0;
overflow: hidden;
padding: 10px 0;
width: 0;
border-bottom: 1.5px solid #000;
color: #000;
content: attr(data-hover);
-webkit-transition: width 0.5s linear;
-moz-transition: width 0.5s linear;
transition: width 0.5s linear;
}
#navbar li a:hover:after,
#navbar li a:focus:after {
width: 100%;
}