防止包装菜单项

时间:2012-07-18 11:27:58

标签: css

我为自己的网站创建了一个水平导航(菜单)栏。当我将窗口的大小调整为小于条形的大小时,菜单项会被包装。我希望菜单保持完整(即,它应该保持水平),而不管窗口的大小,因为它通常可以在Google等网站中看到。我尝试了各种各样的方式发布在各种论坛,包括这一个,但没有什么对我有用下面我已经粘贴了菜单的CSS代码。

CSS CODE:

#cssmenu ul { margin: 0; padding: 0;}
#cssmenu li { margin: 0; padding: 0;}
#cssmenu a { margin: 0; padding: 0;}
#cssmenu ul {list-style: none;}
#cssmenu a {text-decoration: none;}
#cssmenu {height: 70px; background-color: #6699CC; box-shadow: 0px 2px 3px rgba(0,0,0,.4); }


#cssmenu > ul > li {
    float: left; 
    margin-left: 30px;
    position: relative;

}

#cssmenu > ul > li > a {
    color: #FFFFFF;
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 18px;
    line-height: 70px;
    padding: 15px 20px;
-webkit-transition: color .15s;
   -moz-transition: color .15s;
     -o-transition: color .15s;
        transition: color .15s;

}

#cssmenu > ul > li > a:hover {color: #00FF00; }
body.home li.home, body.tech li.tech {font-weight:bold; }

#cssmenu > ul > li > ul {
    opacity: 0;
    visibility: hidden;
    padding: 16px 0 20px 0;
    background-color: #FFFFFF;
    text-align: left;
    position: absolute;
    top: 55px;
    left: 50%;
    margin-left: -90px;
    width: 180px;
-webkit-transition: all .3s .1s;
   -moz-transition: all .3s .1s;
     -o-transition: all .3s .1s;
        transition: all .3s .1s;
-webkit-border-radius: 5px;
   -moz-border-radius: 5px;
        border-radius: 5px;
-webkit-box-shadow: 0px 1px 3px rgba(0,0,0,.4);
   -moz-box-shadow: 0px 1px 3px rgba(0,0,0,.4);
        box-shadow: 0px 1px 3px rgba(0,0,0,.4);
}

#cssmenu > ul > li:hover > ul {
    opacity: 1;
    top: 65px;
    visibility: visible;
}

#cssmenu > ul > li > ul:before{
    content: '';
    display: block;
    border-color: transparent transparent rgb(250,250,250) transparent;
    border-style: solid;
    border-width: 10px;
    position: absolute;
    top: -20px;
    left: 50%;
    margin-left: -10px;
}

#cssmenu > ul ul > li { position: relative;}

#cssmenu ul ul a{
    color: rgb(50,50,50);
    font-family: Verdana, 'Lucida Grande';
    font-size: 13px;
    background-color: rgb(250,250,250);
    padding: 5px 8px 7px 16px;
    display: block;
-webkit-transition: background-color .1s;
   -moz-transition: background-color .1s;
     -o-transition: background-color .1s;
        transition: background-color .1s;
}

#cssmenu ul ul a:hover {background-color: rgb(240,240,240);}

#cssmenu ul ul ul {
    visibility: hidden;
    opacity: 0;
    position: absolute;
    top: -16px;
    left: 206px;
    padding: 16px 0 20px 0;
    background-color: rgb(250,250,250);
    text-align: left;
    width: 160px;
-webkit-transition: all .3s;
   -moz-transition: all .3s;
     -o-transition: all .3s;
        transition: all .3s;
-webkit-border-radius: 5px;
   -moz-border-radius: 5px;
        border-radius: 5px;
-webkit-box-shadow: 0px 1px 3px rgba(0,0,0,.4);
   -moz-box-shadow: 0px 1px 3px rgba(0,0,0,.4);
        box-shadow: 0px 1px 3px rgba(0,0,0,.4);
}


#cssmenu ul ul > li:hover > ul { opacity: 1; left: 196px; visibility: visible;}


#cssmenu ul ul a:hover{
    background-color: rgb(205,44,36);
    color: rgb(240,240,240);
}

HTML代码:

<head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <link href="styles.css" rel="stylesheet" type="text/css">
 <title>Home</title>
</head>
<body class="home" background="teenscorner1.jpg" text="#FFFFFF" style="background-attachment: fixed">
 <div id='cssmenu'>
  <ul>
   <li class="home"><a href='home.jsp'><span>Home</span></a></li>
   <li class="tech"><a href='tech.jsp'><span>Tech Specs</span></a></li>
   <li><a href='#'><span>Fun</span></a></li> 
   <li><a href="#"><span>Deals</span></a></li>
   <li><a href="#"><span>Wheelz</span></a></li>
   <li><a href='#'><span>About</span></a></li>
  </ul>
 </div>
</body>

6 个答案:

答案 0 :(得分:61)

如果您不知道宽度,因为链接的宽度不同,您可以使用列表项display: inline-block上的<li>和列表本身white-space:nowrap <ul>

http://jsfiddle.net/Frd8J/

答案 1 :(得分:2)

您应为min-width设置#cssmenu > ul,允许所有菜单项适合。{/ p>

答案 2 :(得分:2)

接受的答案在我的案例中没有用,但是@Ana的原始答案确实如此。我试图将此作为评论添加到她的答案,但它不适合。根据建议在UL上放置最小宽度,根据需要将所有LI项目返回到一行,但该行延伸到包含div的右侧。我向父div添加了相同的最小宽度,我得到了我想要的东西,容器内一行上的所有LI。作为最后一步,我从UL中移除了最小宽度(所以这是一个与Ana相比不同,更一般的答案),一切仍然有效。在坚果壳中如果你按照接受的答案中记录的那样使用css中的UL nowrap并且它仍然包装,那么请确保给列表足够的宽度以便它不需要换行。另一种增加宽度的方法(不使用最小宽度)是增加包含div中UL下面的内容区域的宽度。我的案例是标签式DIV,LI是顶部的标签。每个标签的内容都在其下方。当下面的内容已经足够宽时,LIs保持在一排。我可以在每个标签内容上放一个最小宽度,但对我而言,将它放在外部容器上效果更好。 HTH。

答案 3 :(得分:0)

我假设这些是导航条项目

<li class="home"><a href='home.jsp'><span>Home</span></a></li>
<li class="tech"><a href='tech.jsp'><span>Tech Specs</span></a></li>
<li><a href='#'><span>Fun</span></a></li> 
<li><a href="#"><span>Deals</span></a></li>
<li><a href="#"><span>Wheelz</span></a></li>
<li><a href='#'><span>About</span></a></li>

如果你只是把它们放在这样

<li class="home"><a href='home.jsp'><span>Home</span></a></li>&nbsp;<li class="tech"><a href='tech.jsp'><span>Tech Specs</span></a></li>&nbsp;<li><a href='#'><span>Fun</span></a></li>&nbsp;<li><a href="#"><span>Deals</span></a></li>&nbsp;<li><a href="#"><span>Wheelz</span></a></li>&nbsp;<li><a href='#'><span>About</span></a></li>

所有你需要做的就是将它们全部加在一起,在li end和start标签之间没有空格,现在它们将在加载页面上的导航项目之间没有可视空格显示它们,所以你可能不会希望它们都像一个条形图一样在视觉上连接,所以iv还在li end和start标签之间放置一个空格代码,这将在你加载的屏幕上以可视方式在所有导航标签之间提供一个空格,但它们仍然会如果你让屏幕缩小,就不要紧紧地绑在一起。

答案 4 :(得分:0)

我的菜单项包装到下一行时遇到同样的问题。它做了一些改变。首先,我必须将<ul>设置为将最大高度和溢出设置为隐藏。然后我只需要为父容器设置宽度。

在我的情况下,由于设计是响应式的,并且可用区域发生了变化(因为菜单的两侧都是具有预设硬宽度的元素),我不得不扩展给定的区域。

#primary-menu {
  display: none;
}

@media screen and (min-width: 59em) {
  #primary-menu {
    display: inline-block;
    width: 74%;
  }
}

@media screen and (min-width: 64em) {
  #primary-menu {
    width: 78%;
  }
}

@media screen and (min-width: 78.75em) {
  #primary-menu {
    width: 83%;
  }
}

ul {
  max-height: 53px;
  overflow: hidden;
}
<div id="primary-menu" class="menu">
  <ul class="menu menu__navigation--primary">
    <li class="first leaf active-trail">
      <a href="/equipment" class="active-trail active">Equipment</a>
    </li>
    <li class="leaf">
      <a href="/solutions">Solutions</a>
    </li>
    <li class="leaf">
      <a href="/services">Services</a>
    </li>
    <li class="leaf">
      <a href="/locations">Locations</a>
    </li>
    <li class="leaf">
      <a href="/our-company">Our Company</a>
    </li>
    <li class="last leaf">
      <a href="/contact-us">Contact Us</a>
    </li>
  </ul>
</div>

答案 5 :(得分:0)

您应将“ display:flex”赋予“ ul”标签