html - 垂直 CSS 多级菜单,将自身定位在 div 的顶部,而不是第一个菜单选项的位置

标签 html css

大多数 CSS 垂直菜单都会在第一级菜单旁边弹出第二层和第三层菜单。如果您转到第一级菜单中的第三个选项,这会创建一个空间。该第三选项的第二级菜单的位置仅与第三菜单第一级元素一样高。因此,二级菜单上方有一个空格,一直到一级菜单第一个选择。

我该如何做才能使弹出的第二级菜单位于最高的第一级菜单选择?

我制作了一个图形来进一步迭代这一点。

enter image description here

/image/AmQSI.png

enter image description here

/image/EIZxJ.png

在第一张图片中,当您将鼠标悬停在“购买”上时,菜单会弹出到侧面。相反,我希望菜单在上方的产品区域弹出。我希望这样即使我进入产品、购买、支持、下载...等,第二级菜单也始终会在菜单/产品的顶部弹出。

在我的实际菜单中,每个级别只有四个选项,因此将鼠标悬停在菜单上并保持菜单处于事件状态不会有任何问题。

有人有关于如何完成此操作的链接或想法吗?

谢谢 - 我希望我解释得很好..哈哈。

编辑:

*我从网站上取下了这个,我意识到有大量语法错误,例如缺少引号等。我只是想让它正常工作,然后再修复和完善它。 CSS

#menu ul { 
    margin: 0; 
    padding: 0; 
    list-style: none;
    width: 150px; /* Width of Menu Items */ 
    border-bottom: 1px solid #ccc; 
} 

#menu ul li { 
    position: relative; 
} 

#menu li ul { 
    position: absolute; 
    left: 149px; /*Set 1px less than menu width */ 
    top: 0; 
    display: block; 
} 

#menu li:hover ul {
    display: block; 
} 

#menu li:hover>ul { 
    visibility:visible; 
} 

#menu ul ul {
    visibility:hidden; 
} 

/* Fix IE. Hide from IE Mac \*/ 
* html #menu ul li { float: left; height: 1%; } 
* html #menu ul li a { height: 1%; } 
/* End */ 

/* Make-up syles */ 

#menu ul, li { 
    margin: 0 0 0 0; 
} 

/* Styles for Menu Items */ 
#menu ul a { 
    display: block; 
    text-decoration: none; 
    color: #777; 
    background: #fff; /* IE6 Bug */ 
    padding: 5px; 
    border: 1px solid #ccc; 
    border-bottom: 0; 
} 

/* Hover Styles */ 
#menu ul a:hover { 
    color: #E2144A; 
    background: #f9f9f9; 
} 

/* Sub Menu Styles */ 
#menu li ul a { 
    text-decoration: none; 
    color: #77F; 
    background: #fff; /* IE6 Bug */ 
    padding: 5px; 
    border: 1px solid #ccc; 
    border-bottom: 0; 
} 

/* Sub Menu Hover Styles */ 
#menu li ul a:hover { 
    color: #E2144A; 
    background: #f9f9f9; 
} 

/* Icon Styles */ 
#menu ul a.submenu {background:#fff url("r_arrow.gif") no-repeat right; } 
#menu ul a.submenu:hover {background:#f9f9f9 url("r_arrow.gif") no-repeat right;}

html:

    <div id=menu>
    <ul id=menuList>
        <li><a href="#" name="submenu" class="submenu">Products</a>
            <ul>
                <li><a href="#">All</a></li> 
                <li><a href="#">CodeCharge</a></li> 
                <li><a href="#">CodeCharge Studio</a></li> 
                <li><a href="#">DemoCharge Studio</a></li>
                    <li><a href="#" name="submenu" class="submenu">Comparison</a><ul>
                        <li><a href="#">CodeCharge Studio</a></li> 
                        <li><a href="#">DemoCharge Studio</a></li>
                    </ul></li> 
            </ul>
        </li> 
        <li><a href="#" name="submenu" class="submenu">Downloads</a>
            <ul>
                <li><a href="#">CodeCharge</a></li> 
                <li><a href="#">CodeCharge Studio</a></li> 
                <li><a href="#">DemoCharge Studio</a></li>
            </ul>
        </li> 
        <li><a href="#" name="submenu" class="submenu">Support</a>
            <ul>
                <li><a href="http://support.yessoftware.com">Support</a></li> 
                <li><a href="http://forums.codecharge.com">Forums</a></li> 
                <li><a href="http://support.yessoftware.com/kb_search.asp">KB</a></li>
            </ul>
        </li> 
        <li><a href="#" name="submenu" class="submenu">Purchase</a>
            <ul>
                <li><a href="#">Store</a></li> 
                <li><a href="#">Resellers</a></li> 
                <li><a href="#">Affiliate</a></li>
            </ul>
        </li> 
        <li><a href="#" name="submenu" class="submenu">Company</a>
            <ul>
                <li><a href="#">About Us</a></li> 
                <li><a href="#">Contact Us</a></li> 
                <li><a href="#">Press Releases</a></li>
            </ul>
        </li> 
    </ul>
</div> 

IE 修复:

<script type="text/javascript"> 
startList = function() {

    // code for IE
    if(!document.body.currentStyle) return;
    var subs = document.getElementsByName('submenu');
    for(var i=0; i<subs.length; i++) {
        var li = subs[i].parentNode;
        if(li && li.lastChild.style) {
            li.onmouseover = function() {
                this.lastChild.style.visibility = 'visible';
            }
            li.onmouseout = function() {
                this.lastChild.style.visibility = 'hidden';
            }
        }
    }
}
window.onload=startList;
</script> 

最佳答案

在 CSS 中,将 #menu ul 更改为 position:relative:

#menu ul
{ 
    margin: 0; 
    padding: 0; 
    position: relative;
    list-style: none;
    width: 150px; /* Width of Menu Items */ 
    border-bottom: 1px solid #ccc; 
} 

并从#menu ul li中删除相对定位:

#menu ul li
{ 
    /*position: relative;*/
} 

不过,这使得继续处理子元素有点困难。

这是一个演示:http://jsfiddle.net/KvaTC/

关于html - 垂直 CSS 多级菜单,将自身定位在 div 的顶部,而不是第一个菜单选项的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7290656/

相关文章:

html - 需要帮助翻转 css3 中的 div

HTML - 如何在后续页面中插入表单?

java - JSoup 是否支持 getComputedStyle 或等价物?

css - 如何相对于主体固定元素但不在页面流中?

css - 未归因文本的选择器?

HTML 无序列表不起作用

html - css html 页脚问题是否可以解决?

javascript - 当我运行这段 JavaScript 代码来打印数组时,没有显示任何内容。这段代码有什么问题?

javascript - 如何在javascript中自动扩展html选择元素

javascript - 如何将数组作为参数从 Ipython 笔记本传递到包含一些 javascript 函数的 html 文件?