0

我正在研究导航,我似乎无法弄清楚如何使底部边框的大小向上增加,而不是向下扩展(这反过来将我的标题扩展了几个像素),我可以修复扩展的标题设置高度,但边框仍将向下延伸而不是向上延伸。

CSS:

header {
  margin: 0;
  padding: 0;
  left: 0;
  top: 0;
  width: 100%;
  position: absolute;
  background: #000000;
}
ul {
  list-style-type: none;
  display: block;
  margin: 0 0 0 20px;
  padding: 0;
}
ul li {
  display: inline-block;
  padding: 0;
}
ul li a{
  display: block;
  border-bottom: 1px solid #fff;
  font-size: 19px;
}
ul li a:hover{
  border-bottom: 2px solid #fff;
  background: #333;
  font-size: 19px;
}

的HTML:

<header>
  <ul id="nav">
    <li><a href="">link 1</a></li>
    <li><a href="">link 2</a></li>
    <li><a href="">link 3</a></li>
  </ul>
</header>

JSFiddle:

http://jsfiddle.net/Artsen/EZWvF/

4

2 回答 2

4

所以你想增加边框底部到顶部,对吧?

我最近实际上不得不为一个网站做这个。除了设置特定的填充和边框属性之外别无他法。

我在这里编辑了您的 jsfiddle:http: //jsfiddle.net/EZWvF/2/(更改了一些属性以使测试用例更加可见)

原理是:在悬停时交换 padding-bottom 和 border-bottom 的像素值。 这些是您的解决方案的关键线:

ul li a {
 border-bottom: 1px solid white;
 padding-bottom: 5px;
}
ul li a:hover {
 border-bottom: 5px solid white;
 padding-bottom: 1px;
}

注意:这仅在您不添加 css-transition 时有效。如果你取消引用我放在小提琴中的 css-transition,你会看到 div 仍然扩展到底部。如果你想要一个 ss 过渡,你需要在 li 中添加一个单独的 div 来模拟边框。

于 2013-05-04T12:04:07.077 回答
0

正如 Tyblitz 建议的那样,当您不需要过渡时,在 :hover 上使用额外的填充值非常有用。

如果您需要过渡并且不想引入额外的 div,您可以使用 line-height/height 方法来控制垂直高度。

所以不要这样做:

.nav-element a {
  color: gray;
  padding: 25px 15px;
  transition: all ease-in-out 0.2s;
  display: block;
  text-decoration: none;
}

做这个:

.nav-element a {
  color: gray;
  padding: 0 15px;
  line-height: 70px;
  height: 70px;
  transition: all ease-in-out 0.2s;
  display: block;
  text-decoration: none;
}

请参阅此处不起作用的示例并在此处 起作用(使用行高/高度)

于 2015-02-24T06:07:31.420 回答