全宽水平导航

问题描述:

我目前有一个伪全宽水平导航,通过在每个导致导航扩展为几乎全角的列表元素上设置边距来创建。问题在于,如果导航中的任何内容发生变化,它将会中断,我将不得不找出新的确切边距以使其扩展为全宽度。另外,不同的浏览器会稍微改变我的文本和其他内容的大小,这意味着在另一个浏览器中,一个浏览器中的全角太大(并且会打断另一条线)。全宽水平导航

所以我想找出一个更好的解决方案。我有一个为*导航项,其中包括改变下面的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; 
} 

结果看起来是这样的:

Top-level navigation

这似乎是完美的工作,但不幸的是(和可预测),它搅乱了子菜单,现在这个样子:

Sub-menu navigation

我一直在玩弄子菜单的CSS试图让它像过去一样工作,但一直不成功。

有没有人知道我需要在这里做什么更改,以获得*元素的全宽度导航工作,而离开原来的子菜单?

+0

我试图调整你的活的CSS到你张贴的“CSS变化”,但我没有得到子菜单打破。在这一点上,我不得不问,如果你能创造一个小提琴?我没有看到问题出现在哪里。谢谢! – jmbertucci 2013-04-30 03:54:48

+0

嗨乔丹,我在本地保存了网站,然后添加了你的额外的CSS规则,但我不相同。你能用新的主要导航风格创建一个小提琴吗?我可以帮助解决问题。 – jmbertucci 2013-05-01 02:05:29

+0

这里是回答descibes [全宽度响应水平页面导航]的链接(http://*.com/questions/24414642/responsive-horizo​​ntal-page-sliding-navigation/24465646#24465646) – 2014-07-08 13:20:47

我想我理解你,但让我看看我能否帮助你在那里(或者至少更接近)解释。

得到 “全宽” 你要确保你的容器元素有:

position:relativeposition: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。我注意到两个问题。项目数量有限的子菜单倾向于感到左侧被挤压。包含大量项目的子菜单将包装。

这可能是好的,或者你可能想考虑一个额外的小菜单的类,分散项目更好一点。

+0

感谢您的答复!不幸的是,那不是我想要的。基本上,我最初有导航菜单,目前在我提供的链接上。我现在修改了我在我的问题中列出的CSS代码的*导航菜单,以使其自动扩展为全角,而不考虑物品的数量等。 这似乎是正常工作但是,所做的更改已打破子菜单。我想要顶层菜单导航来使用这个更新的CSS,同时保持菜单菜单与原来的完全相同。 – Jordan 2013-04-30 03:12:21

+0

我明白了。这是一个浏览器问题,因为它在Chrome中看起来很好。子菜单是垂直堆叠的,不是水平的。你正在测试哪个浏览器?抱歉误解你的问题。 – jmbertucci 2013-04-30 03:20:52

+0

那么如果你在[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; 
}