全宽水平导航
我目前有一个伪全宽水平导航,通过在每个导致导航扩展为几乎全角的列表元素上设置边距来创建。问题在于,如果导航中的任何内容发生变化,它将会中断,我将不得不找出新的确切边距以使其扩展为全宽度。另外,不同的浏览器会稍微改变我的文本和其他内容的大小,这意味着在另一个浏览器中,一个浏览器中的全角太大(并且会打断另一条线)。全宽水平导航
所以我想找出一个更好的解决方案。我有一个为顶级导航项,其中包括改变下面的CSS有效的解决方案:
ul.menu {
list-style-type: none;
width: 100%;
margin: 0;
padding: 0;
overflow: hidden;
display: table;
}
ul.menu > li:first-child {
padding-left: 0;
}
ul.menu > li:last-child {
padding-right: 0;
}
ul.menu li {
padding: 12px;
display: table-cell;
text-align: center;
}
ul.menu li a {
padding: 12px 0;
margin: auto;
}
结果看起来是这样的:
这似乎是完美的工作,但不幸的是(和可预测),它搅乱了子菜单,现在这个样子:
我一直在玩弄子菜单的CSS试图让它像过去一样工作,但一直不成功。
有没有人知道我需要在这里做什么更改,以获得顶级元素的全宽度导航工作,而离开原来的子菜单?
我想我理解你,但让我看看我能否帮助你在那里(或者至少更接近)解释。
得到 “全宽” 你要确保你的容器元素有:
position:relative
或position:absolute
您当前的CSS有
.container {
position: relative;
/* ... */
那就好。这意味着我们可以将子元素定位在此框中,这样我们就可以获得“全角”。
现在我们要确保没有更低的子元素取代此规则。 有一个!我们要删除该位:
ul.menu li {
position: relative; /* remove */
/* ... */
这将导致子菜单包含父li
这会导致一些问题,当我们试图让它填写完整的菜单栏的宽度内。
接下来是调整子菜单。这种选择:
ul.menu li ul.sub-menu{ /*... */ }
我们想要的子菜单是全宽,所以我们增加:
width:100%;
现在,我们已经有了min-width:100%
,但我更喜欢坚持width
,特别是如果我们知道我们要去做100%
。也许这是我的旧IE6骨头令我痒,但也许有一个原因。它应该在现代浏览器中工作,而不需要添加width:100%
。所以采取一点盐一点点。
接下来,我们要通过添加定位子菜单:
left:0;
top:4.5em;
这应该放置子菜单的全部宽度横跨主菜单的宽度,砸下来刚好在主-菜单。根据您的设计需要,可能需要一些轻微的推特。
从那里,我们想平坦的子菜单项,以便他们水平。要做到这一点,我们需要删除:
ul.menu li ul.sub-menu li {
width: 100%; /* remove */
/* ... */
和
ul.menu li ul.sub-menu li a{
/* ... */
display:block; /* remove */
/* ... */
否则,子菜单项将只填满了整个空间,我们会回来的垂直设计。
我想这就是我所做的全部水平子菜单栏。我希望这就是你要找的。看起来你的垂直子菜单很好。
但是,我会跨浏览器测试这个解决方案。我只在Chrome的开发者工具中修改过。
(我希望我没有错过任何我的开发人员工具的编辑)
这可能不会让你一路有,但我希望它能帮助!
干杯!
ps。我注意到两个问题。项目数量有限的子菜单倾向于感到左侧被挤压。包含大量项目的子菜单将包装。
这可能是好的,或者你可能想考虑一个额外的小菜单的类,分散项目更好一点。
感谢您的答复!不幸的是,那不是我想要的。基本上,我最初有导航菜单,目前在我提供的链接上。我现在修改了我在我的问题中列出的CSS代码的顶级导航菜单,以使其自动扩展为全角,而不考虑物品的数量等。 这似乎是正常工作但是,所做的更改已打破子菜单。我想要顶层菜单导航来使用这个更新的CSS,同时保持菜单菜单与原来的完全相同。 – Jordan 2013-04-30 03:12:21
我明白了。这是一个浏览器问题,因为它在Chrome中看起来很好。子菜单是垂直堆叠的,不是水平的。你正在测试哪个浏览器?抱歉误解你的问题。 – jmbertucci 2013-04-30 03:20:52
那么如果你在[rtt.celero.com.au](http://rtt.celero.com.au)上看它,那么是的,它看起来很好,因为这是使用原始的CSS,而不是修改后的CSS,我包含在我的问题中。当您应用修改后的CSS时,顶层导航看起来很完美(如截图1所示),但会打破子菜单(如屏幕截图2所示)。我希望有人能够帮助我修改CSS,以便子菜单看起来和原来一样。 – Jordan 2013-04-30 03:26:14
更新这一个。希望它能解决你的问题。
ul.menu > li {
padding: 12px;
display: table-cell;
text-align: center;
}
我试图调整你的活的CSS到你张贴的“CSS变化”,但我没有得到子菜单打破。在这一点上,我不得不问,如果你能创造一个小提琴?我没有看到问题出现在哪里。谢谢! – jmbertucci 2013-04-30 03:54:48
嗨乔丹,我在本地保存了网站,然后添加了你的额外的CSS规则,但我不相同。你能用新的主要导航风格创建一个小提琴吗?我可以帮助解决问题。 – jmbertucci 2013-05-01 02:05:29
这里是回答descibes [全宽度响应水平页面导航]的链接(http://stackoverflow.com/questions/24414642/responsive-horizontal-page-sliding-navigation/24465646#24465646) – 2014-07-08 13:20:47