我正在尝试为我正在使用的网站创建一个解决方案,其中菜单和子菜单水平居中,但 div 扩展到整个页面宽度。
首先,这是一个示例 HTML:
<div id="menu-container" class="full-width">
<nav id="nav1" class="normal-width">
<ul class="main-menu">
<li id="item1">
<a href="#">item 1</a>
<ul class="sub-menu">
<li id="item11">
<a href="#">item 1.1</a>
</li>
<li id="item12">
<a href="#">item 1.2</a>
</li>
<li id="item13">
<a href="#">item 1.3</a>
</li>
</ul>
</li>
<li id="item2">
<a href="#">item 2</a>
<ul class="sub-menu">
<li id="item21">
<a href="#">item 2.1</a>
</li>
<li id="item22">
<a href="#">item 2.2</a>
</li>
</ul>
</li>
<li id="item3">
<a href="#">item 3</a>
</li>
</ul>
</nav>
</div>
这个菜单的 CSS 是:
.full-width {
width: 100%;
}
.normal-width {
width: 1024px;
margin: 0 auto 0 auto;
}
a {
color: black;
text-decoration: none;
}
.clear {
clear: both;
}
.main-menu {
list-style-type: none;
margin: 0;
padding: 0;
position: relative;
background-color: red;
}
.main-menu > li {
float:left;
margin-right:2em;
}
.sub-menu {
list-style-type: none;
margin: 0;
padding: 0;
display:none;
background-color: orange;
}
.sub-menu li {
float:left;
margin-right:2em;
}
.main-menu > li.selected {
background-color:orange;
}
.main-menu > li.selected .sub-menu {
display:block;
position:absolute;
left:0;
right:0;
}
关联的 jQuery 是:
// Add a clear div to allow adding background color to main-menu
$(".main-menu").append("<div class='clear'></div>");
// Make the first class selected
$(".main-menu > li:first").addClass("selected");
// Switch the selected class
$(".main-menu > li").click(function() {
$(".selected").removeClass("selected");
$(this).addClass("selected");
});
// Disable menu links
$(".main-menu > li > a").click(function(e) {
e.preventDefault();
});
所有这一切都很好,花花公子,并创建了一个适当的水平菜单。我苦苦挣扎但无法创造的是您在这张图片中看到的:
关于图片请注意以下几点:
图片周围的黑色粗边框是网页的完整尺寸和宽度(即浏览器窗口边框)
中间的细垂直紫色线不可见,它们在图片中向您显示内容的位置,即没有内容会越过紫色线的最左侧或最右侧
顶级菜单项具有红色背景
子菜单将出现在橙色背景区域
现在,问题:
请注意红色和黄色背景如何延伸到网页边缘,但这些页面的项目出现在紫色线内的内容区域内。这就是我想要实现但无法实现的目标。我无法将背景扩展到网络浏览器的边缘(即整页宽度)。 我的解决方案将红色和橙色背景居中。
原文由 Greeso 发布,翻译遵循 CC BY-SA 4.0 许可协议
我在这里添加最终答案,以确保每个人都能看到我选择的答案(即为了更大的利益)。
这个答案的灵感来自 GraphicO,并进行了修改:
HTML:
然后,CSS:
最后是 jQuery:
谢谢。