【问题标题】:CSS / JQuery Horizontal menu with 2 line带有 2 行的 CSS / JQuery 水平菜单
【发布时间】:2014-10-26 16:42:49
【问题描述】:

我用 jquery 创建了一个菜单:div 1 用于主菜单,div 2 用于子菜单。 当您将鼠标悬停在项目上时,div 2 会出现在所选菜单下方。

我可以让菜单更优化吗?

你能用图片中描述的功能制作一个两行的 CSS 菜单吗?

<div id="main-menu">
    <ul>
        <li><a href="#" class="category" rel="">Home</a></li>
        <li><a href="#" class="category" rel="submenu1">test</a></li>
    </ul>
</div>

<div id="menu-wrap">
    <div id="menu">
        <div id="submenu1" class="submenu">
            <ul>
                <li><a href="#">sub menu 1</a></li>
                <li><a href="#">sub menu 2</a></li>
            </ul>
        </div>
    </div>
</div>

是否可以不使用jquery而只使用CSS来实现菜单?

【问题讨论】:

  • 那么到目前为止您尝试过的标记在哪里。
  • 您可以保留子菜单的 dom,但是当您转到另一个菜单列表时将其隐藏,只需将新菜单附加到它后面,然后当必须显示已加载的部分时,您只需设置可见性可见,这样你会更快一点,但你也会使用更多的内存
  • 你能把你目前做的代码贴出来

标签: jquery css menu


【解决方案1】:

为了使其工作,子菜单需要嵌套(在 DOM 中)它们的主菜单条目内。我们需要使用列表修改 HTML 标记。

代码描述:我们将为整个事物创建一个容器,并将其浮动。在容器之后,我们将有一个简单地清除浮动的 div,因此页面的其余部分可以正常显示。在容器内部,我们将有一个用于主菜单的无序列表——每个列表项将包含一个链接和一个用于子菜单的无序列表。这些子菜单列表最初将是display:none。我们必须绝对定位子菜单,以便它们出现在主菜单下方而不是中间。然后使用:hover 伪选择器和嵌套选择发生魔术:当悬停主菜单列表项时,它的子ul 标记将设置为display:block

HTML 更改:

<div id="menu-container">
    <ul id="main-menu">
        <li> <a href="#">Home</a> </li>
        <li> <a href="#">Menu Item 1</a>
            <ul class="submenu">
                <li><a href="#">Submenu 1 Item 1</a></li>
                <li><a href="#">Submenu 1 Item 2</a></li>
            </ul>
        </li>
        <li> <a href="#">Menu Item 2</a>
            <ul class="submenu">
                <li><a href="#">Submenu 2 Item 1</a></li>
                <li><a href="#">Submenu 2 Item 2</a></li>
            </ul>
        </li>
        <li> <a href="#">Menu Item 3</a>
            <ul class="submenu">
                <li><a href="#">Submenu 3 Item 1</a></li>
                <li><a href="#">Submenu 3 Item 2</a></li>
            </ul>
        </li>
    </ul>
</div>

<div class="clear">&nbsp;</div>

以及随附的 CSS:

#menu-container {
    float:right;
}
#main-menu {
    text-align:right;
    position:relative;
}
.submenu {
    position:absolute;
    left:0;
    top:1em;
    width:100%;
    text-align:center;
    display:none;
}
#main-menu, .submenu {
    list-style:none;
}
#main-menu li, .submenu li {
    display:inline;
}
#main-menu li:hover ul {
    display:block;
}
.clear {
    clear:both;
}

观看现场演示here

如果需要,这可能需要一些调整以支持旧版浏览器。一些代码(用于悬停效果)来自A List Apart Suckerfish CSS Dropdown Menu

【讨论】:

  • #main-menu li:hover ul 选择器的替代选择是#main-menu li a:hover + ul(如果您更喜欢悬停链接而不是列表项)。这使用了邻接选择器,并且可能有更窄的浏览器支持。
  • 非常感谢! :) 子菜单项与父项相比未居中对齐 - jsfiddle.net/ggrwLs0r/2
  • 我弹出了一个应该修复它的编辑(对于.submenu,我更改了left:0并添加了width:100%)。如果您发现我的解决方案合适,如果您单击复选标记将其标记为已接受的答案,我将不胜感激。
  • 谢谢!子元素未在活动元素的中心对齐。 i61.tinypic.com/2nu3ok3.jpg
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-18
  • 1970-01-01
  • 2014-03-26
  • 1970-01-01
相关资源
最近更新 更多