查看此页面上的菜单: http://www.pieterdedecker.be/labs/vspwpg/?page_id=96
他们在Chrome 5(上图)和IE8(下图)中看起来没问题。
当我将页面加载到Firefox 3.5(上面)或IE7(下面)时出现问题。
在第一种情况下,右侧的箭头已移至下一行。在第二种情况下,菜单完全崩溃。
我如何调整我正在开发的网站?是因为FF3.5和IE7还没有完全实现W3C标准,还是因为我的CSS没有意义?我的HTML代码已经过验证XHTML 1.0严格,如here所示。
更新 - 如果您没有IE7并且您是Windows用户,则可以通过IE7的眼睛在此处查看该网站,而无需实际安装IE7:http://spoon.net/browsers
答案 0 :(得分:2)
IE7下拉
正如Sotiris所说,IE7最简单的解决办法是给ul#menu > li > ul
一个固定的宽度。这会导致子<li>
和<a>
元素正确占据其父宽度的100%。
IE7目前发生的情况是,您的下拉菜单宽度取决于white-space: nowrap
属性中最长子元素的长度。 IE7然后没有正确地将其应用于下拉列表<ul>
,而是从顶级菜单项(在您的情况下为104像素)中获取其宽度。
如果您仍想保留动态宽度菜单,可以在IE7中使用一段jQuery修复它,该片段在加载时循环遍历所有链接,找到最宽的一个并将父<ul>
设置为该宽度。它应该在您的$(window).load
事件处理程序中运行,就在您将所有ul#menu > li ul
设置为display:block:
// Nodig om de width te kunnen raadplegen
$("ul#menu > li ul").css("display", "block");
// Loop through all dropdowns and find widest child link in each
$('ul.children').each(function(){
// Find widest link in each submenu
var widest = 0;
$(this).children('li').each(function(){
if($(this).width() > widest)
widest = $(this).width();
});
// Set submenu width to widest child link
if(widest != 0)
$(this).width(widest);
});
要修复居中的项目,您还需要从此规则中删除text-align: center
:
ul#menu > li{
background: url(img/menuitem.png) left top;
display: block;
float: left;
height: 36px;
margin-right: 1px;
position: relative;
width: 104px;
}
最后,您需要确保在下拉链接上正确设置hasLayout标记。您可以通过在以下规则上设置zoom: 1
来执行此操作:
ul#menu > li > a, ul#menu > li > ul a {
zoom: 1;
display: block;
text-decoration: none;
white-space: nowrap;
}
Firefox 3.5子菜单指标
这是一个更容易修复。添加ul#menu > li > ul > li a
声明并更改您的span.sf-sub-indicator
规则,如下所示:
/* Makes the link a coordinate map for span.sf-ub-indicator */
ul#menu > li > ul > li a {
position: relative;
padding-right: 10px;
}
ul#menu > li > ul > li a > span.sf-sub-indicator {
position: absolute;
top: 0;
right: 0;
}
这将绝对将指标置于链接的最右侧。请注意,您需要对IE7应用此修复程序,否则您的子菜单将被推到一个链接太远。
答案 1 :(得分:0)
更改班级ul#menu&gt; li> a,ul#menu&gt; li> ul a to -
ul#menu > li > a, ul#menu > li > ul a
{
display:inline-block;
text-decoration:none;
white-space:nowrap;
width:95%;
}
并将<span>>></span>
移出锚标记。这个在Firefox上工作无法在IE上试用
<强>更新强>
<style type="text/css">
.menucontrol a:link, .menucontrol a:active, .menucontrol a:visited
{
border: 1px solid orange;
color: white;
background-color: orange;
}
.menucontrol a:hover
{
background-color: #fff;
color: #333;
}
.menucontrol, .menucontrol ul
{
margin: 0;
padding: 0;
list-style-type: none;
list-style-position: outside;
position: relative;
line-height: 1.5em;
}
.menucontrol a:link, .menucontrol a:active, .menucontrol a:visited
{
display: block;
padding: 0px 5px;
text-decoration: none;
}
.menucontrol li
{
float: left;
position: relative;
}
.menucontrol ul
{
position: absolute;
width: 12em;
top: 1.5em;
display: none;
}
.menucontrol li ul a
{
width: 12em;
float: left;
}
.menucontrol ul ul
{
top: auto;
}
.menucontrol li ul ul
{
left: 12em;
margin: 0px 0 0 10px;
}
.menucontrol li:hover ul ul, .menucontrol li:hover ul ul ul, .menucontrol li:hover ul ul ul ul
{
display: none;
}
.menucontrol li:hover ul, .menucontrol li li:hover ul, .menucontrol li li li:hover ul, .menucontrol li li li li:hover ul
{
display: block;
}
</style>
<body style="font-family: Consolas; font-size: 11px;">
<ul class="menucontrol">
<li><a href="#">1 HTML</a></li>
<li><a href="#">2 CSS</a></li>
<li><a href="#">3 Javascript</a>
<ul>
<li><a href="#">3.1 jQuery</a>
<ul>
<li><a href="#">3.1.1 Download</a><ul>
<li><a href="#">3.1.1 Download</a><ul>
<li><a href="#">3.1.1 Download</a></li>
<li><a href="#">3.1.2 Tutorial</a></li>
</ul>
</li>
<li><a href="#">3.1.2 Tutorial</a></li>
</ul>
</li>
<li><a href="#">3.1.2 Tutorial</a></li>
</ul>
</li>
<li><a href="#">3.2 Mootools</a></li>
<li><a href="#">3.3 Prototype</a></li>
</ul>
</li>
<script type="text/javascript">
function mainmenu()
{
$(" .menucontrol ul ").css({ display: "none" }); // Opera Fix
$(" .menucontrol li").hover(function()
{
$(this).find('ul:first').css({ visibility: "visible", display: "none" }).show(400);
}, function()
{
$(this).find('ul:first').css({ visibility: "hidden" });
});
}
$(document).ready(function()
{
mainmenu();
});