如何在仅使用CSS的导航栏上实现三角形悬停效果?

3
我希望当用户将鼠标悬停在不同的选项卡上时,文本下方会出现一个向上指向的小三角形。这是我正在使用的一些代码。 css 导航栏

* {
  margin: 0;
  padding: 0;
  list-style: none;
}

body {
  font-family: Arial, Helvetica, sans-serif;
  font-size: 11px;
  margin: 10px;
}

.tab {
  width: 100%;
  padding: 5px;
  background: #fff;
  color: #000;
  cursor: pointer;
  font-weight: bold;
  border-bottom: 1px solid black;
  position: relative;
}

.tab:hover {
  background: #a0a0a0;
}

.tab:hover span {
  display: block;
}

.tab_child {
  padding: 15px;
  background: #fff;
}

.selected {
  background: #a0a0a0;
}

.contain * {
  float: left;
  width: 100px;
}

span.triangle {
  background-image: url("http://www.inner.org/torah_and_science/mathematics/images/triangle.gif");
  background-repeat: none;
  display: none;
  height: 14px;
  width: 16px;
  position: absolute;
  top: 25px;
  left: 25%;
}
<div class="contain">
  <div id="one" class="tab selected">Link1</div>
  <div id="two" class="tab">Link2</div>
  <div id="three" class="tab">Link3</div>
  <div id="four" class="tab">Link4</div>
  <div id="five" class="tab">Link5</div>
</div>


你遇到了哪个部分的问题? - D'Arcy Rittich
2
这是如何制作 CSS 三角形的方法:https://dev59.com/Ymw05IYBdhLWcg3wuUAL - 您可以将其放入您的选项卡 div 中并尝试更改三角形的颜色(与背景相同 = 不可见,在悬停时更改颜色等)。 - Quasdunk
我想这就是我遇到麻烦的部分,每当我添加一个三角形时,它就会把一切都搞砸。就像这样:http://jsfiddle.net/88Uxw/2/ - Bramble
3个回答

11

我认为这可能是您正在寻找的内容:

Fiddle

另外,请使用语义标记:

  1. 如果您在使用HTML5,则将导航包装在 <nav> 标记中。
  2. 如果您的链接确实要成为链接,则应使用 <a> 元素。
  3. 对于像您所拥有的链接列表,建议使用列表(<ul><li>)。

body {
  font-family: Arial, Helvetica, sans-serif;
  font-size: 11px;
}

nav ul {
  margin: 0;
  padding: 0;
  list-style: none;
}

nav li {
  float: left;
  width: 20%;
}

nav a {
  display: block;
  padding: 5px;
  border-bottom: 1px solid black;
  background: #fff;
  color: #000;
  font-weight: bold;
  position: relative;
}

nav a:hover,
.active {
  background: #bbb;
}

nav a:hover:after {
  content: "";
  display: block;
  border: 12px solid #bbb;
  border-bottom-color: #000;
  position: absolute;
  bottom: 0px;
  left: 50%;
  margin-left: -12px;
}
<nav>
  <ul>
    <li><a href="#" class="active">Link1</a></li>
    <li><a href="#">Link2</a></li>
    <li><a href="#">Link3</a></li>
    <li><a href="#">Link4</a></li>
    <li><a href="#">Link5</a></li>
  </ul>
</nav>


2

这里 对你的 jsfiddle 进行了修改:

我在HTML中添加了一个<span class="arrow"></span>来容纳三角形:

<div class="tab_container">
    <div id="test1-header" class="accordion_headings header_highlight" >Home<span class="arrow"></span></div>
    <div id="test2-header" class="accordion_headings" >About<span class="arrow"></span></div>
    <div id="test3-header" class="accordion_headings" >Work<span class="arrow"></span></div>
    <div id="test4-header" class="accordion_headings" >Social<span class="arrow"></span></div>
    <div id="test5-header" class="accordion_headings" >Contact<span class="arrow"></span></div>
</div>

这是对你的菜单所做的更改,减小了三角形的大小,并在鼠标悬停在每个菜单项上时将它们定位于底部中心: CSS:
/*
.accordion_headings:hover{
    background:#00CCFF;
    width: 0;
    height: 0;
    border-left: 5px solid transparent;
    border-right: 5px solid transparent;
    border-bottom: 5px solid red;
}
*/
.accordion_headings{
    position:relative;
}
.accordion_headings .arrow{
    display:none;
}
.accordion_headings:hover .arrow{
    width: 0;
    height: 0;
    border-left: 5px solid transparent;
    border-right: 5px solid transparent;
    border-bottom: 5px solid red;

    display:block;
    position:absolute;
    bottom:0;
    left:49%;
}

0

这里有一个fiddle,使用了背景图片,在鼠标悬停在菜单项上时显示。它不太美观,但进一步的 CSS 应该会有所帮助。

更新

对不起,我可能误读了。这里有一个可工作的fiddle,箭头更小,并指向正确的方向。


3
也许我没注意到,但我在Chrome里没有看到任何东西。 - James Montagne
1
我想在文本下方添加一个小三角形,在用户悬停在不同的选项卡上时,该三角形指向上方。您的解决方案如何实现这一点? - j08691
2
我理解的“纯CSS导航栏”是指不包括图像。 - Micah
我原以为它只是没有使用任何脚本。我同意这不符合那个要求。 - kwelch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接