36

我为我的网站创建了一个水平导航(菜单)栏。当我将窗口的大小重新调整为小于栏的大小时,菜单项会被包装。我希望菜单保持不变(也就是说,它应该保持水平),而不管窗口的大小,因为它通常可以在 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>
4

6 回答 6

68

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

http://jsfiddle.net/Frd8J/

于 2012-07-18T11:46:46.597 回答
4

您应该设置一个min-widthfor #cssmenu > ul,它允许您的所有菜单项适合。

于 2012-07-18T11:36:20.287 回答
3

接受的答案在我的情况下不起作用,但@Ana 原始答案有效。我试图将此作为评论添加到她的答案中,但它不适合。按照建议在 UL 上设置最小宽度,根据需要将所有 LI 项目带回一行,但该行延伸到包含 div 的右侧。我在父 div 中添加了相同的最小宽度,我得到了我想要的,所有 LI 在容器内的一行中。作为最后一步,我从 UL 中删除了 min-width (所以这是一个不同的,比 Ana 的更通用的答案)并且一切仍然有效。简而言之,如果您按照接受的答案中的说明在 css 中制作 UL nowrap 并且无论如何它都会换行,那么请确保您为列表提供足够的宽度,以便它不需要换行。另一种增加宽度的方法(不使用 min-width)也是增加包含 div 中 UL 下方的内容区域的宽度。我的案例是一个选项卡 DIV,LI 是顶部的选项卡。每个选项卡下面都有内容。当下面的内容足够宽时,LI 已经排成一排。我本可以在每个选项卡内容上设置一个最小宽度,但对我来说,将它放在外部容器上一次效果更好。HTH。

于 2015-03-03T12:46:38.427 回答
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 结束和开始标签之间没有空格,现在这将显示它们全部在你加载页面上的导航项目之间没有空格,所以你可能不想要它们像它的一个条一样在视觉上连接起来,所以 iv 还在 li 结束和开始标签之间放置一个空格的代码,这将在您加载的屏幕上视觉上为您提供所有导航标签之间的单个空格,但它们仍将保持联系在一起因此,如果您使屏幕变窄,则不会放样。

于 2014-09-06T00:44:07.010 回答
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>

于 2016-10-18T15:04:58.650 回答
-1

你应该把“display:flex”给“ul”标签

于 2020-12-09T11:59:26.770 回答