CSS Dropdown菜单在悬停时捕捉/调整大小

时间:2014-12-17 16:55:42

标签: css menu

今天我试图学习如何使用CSS Borders创建这些三角形,我终于做到了。太棒了!虽然看起来每当我将鼠标悬停在菜单上时,我想要修复两件事情(1)菜单似乎会在悬停时快速调整大小并在鼠标移出时调整大小。 (2)悬停不透明度似乎向下流到子菜单的第一项。我在这里创建了JSFiddle。如果有人可以放弃一些关于我的知识,我将非常感激!

HTMLCode

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="style.css">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Document</title>
</head>
<body>
<div class="navContainer">
<ul class="nav group">
<li>
<a class="active" href="#">Home</a>
<ul class="subNav group">
<li><a href="#">Sub-Item</a></li>
<li><a href="#">Sub-Item</a></li>
<li><a href="#">Sub-Item</a></li>
</ul>
</li>
<li class="active">
<a class="active" href="#">Safari</a>
<ul class="subNav group">
<li><a href="#">Sub-Item</a></li>
<li><a href="#">Sub-Item</a></li>
<li><a href="#">Sub-Item</a></li>
</ul>
</li>
<li class="active">
<a class="active" href="#">Prices</a>
<ul class="subNav group">
<li><a href="#">Sub-Item</a></li>
<li><a href="#">Sub-Item</a></li>
<li><a href="#">Sub-Item</a></li>
</ul>
</li>
<li class="active">
<a class="active" href="#">Photos</a>
<ul class="subNav group">
<li><a href="#">Sub-Item</a></li>
<li><a href="#">Sub-Item</a></li>
<li><a href="#">Sub-Item</a></li>
</ul>
</li>
<li class="active">
<a class="active" href="#">Contact</a>
<ul class="subNav group">
<li><a href="#">Sub-Item</a></li>
<li><a href="#">Sub-Item</a></li>
<li><a href="#">Sub-Item</a></li>
</ul>
</li>
</ul>
</div>

<div class="box"></div>

</body>
</html>

CSS代码

html {
font-size: 62.5%;
}

body {
background: #fff;
font-size: 1.6em;  
}

.navContainer {
width: 1100px; 
margin: 0 auto;
}

ul.nav {
margin: 0;
padding: 0;
position: relative;
left:30%;
font-size: 1.3rem;


}

li {
float: left;
list-style-type:none;
text-align: center;
background: #aa2929;


}

li a {
display: block;
text-decoration: none;
color: #fff;
color: rgba(255,255,255, 0.7);
text-shadow: 0 1px 1px rgba(0,0,0,0.5);
padding: 1rem 2rem; 
transition: all .3s ease-in-out;

}

li a:focus,
li a:hover {
color: #fff;
background: #a85555;
background: rgba(255,255,255, 0.15); 
}

ul.subNav {
margin: 0;
padding: 0;
}

ul.subNav li {
float: none;
display: none;

}

.nav li:hover ul.subNav li  {
display: block;
}

.group:after {
content: "";
display: table;
clear: both;
}

li a.active:hover:after {
content: "";
box-sizing: border-box;
display: block;
margin: 0 auto;
padding: 0;
width: 0; 
height: 0;
border-left: 7px solid transparent;
border-right: 7px solid transparent;
border-bottom: 7px solid rgba(89, 172, 255, 0.83);
}

2 个答案:

答案 0 :(得分:1)

这是因为您的“子项目”比您的主要导航元素更宽,因此当您悬停并显示子项目时,父项(主导航元素)必须展开以适应它。

.nav.group > li上设置固定宽度可以解决您的问题。

另一个选择是绝对定位下拉列表。

答案 1 :(得分:0)

在您的subNav上的绝对位置和父列表项目(.nav li)上的固定宽度将解决问题

.nav li{
    width:80px; /* I used 80px as example */
}
.subNav{
    position:absolute;
}

将以上内容添加到css的基础中,它将修复它。

代码段......

&#13;
&#13;
html {
  font-size: 62.5%;
}
body {
  background: #fff;
  font-size: 1.6em;
}
.navContainer {
  width: 1100px;
  margin: 0 auto;
}
ul.nav {
  margin: 0;
  padding: 0;
  font-size: 1.3rem;
}
li {
  float: left;
  list-style-type: none;
  text-align: center;
  background: #aa2929;
}
li a {
  display: block;
  text-decoration: none;
  color: #fff;
  color: rgba(255, 255, 255, 0.7);
  text-shadow: 0 1px 1px rgba(0, 0, 0, 0.5);
  padding: 1rem 2rem;
  transition: all .3s ease-in-out;
}
li a:focus,
li a:hover {
  color: #fff;
  background: #a85555;
  background: rgba(255, 255, 255, 0.15);
}
ul.subNav {
  margin: 0;
  padding: 0;
}
ul.subNav li {
  float: none;
  display: none;
}
.nav li:hover ul.subNav li {
  display: block;
}
.group:after {
  content: "";
  display: table;
  clear: both;
}
li a.active:hover:after {
  content: "";
  box-sizing: border-box;
  display: block;
  margin: 0 auto;
  padding: 0;
  width: 0;
  height: 0;
  border-left: 7px solid transparent;
  border-right: 7px solid transparent;
  border-bottom: 7px solid rgba(89, 172, 255, 0.83);
}
.nav li {
  width: 80px;
}
.subNav {
  position: absolute;
}
.nav > li > a {
  height: 1.5em;
}
&#13;
<body>
  <div class="navContainer">
    <ul class="nav group">
      <li>
        <a class="active" href="#">Home</a>
        <ul class="subNav group">
          <li><a href="#">Sub-Item</a>
          </li>
          <li><a href="#">Sub-Item</a>
          </li>
          <li><a href="#">Sub-Item</a>
          </li>
        </ul>
      </li>
      <li class="active">
        <a class="active" href="#">Safari</a>
        <ul class="subNav group">
          <li><a href="#">Sub-Item</a>
          </li>
          <li><a href="#">Sub-Item</a>
          </li>
          <li><a href="#">Sub-Item</a>
          </li>
        </ul>
      </li>
      <li class="active">
        <a class="active" href="#">Prices</a>
        <ul class="subNav group">
          <li><a href="#">Sub-Item</a>
          </li>
          <li><a href="#">Sub-Item</a>
          </li>
          <li><a href="#">Sub-Item</a>
          </li>
        </ul>
      </li>
      <li class="active">
        <a class="active" href="#">Photos</a>
        <ul class="subNav group">
          <li><a href="#">Sub-Item</a>
          </li>
          <li><a href="#">Sub-Item</a>
          </li>
          <li><a href="#">Sub-Item</a>
          </li>
        </ul>
      </li>
      <li class="active">
        <a class="active" href="#">Contact</a>
        <ul class="subNav group">
          <li><a href="#">Sub-Item</a>
          </li>
          <li><a href="#">Sub-Item</a>
          </li>
          <li><a href="#">Sub-Item</a>
          </li>
        </ul>
      </li>
    </ul>
  </div>
&#13;
&#13;
&#13;

希望这有帮助